cookie_session

今日内容

1. 会话技术
    1. Cookie
    2. Session
2. JSP: 入门学习

会话技术

  1. 会话:一次会话包含了多次请求和响应

    一次会话:浏览器第一次给服务器发请求,会话建立,直到浏览器关闭(指的是浏览器的关闭,网页关闭不算),会话结束

  2. 功能:可以在一次会话范围内共享数据

  3. 方式:

    1. 客户端技术:cookie
    2. 服务器端技术:session

    cookie是存储在客户端的,

    session是存储到服务器端的。

Cookie:

  1. 概念:客户端会话技术,在客户端保存数据

  2. 快速入门

    • 使用步骤:

      1. 创建Cookie对象,绑定数据
        Cookie cookie = new Cookie(“msg”, “hello”);

      2. 发送Cookie对象
        response.addCookie(cookie);

        cookie是服务器给客户端发送的。

        @WebServlet("/cookieDemo1")
        public class CookieDemo1 extends HttpServlet {
            protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                //创建Cookie
                //Cookie cookie = new Cookie("msg", URLEncoder.encode("中国","utf-8"));
                Cookie cookie = new Cookie("msg", "hello");
                //让客户端保存该信息
                response.addCookie(cookie);
        
                //创建Cookie
                Cookie cookie2 = new Cookie("msg2", "hello2");
                //让客户端保存该信息
                response.addCookie(cookie2);
            }
        
      3. 获取Cookie对象
        Cookie[] cookies = request.getCookies();

      @WebServlet("/cookieDemo2")
      public class CookieDemo2 extends HttpServlet {
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
              //获取cookie
              Cookie[] cookies = request.getCookies();
              if(cookies!=null){
                  for (Cookie cookie : cookies) {
                      String name = cookie.getName();
                      String value = cookie.getValue();
                      //解码
      //                URLDecoder.decode(value,"utf-8");
      
                      System.out.println("name:" + name + "-value:" + value);
                  }
              }
          }
      
  3. 实现原理:

    • 基于头来完成
      1. response : set-cookie
      2. request: Cookie
  4. Cookie的细节

    1. 一次可不可以发送多个cookie?

      • 可以

      • 创建多个,发送多个就行了
        //创建Cookie
        Cookie cookie = new Cookie(“msg31”, “hello”);
        //让客户端保存该信息
        response.addCookie(cookie);

        //创建Cookie
        Cookie cookie2 = new Cookie(“msg32”, “hello2”);
        //让客户端保存该信息
        response.addCookie(cookie2);

    2. cookie能在浏览器中保存多长时间

      1. 默认,浏览器关闭,cookie销毁

        不过我们可以手动设置多长时间之后才销毁cookie。

      2. 持久化存储:

        • setMaxAge(int seconds)
          1. 正数:cookie多长时间失效
          2. 负数:默认值
          3. 零: 删除cookie信息
      3. cookie 能不能发送中文?

        • tomcat 8,可以
        • tomcat 8 之前的版本不可以, url编码–>%D4%C5 读取出来之后用url解码
      4. cookie 共享问题

        1. 一个tomcat服务器,可以有多个虚拟目录,那么这些web项目是否可以共享?
          • 默认,不能共享
          • setPath(String Path):设置cookie的有效范围.默认,设置当前虚拟目录
            • 如果要共享,可以将path设置而为"/"
        2. 不同tomcat服务器之间cookie共享的问题
      5. cookie的特点和作用

        1. cookie存储在浏览器中
        2. 浏览器对于单个cookie(4k)和cookie的数量都有限制(20个)
        3. 作用:
          1. cookie在客户端存储少量不敏感信息

            只登陆时用户名和密码。

          2. 不登录的情况下,完成一些识别

js和后台共享cookie

就是你在后台设置的cookie,前台可以获取到;

你在前台设置的cookie,后台可以获取到。

Session:服务器端的会话技术

重要的点我放到最前面声明:

session和cookie技术,在我们进行测试案例的时候不要忘了清除浏览器的缓存。

  1. 概念:
    服务器端的会话技术,实现一次会话中多次请求间共享数据,保存在服务器端的.

  2. 快速入门:

    1. 获取Session对象
      • HttpSession session = request.getSession();
    2. 使用Session域
      • session.setAttribute(“msg”,“hello session”);
      • session.getAttribute(“msg”)
      • session.removeAttribute(“msg”);
  3. session原理

    • 依赖于cookie或者使用url重写 ,cookie的key是:JSESSIONID
    1. cookie:response响应给客户端的时候设置cookie的key为JSESSIONID和value为

    ​ session的真是id–request.getSession().getId();

    @WebServlet("/sessionDemo3")
    public class SessionDemo3 extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1. 获取Session
            HttpSession session = request.getSession();
            System.out.println(session);
    
            //期望客户端关闭后,session也能相同
            Cookie jsessionid = new Cookie("JSESSIONID", session.getId());
            //设置客户端cookie存活时间
            jsessionid.setMaxAge(60*60);
            response.addCookie(jsessionid);
        }
    

    1. url重写: 就是直接在地址栏后面带参数-- localhost:8080/session?JSESSIONID=xxxxxxxxxxxx

  4. 具体细节:

    1. 当客户端关闭,服务器不关闭,两次获取的Session是否为同一个

      • 默认情况,不是

      为什么不是?

      ----关闭浏览器时, 服务器端的sessionId是不变的(默认情况下,session存活半小时);

      ​ session的会话技术需要客户端cookie的支持;


    ​ 但是 浏览器关闭,客户端的cookie就会失效(默认情况下,没有设置cookie时长);

    ​ 再次开启浏览器访问服务器的时候,服务器认为是第一次访问,然后再次创建一个session;

    ​ 两次的session对象肯定是不一样的。

     * 如果需要相同,则可以创建cookie,键:JSESSIONID,设置最大存活时间,
    

    cookie和session的时长都是可以设置的。

    默认cookie在关闭浏览器的时候失效;默认session是半小时失效。

  5. 客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
    * 不是同一个

     > 服务器重启,session对象一定是重新创建的。
    
     如何让服务器重启后是同一个session:
    
     > * session的钝化 
     >     * 服务正常关闭之前,会把session对象存到文件
     > * session的活化
     >     * 在服务器启动的时候,会把session文件转化为内存中的session对象
    
    1. session什么时候被销毁

      1. 服务器关闭
      2. 手动调用session的void invalidate() 方法
      3. session的默认失效时间
        选择性配置修改(下面这是Tomcat默认的)

        30
    2. session的特点

      1. session用于存储一次会话的多次请求的数据,存在服务器端

      2. session可以存储任意类型,任意大小的数据

      3. session与Cookie的区别:

        1. session存储数据在服务器端,Cookie在客户端
        2. session没有数据大小限制,Cookie有
        3. session数据安全,Cookie相对于不安全

四大域对象

根据有作用范围由小到大:
1.page(jsp有效)------》page域指的是pageContext.
   > 生命周期:当对JSP的请求开始,当响应结束时销毁。
             jsp页面被执行,声明周期开始;
             jsp页面执行完毕,声明周期结束;
2.request(一次请求)---》request域request HttpServletContext
3.session(一次会话)---》session域session HttpSession
4.application(当前web应用)---》application域指的是application  ServletContext;

JAVA四大域对象总结

转发和重定向

转发:一是转发请求,二是转发到前台页面。

转发请求是后台进行的,转发到前台页面是根据地址栏url访问–相对路径而言的。

​ localhost:8080/servlet路径, localhost:8080/前台页面

​ 粗的是相对路径。

补充

案例:验证码

1. 案例需求:
	1. 访问带有验证码的登录页面login.jsp
	2. 用户输入用户名,密码以及验证码。
		* 如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误
		* 如果验证码输入有误,跳转登录页面,提示:验证码错误
		* 如果全部输入正确,则跳转到主页success.jsp,显示:用户名,

JSP 补充(了解)

今日内容

1. JSP:
	1. 指令
	2. 注释
	3. 内置对象

2. MVC开发模式
3. EL表达式
4. JSTL标签
5. 三层架构

JSP:

1. 指令
	* 作用:用于配置JSP页面,导入资源文件
	* 格式:
		<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
	* 分类:
		1. page		: 配置JSP页面的
			* contentType:等同于response.setContentType()
				1. 设置响应体的mime类型以及字符集
				2. 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
			* import:导包
			* errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
			* isErrorPage:标识当前也是是否是错误页面。
				* true:是,可以使用内置对象exception
				* false:否。默认值。不可以使用内置对象exception
		2. include	: 页面包含的。导入页面的资源文件
			* <%@include file="top.jsp"%>
		3. taglib	: 导入资源
			* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
				* prefix:前缀,自定义的
2. 注释:
	1. html注释:
		<!-- -->:只能注释html代码片段
	2. jsp注释:推荐使用
		<%-- --%>:可以注释所有
3. 内置对象
	* 在jsp页面中不需要创建,直接使用的对象
	* 一共有9个:
			变量名					真实类型						作用
		* pageContext				PageContext					当前页面共享数据,还可以获取其他八个内置对象
		* request					HttpServletRequest			一次请求访问的多个资源(转发)
		* session					HttpSession					一次会话的多个请求间
		* application				ServletContext				所有用户间共享数据
		* response					HttpServletResponse			响应对象
		* page						Object						当前页面(Servlet)的对象  this
		* out						JspWriter					输出对象,数据输出到页面上
		* config					ServletConfig				Servlet的配置对象
		* exception					Throwable					异常对象

4. el表达式
    <configuration>
    <environments default="development">
    <environment id="development">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        </dataSource>
    </environment>
    </environments>
</configuration>

5. jstl模板
复习:
    1. http
        1. 发送的是文本(符合http协议的文本格式)
        2. 服务器收到的(符合http协议的文本格式)
        3. 动态服务器tomcat ,tomcat结构
        4. 传文本
        5. 传文件
        6. 编码
    2. tcp/ip
    3. servlet
    4. response request session cookie servletcontext
    5. jsp-->servlet
    6. chrome网页工具的使用方法
    7. el

还没讲的:
    拦截器 
    监听器
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@来杯咖啡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值