【博学谷学习记录】超强总结,用心分享。会话技术、过滤器和监听器相关知识。

1.会话跟踪技术

   1)会话:用户打开浏览器,访问浏览器的资源,会话建立,知道有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应

    会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便在同一次会话的多次请求间共享数据

    HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将该请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享

    实现方式:客户端会话跟踪技术---Cookie

         服务器会话跟踪技术---Session

   2)Cookie基本使用

      1.客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问

      2.Cookie基本使用

      

@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1.创建Cookie对象,设置数据
        Cookie cookie=new Cookie("key","value");
        //2,发送cookie到客户端:使用response对象
        response.addCookie(cookie);
    }
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取客户端携带的所有cookie,使用request对象
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+".."+cookie.getValue());
}
}

    3.Cookie原理

      cookie的实现是基于HTTP协议的

      响应头:set-cookie response

      请求头:cookie request

    4.Cookie存活时间

      默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁

      setMaxAge(int seconds):设置Cookie 存活多少秒

      1.正数:将Cookie写入浏览器所在电脑硬盘,持久化存储,到时间自动删除

      2.负数: 默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁

      3.零: 删除对应Cookie

    5.Cookie存储中文

      Cookie不能直接存储中文,如需要存储需要转码为utf-8,

      步骤:1.先使用URLEncode将中文字符串进行编码,转成utf-8,然后进行赋值,赋值完之后用URLDecoder进行解码。

   3)Session

      服务端会话跟踪技术:将数据保存到服务端

      JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能

      使用:

        1.获取Session对象 

HttpSession session = request.getSession();

  

        2.Session对象功能

void setrArribute();//存数据大session域中
Object getAttribute();//根据key,获取值
void removeAttribute();//根据key,删除键值对

        3。Session原理:Session的实现是基于Cookie原理的

 

    

 

 

 

             4.Session的钝化、活化

                钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘文件中

                活化:再次启动服务器后,从文件中加载数据到Session中

                因此在服务器重启后,Session的数据依旧还在,但是不能长期保存。

              5.Session销毁

<!--  默认情况下30分钟会自动销毁-->
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>

  

            调用Session对象的invalidate()方法

                  用于退出功能的实现

              6.小结:

                cookie和session都是来完成一次会话内多次请求间数据共享的

                区别:

                存储位置:Cookie是将数据存储在客户端,session将数据存储在服务端

                安全性:Cookie不安全因此存储的位置,session安全

                数据大小:cookie最大3kb,session无大小限制

                存储时间:cookie可以长期存储,session默认30分钟

                服务器性能:cookie不占服务器资源,session占用服务器资源

    3)Filter

        1.

        概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一

        过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能

        过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等

        2.Filter快速入门

          1.定义类,实现filter接口,并重写其所有方法

          2.配置Filter拦截资源的路径,在类上定义@WebFilter注解

          3.在doFilter方法中输出一句话,并放行

          

package com.study.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
@WebFilter("/*")
public class filterDemo1 implements Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("被执行了");

        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

            3.Filter执行流程

                1.放行后访问对应资源,资源访问完成后,还会回到Filter中

                2.回到Filter中,执行放行后逻辑。

                  执行顺序:执行放行前逻辑—-—》放行-----》访问资源-----》执行放行后逻辑

                3.放行前执行的是request的数据,放行后执行的是response的数据

             4.Filter拦截路径配置

                    拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截

                  目录拦截: /user/*:访问/user下的所有资源,都会被拦截

                  后缀名拦截: *.jsp:访问后缀名为jsp的资源,都会被拦截

                  拦截所有:/*:访问所有资源,都会被拦截

             5.过滤器链

                    一个web应用,可以配置多个过滤器,这多个过滤器称之为过滤器链
                    注解配置的Filter,优先级按照过滤器类名(字符串)的自然排序(demo1优先于demo2)

    4)Listener

        1.概念:Listener表示监听器,是JavaWeb三大组件之一

             监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件

        2.实现

          ServletContextListener使用

            1.定义ServletContextListene接口

            2.在类上添加@WebListener注解

 

 

  

posted @ 2022-08-14 20:45  LINwenguan  阅读(8)  评论(0编辑  收藏  举报