外观
过滤器和监听器
1.过滤器
一种特殊的Servlet,实现了过滤器接口(javax.servlet.Filter)
1.目的
1.过滤请求,过滤响应
2.改变请求
3.拦截请求
2.AOP
面向切面编程,装饰器模式(相当于外挂)
极大降低了耦合性
特点:
1.不改变源码添加新功能
2.动态性,功能动态添加
3.声明式,靠声明配置解决
3.过滤器的创建
一种特殊的Servlet,实现了过滤器接口(javax.servlet.Filter)
配置:
1.web.xml
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>com.kfm.web.CharsetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
2.注解
@WebFilter(urlPatterns = "/")// 过滤路径
方法:
// 初始化过滤器
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化过滤器");
charset=filterConfig.getServletContext().getInitParameter("charset");
}
// 过滤内容
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
request.setCharacterEncoding(charset);
response.setContentType("text/html;charset="+charset);
response.setCharacterEncoding("UTF-8");
filterChain.doFilter(request,response);
System.out.println("过滤器执行");
}
// 销毁过滤器
@Override
public void destroy() {
System.out.println("销毁过滤器");
}
filterChain.doFilter(request,response);把请求响应继续进行下去,没有这个代码请求响应会中断
改变请求响应的属性
生命周期:应用程序启动时初始化,关闭时销毁
2.监听器
观察者模式
实现ServletContextListener接口(application)
配置:
wex.xml
<listener>
<listener-class>com.kfm.web.ApplicationListenr</listener-class>
</listener>
3.会话跟踪技术
会话跟踪技术目的
HTTP是无状态协议,本身在多次请求之间没有联系需要开发者自己维护一个用户的多次请求之间的联系
会话跟踪技术有4个
1.URL重写
2.隐藏(只读)表单域
3.session
常用方法
getSeesion
invalidate() 让整个session失效
session超时
setMaxInactiveInterval (秒) 0或者不设置,永不超时
项目web.xml
<session-config>
<!--此处设置本项目所有的session默认超时时间(单位是分钟)-->
<session-timeout>5</session-timeout>
</session-config>
conf/web.xml
整个应用服务器超时时间(分钟)
如何设置超时时间
- 小说站 长
- 网速慢 长
- 个人网银(短)
4.cookie
其实是服务端响应对象,让浏览器建立的在客户端机器上保存的文本文件。
本质:小数据库
就是为了让请求,隐式的当作参数,每次都传到服务端。
cookie是根据同源策略上传的
cookie的超时设置
- 正数(以秒为单位超时时间)
- 0 立即删除
- 负数 表示,浏览器退出删除