• 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);
        }
    }
  • 相关阅读:
    适合新手小白的UI学习路线完整版
    UI设计课程教程分享:Banner的设计和技巧
    UI设计:C4D作品案例分享
    还在凭实力单身吗,那是因为你还没学会这项技术
    PS故障风海报制作技术分享
    你真的了解标签栏设计吗?
    来看看N多设计师笔下的Spider Man
    羡慕女设计师啊,天生色感好!
    43. Multiply Strings
    40. Combination Sum II
  • 原文地址:https://www.cnblogs.com/fbbg/p/14233954.html
Copyright © 2020-2023  润新知