javaWeb第三天---http协议和会话技术

一、http协议

  超文本传输协议,目的是发布和接收html文件

  Ⅰ、HTTP协议的作用以及特点

    ①http是一个客服端和服务端请求和应答的标准(TCP)。客服端向服务器的指定端口发起http请求,应答的服务器上存在一些资源,比如HTML页面和图像。

    ②请求过程:客户端发送一个请求,建立一个到服务器的TCP连接。HTTP服务器则在那个端口监听客服端发送的请求,一旦接收到请求,返回状态行和相应消息。

       ③HTTP使用TCP不使用UDP的原因:因为HTTP携带的信息有多条,tcp按顺序组织数据,和错误纠正。

    ④通过http或者https协议请求的资源由统一资源标识符来标识。

    特点

      ①基于请求和相应模型的协议

      ②默认访问端口 80

      ③灵活

      ④简单便捷

      ⑤无连接:http访问每次只处理一个请求

      ⑥无状态:对于事务处理没有记忆能力。如果以后请求不需要前边的数据,则应答较快。如果需要以前的数据,则需要次次重新传输数据,导致每次传输的数据量变大

二、会话技术

  一次会话有多次请求和应答。

  ①、什么是一次会话?

    浏览器第一次发送请求到服务器 ---》浏览器和服务器任何一方断开连接

  ②、功能

    实现在一次会话的多次请求中实现数据共享

  Ⅰ、Cookie

    概念:这是一项客户端的会话技术,将数据保存在客服端

    1、快速入门:

      ①创建Cookie对象

        new Cookie(String name,String value)

      ②将Cookie传输至客户端(响应cookie对象到浏览器)

        resp.addCookie(Cookie cookie);

      ③获取cookie对象

        Cookie[] cookies=req.getCookies();

    2、原理

      利用http协议的响应头的set-cookie和请求头的cookie完成

    3、cookie的注意事项

      ①、cookie一次可以发送多个

      ②、浏览器的保存时间

        默认:一次会话

        持久化:通过setMaxAge(int seconds)

            值为正数,就是按指定时间。值为负数,则是默认设置

      ③cookie在tomcat8之前不能存储中文

      ④cookie的共享问题:

        默认:在当前项目目录下

            例如:/javaWeb01

        设置可以在多个项目中共享,通过setPath()方法设置虚拟目录。

            例如:setPath("/"),就是在使用“/”开头访问的所有路径都可以共享到

 

    4、特点

      ①存储在浏览器

      ②每个cookie的大小不超过4k,每个域名下的cookie不能超过20个

    5、代码举例

@WebServlet("/cookie1")
public class Cookie1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        String str="sdfsf";
/*//       将str这个字符转化为以utf-8的格式编码,是java.net包下的,一般在字符串中有特殊字符时使用
        String encode = URLEncoder.encode(str, "utf-8");*/

/*//        将目标数据从utf-8编码状态转成字符串
        URLDecoder.decode()*/

        Cookie userID = new Cookie("userID", "123456");
//        设置cookie的保存时间
        userID.setMaxAge(180);
//        设置虚拟路径
        userID.setPath("/");
//        将cookie相应到浏览器
        resp.addCookie(userID);
    }
}
View Code
@WebServlet("/cookie2")
public class Cookie2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
//        获取cookie的值
        Cookie[] cookies = req.getCookies();
        for (Cookie cookie : cookies) {
            System.out.println(cookie.getName()+":"+cookie.getValue());
        }
    }
}
View Code

   Ⅱ、Session

    1、概念

      用于让一次会话的多次请求的数据实现共享,数据存储在服务器端的session对象中。

    2、获得对象

      request.getSession()---->getSession() 中的默认参数是true,当没有session对象时,会创建一个session对象

               -----> 如果默认参数为false,当没有已经存在的session对象时,会返回 空

    3、操作session对象

      session.setAttribute(String name,Object value):给session对象赋值

      session.getAttribute(String name):获取session对象的值

      session.removeAttribute(String name):移除session对象的数据

    4、session的原理

      session的实现依赖于cookie。

      实现过程:当客户端发送请求到服务器,通过request.getSession()创建session对象,在服务器端会开辟一块内存来存放这个session对象,这个session对象有一个sessionID,相当于地址值。然后服务器端会将这个sessionID响应到客户端,存放在cookie中。当进行下次请求时,会带着这个sessionID到服务器寻找属于这个访问的session,处理完后,服务器给出响应。

    5、session的注意事项

      当客户端关闭后再打开,前后两次的session不是同一个,因为客户端关闭后,服务器内容中和这个客服端对应的session也会被销毁。

      如果要保证前后访问是同一个:  

            Cookie cookie=new Cookie("JSESSIONID",session.getId());

            cookie.setMaxAge(60*50);//这个时间根据个人需要设置

    6、session的失效时间

      ①服务器关闭

      ②通过invalidate(),手动销毁

      ③默认存活时间30分钟   (tomcat-->conf--->web.xml--->session-config)

    7、session特点

      ①session中可以存储任何类型的数据,任何大小

      ②session是实现一个会话不同请求中的数据共享,再服务器端。

    8、示例代码   

@WebServlet("/session1")
public class SessionDemo1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//      获取session对象
        HttpSession session = req.getSession();
//        给session对象赋值
        session.setAttribute("msg","d");
//        获取session的id
        String id = session.getId();
        System.out.println(id);
    }
}
@WebServlet("/session2")
public class SessionDemo2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session = req.getSession();
        Object msg = session.getAttribute("msg");
        System.out.println(msg);
    }
}

 

posted @ 2021-01-05 22:02  橙汁one  阅读(127)  评论(0编辑  收藏  举报