JavaWeb 会话处理 复习笔记

1 请求转发和重定向的区别

### 重定向
            //重定向写法: 重新定位方向 参数即跳转的位置
        response.sendRedirect("login_success.html");

        1. 地址上显示的是最后的那个资源的路径地址

        2. 请求次数最少有两次, 服务器在第一次请求后,会返回302 以及一个地址, 浏览器在根据这个地址,执行第二次访问。

        3. 可以跳转到任意路径。 不是自己的工程也可以跳。

        4. 效率稍微低一点, 执行两次请求。

        5. 后续的请求,没法使用上一次的request存储的数据,或者 没法使用上一次的request对象,因为这是两次不同的请求。

### 请求转发

        //请求转发的写法: 参数即跳转的位置
        request.getRequestDispatcher("login_success.html").forward(request, response);

        1. 地址上显示的是请求servlet的地址。  返回200 ok

        2. 请求次数只有一次, 因为是服务器内部帮客户端执行了后续的工作。

        3. 只能跳转自己项目的资源路径 。  

        4. 效率上稍微高一点,因为只执行一次请求。

        5. 可以使用上一次的request对象。

2 Cookie 饼干. 其实是一份小数据, 是服务器给客户端,并且存储在客户端上的一份小数据 应用场景 :自动登录、浏览记录、购物车。
    为什么要有这个Cookie( http的请求是无状态。 客户端与服务器在通讯的时候,是无状态的,其实就是客户端在第二次来访的时候,服务器根本就不知道这个客户端以前有没有来访问过。 为了更好的用户体验,更好的交互 [自动登录],其实从公司层面讲,就是为了更好的收集用户习惯[大数据])

    2.1 Cookie怎么用

    添加Cookie给客户端

   1. 在响应的时候,添加cookie

 
            Cookie cookie = new Cookie("aa", "bb");
            //给响应,添加一个cookie
            response.addCookie(cookie);
        

    2. 客户端收到的信息里面,响应头中多了一个字段 Set-Cookie


2 获取客户端带过来的Cookie

        //获取客户端带过来的cookie
        Cookie[] cookies = request.getCookies();
        if(cookies != null){
            for (Cookie c : cookies) {
                String cookieName = c.getName();
                String cookieValue = c.getValue();
                System.out.println(cookieName + " = "+ cookieValue);
            }
        }


### 常用方法
        //关闭浏览器后,cookie就没有了。 ---> 针对没有设置cookie的有效期。
        //    expiry: 有效 以秒计算。
        //正值 : 表示 在这个数字过后,cookie将会失效。
        //负值: 关闭浏览器,那么cookie就失效, 默认值是 -1
        cookie.setMaxAge(60 * 60 * 24 * 7);
        
        //赋值新的值
        //cookie.setValue(newValue);
        
        //用于指定只有请求了指定的域名,才会带上该cookie
        cookie.setDomain(".itheima.com");
        
        //只有访问该域名下的cookieDemo的这个路径地址才会带cookie
        cookie.setPath("/CookieDemo");

3 Cookie总结

1. 服务器给客户端发送过来的一小份数据,并且存放在客户端上。

2. 获取cookie, 添加cookie

    request.getCookie();

    response.addCookie();

3. Cookie分类

    会话Cookie
        默认情况下,关闭了浏览器,那么cookie就会消失。

    持久Cookie

        在一定时间内,都有效,并且会保存在客户端上。

        cookie.setMaxAge(0); //设置立即删除

        cookie.setMaxAge(100); //100 秒

 4. Cookie的安全问题。

       由于Cookie会保存在客户端上,所以有安全隐患问题。  还有一个问题, Cookie的大小与个数有限制。 为了解决这个问题 于是有了 Session .

4 Session(会话 , Session是基于Cookie的一种会话机制。 Cookie是服务器返回一小份数据给客户端,并且存放在客户端上。 Session是,数据存放在服务器端。)
* 常用API
        //得到会话ID
        String id = session.getId();
        
        //存值
        session.setAttribute(name, value);
        
        //取值
        session.getAttribute(name);
        
        //移除值
        session.removeAttribute(name);

Session何时创建  , 何时销毁?

    创建 :在servlet里面调用了 request.getSession()

    销毁: session 是存放在服务器的内存中的一份数据。 当然可以持久化. Redis . 即使关了浏览器,session也不会销毁。

        1. 关闭服务器

        2. session会话时间过期。 有效期过了,默认有效期: 30分钟。

        

   

资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 HttpServletRequestWrapper 是 Java Servlet API 中的一个工具类,位于 javax.servlet.http 包中,用于对 HttpServletRequest 对象进行封装,从而在 Web 应用中实现对 HTTP 请求的拦截、修改或增强等功能。通过继承该类并覆盖相关方法,开发者可以轻松地自定义请求处理逻辑,例如修改请求参数、添加请求头、记录日志等。 参数过滤:在请求到达处理器之前,可以对请求参数进行检查或修改,例如去除 URL 编码、过滤敏感信息或进行安全检查。 请求头操作:可以修改或添加请求头,比如设置自定义的 Content-Type 或添加认证信息。 请求属性扩展:在原始请求的基础上添加自定义属性,供后续处理使用。 日志记录:在处理请求前记录请求信息,如 URL、参数、请求头等,便于调试和监控。 跨域支持:通过添加 CORS 相关的响应头,允许来自不同源的请求。 HttpServletRequestWrapper 通过继承 HttpServletRequest 接口并重写其方法来实现功能。开发者可以在重写的方法中添加自定义逻辑,例如在获取参数时进行过滤,或在读取请求体时进行解密。当调用这些方法时,实际上是调用了包装器中的方法,从而实现了对原始请求的修改或增强。 以下是一个简单的示例,展示如何创建一个用于过滤请求参数的包装器: 在 doFilter 方法中,可以使用 CustomRequestWrapper 包装原始请求: 这样,每当调用 getParameterValues 方法时,都会先经过自定义的过滤逻辑。 HttpServletRequestWrapper 是 Java Web 开发中一个强大的工具,它提供了灵活的扩展性,允许开发者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值