【博学谷学习记录】超强总结,用心分享。会话技术、过滤器和监听器相关知识。
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。
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() { } }
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注解