目录
会话跟踪技术
一:简介
1.会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应
2.会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一浏览器,以便同一次会话的多次请求间共享数据
3.HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会将请求视为新的请求,因此我们需要会话跟踪技术来实现会话内数据共享
4.实现方式:
①客户端会话跟踪技术:Cookie
②服务端会话跟踪技术:Session
二:Cookie
1.Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问
2.Cookie基本使用:
发送Cookie
①创建Cookie对象,设置数据
②发送Cookie到客户端:使用response对象
Cookie cookie = new Cookie("username","zs");
response.addCookie(cookie);
--------------------------------------------------------------------------------------------------
获取Cookie
③获取客户端携带的所有Cookie,使用request对象
④遍历数组,获取每一个Cookie对象
⑤使用Cookie对象方法获取数据
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
String name = cookie.getName();
if (name.equals("username")){
String value = cookie.getValue();
System.out.println(name + ":" + value);
break;
}
3.Cookie原理
Cookie的实现是基于HTTP协议的
①响应头:set-cookie
②请求头:cookie
4.Cookie使用细节
①Cookie存活时间
默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁
setMaxAge(int seconds):设置Cookie存活时间
(1)正数:将Cookie写入浏览器所在的电脑硬盘里,持久化存储。到时间自动删除
(2)负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
(3)零:删除对应Cookie
②Cookie存储中文
(1)Cookie 不能直接存储中文
(2)如需要存储,则需要进行编码:URL编码
三:Session
1.服务端会话跟踪技术:将数据保存到服务端
2.JavaEE提供HttpSession接口,来实现一次会话的多次请求间数据共享功能
3.使用:
①获取Session对象
HttpSession session = request.getSession();
session.setAttribute("usename","张三");
②Session对象功能
HttpSession session = request.getSession();
Object username = session.getAttribute("username");
System.out.println(username);
4.Session原理
Session是基于Cookie实现的
5.Session使用细节
①Session钝化、活化:
(1)钝化:在服务器正常关闭后,Tomcat会自动将Session数据写入硬盘的文件中
(2)活化:再次启动服务器后,从文件中加载数据到Session中
②Session销毁:
(1)默认情况下无操作,30分钟自动销毁
(2)调用Session对象的invalidate()方法
四:小结
1.Cookie和Session都是来完成一次会话内多次请求间数据共享的
2.区别:
①存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端
②安全性:Cookie不安全,Session安全
③数据大小:Cookie最大3KB,Session无大小限制
④存储时间:Cookie可以长期存储,Session默认30分钟
⑤服务器性能:Cookie不占服务器资源,Session占用服务器资源
---------------------------------------------------------------------------------------------------------------------------------
Filter
一:简介
1.概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一
2.过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能
3.过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等...
二:Filter快速入门
@WebFilter("/*")
public class Filter implements javax.servlet.Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException{
}
@Override
public void doFilter(ServletRequest Request, ServletResponse Response, FilterChain Chain) throws IOException, ServletException {
System.out.println("Filter被执行了");
Chain.doFilter(Request,Response);
}
@Override
public void destroy() {
}
}
三:Filter执行流程
1.放行后访问对应资源,资源访问完成后,还会回到Filter中
2.回到Filter中会执行放行后的逻辑
执行放行前的逻辑--->放行--->访问资源--->执行放行后逻辑
四:拦截路径配置
Filter可以根据需求,配置不同的拦截资源路径
1.拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截
2.目录拦截:/user/*:访问/user下的所有资源,都会被拦截
3.后缀名拦截:*.jsp:访问后缀名为jsp的资源。都会被拦截
4.拦截所有:/*:访问所有资源,都会被拦截
五:过滤器链
一个web应用,可以配置多个过滤器,这多个过滤器被称为过滤器链