学习记录 监听器与过滤器
来源:互联网 发布:rar怎么解压到mac 编辑:程序博客网 时间:2024/04/20 18:27
Listener监听器
用来监听域对象HttpServletRequest、HttpSession、ServletContext的创建与销毁,属性变化,session绑定javaBean
创建与销毁 属性变化
ServletContext ServletContext Listener ServletContextAttributeListener
HttpSession HttpSessionListener HttpSessionAttributeListener
HttpServletRequest HttpServletRequest Listener HttpServletRequestAttributeListener
监听javaBean对象是否绑定到session:HttpSessionBindingListener
监听session序列化与反序列化(服务器session写入到硬盘):HttpSessionActivationListener
创建监听器
1.创建类实现Listener
2.重写接口方法
3.在web.xml中注册监听器
ServletContext:在服务器启动时创建,在服务器关闭时销毁。
HttpSession:getSession()时创建,在超时(默认30分钟,setMaxInactiveInterval(int interval)设置超时时间)、服务器关闭、invalidate()时销毁。
HttpServletRequest:发送请求时创建,产生响应时销毁。
监听属性变化
attributeAdded(ServletRequestAttributeEvent srae){}
attributeRemove(ServletRequestAttributeEvent srae){}
attributeReplaced(ServletRequestAttributeEvent srae){}
监听session绑定javaBean:在setAttribute(“user”,user)和removeAttribute(“user”)时监听到,
HttpSessionBindingListener是由javaBean实现的,不需要在web.xml中注册。
Filter过滤器
对web服务器管理的的web资源拦截,实现需求功能,例如URL访问权限控制、过滤敏感词汇、压缩响应信息等。
创建过滤器
1.创建类实现Filter借口
2.重写接口方法doFilter是执行过滤的方法(doFilter内如果没有chain.doFilter(request,res))
3.web.xml中配置文件
<filter>
<filter-name>DoFilter</filter-name>
<filter-class>com.omf.servlet.DoFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>DoFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注:Filter配置写在Servlet配置之上
多个Filter对同一个资源进行拦截会形成Filter链,并由web.xml中的<Filter-mapping>决定执行顺序。
Filter生命周期
1.服务器启动,创建Filter对象,调用init方法。
2.访问资源时,如果路径域Filter配置的拦截路径匹配,就会执行doFilter方法进行拦截。
3.服务器关闭时,调用destory方法销毁Filter。
FilterConfig
是Filter的配置对象。有如下方法:
getFilterName() 获取Filter名称
getInitParameter(String name) 获取Filter初始化参数
getInitParameterNames()
getServletContext() 获取ServletContext对象
<url-pattern>/*</url-pattern> 可以拦截指定url
<servlet-name>testServlet</servlet-name> 拦截指定servlet
<dispatcher>REQUEST</dispatcher> 请求拦截
<dispatcher>FORWARD</dispatcher> 转发拦截
全局编码过滤:重写request的getParameter方法,使用装饰设计模式:
1.创建一个类让他与被装饰类实现同一个借口或继承同一个父类
2.在装饰类中持有一个被装饰类的引用
3.定义一个构造方法将被包装的对象传递过来
4.对于不需要改写的方法直接调用,需要改写的方法则重写
public void doFilter(ServletRequestrequest, ServletResponse response, FilterChain chain) throws IOException, ServletException {
MyRequest mr=new MyRequest((HttpServletRequest)request);
chain.doFilter(mr,response);
}
class MyRequest extends HttpServletRequestWrapper{
private ServletRequestrequest;
public MyRequest(HttpServletRequestrequest) {
super((HttpServletRequest)request);
this.request=request;
}
@Override
public String getParameter(Stringname) {
if(name!=null){
return this.getParameterMap().get(name)[0];
}
return null;
}
@Override
public String[] getParameterValues(Stringname) {
if(name!=null){
return this.getParameterMap().get(name);
}
return null;
}
@Override
public Map<String, String[]> getParameterMap() {
Map<String,String[]> map=request.getParameterMap();
for(Map.Entry<String,String[]>entry:map.entrySet()){
String[] values=entry.getValue();
for(int i=0;i<values.length;i++){
try {
values[i]=new String(values[i].getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return map;
}
}
public void init(FilterConfigfConfig) throws ServletException {
this.fConfig=fConfig;
}
- 学习记录 监听器与过滤器
- 过滤器和监听器学习
- 过滤器,监听器与Servlet
- 过滤器与监听器
- JavaServlet过滤器与监听器
- 过滤器与监听器
- 监听器与过滤器
- 监听器与过滤器
- servlet 过滤器与监听器
- web过滤器与监听器
- 过滤器与监听器
- 【JavaEE学习笔记】文件上传与下载、监听器、过滤器
- 过滤器(Filter)、监听器(Listener)学习
- jsp的过滤器与监听器
- Servlet之监听器与过滤器
- 监听器Listener与过滤器Filter
- 过滤器与监听器代码案例
- 关于Servlet和过滤器、监听器的学习
- Wm指令源码
- C语言合法标识符(java)
- Temple of bone-BFS
- Java中堆栈及内存分配原理
- Hadoop使用
- 学习记录 监听器与过滤器
- Matlab R2016a破解安装教程
- 快排算法的实现
- 简单排序 模板
- UVa 103
- c++基础之模板函数
- 函数指针和函数对象
- [BZOJ2329][HNOI2011]括号修复 平衡树
- 当不确定输入数组为多少个的时候