博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java之Filter过滤器、filterConfig、禁用jsp缓存、设置图片缓存时间
阅读量:4291 次
发布时间:2019-05-27

本文共 2506 字,大约阅读时间需要 8 分钟。

FIlter:可以拦截请求和响应;实践中的使用:url访问权限控制、敏感词过滤、压缩响应信息。
Filter是一个接口,接口中的doFilter()方法是真正执行的方法;
Filter需要在web.xml中配置。
****使用步骤:类似servlet:
创建一个类继承接口,实现doFilter方法,web.xml中配置;
<filter>
<filter-name>testFilt</filter-name>
<filter-class>实现filter接口的类名(其中包名也要带上)</filt-class>
</filter>

<filter-mapping>

<filter-name>testFilt</filter-name>

<url-pattern>被拦截的路径(访问这个路径就被拦截) </url-attern>
<filter-mapping>

chain.dofilter(request,reponse);放行,向链中的下一个节点传递;

******FIlter生命周期:

*****FilterConfig作用:获取Filter的相关配置信息,和sercletConfig类似:初始化参数的获取,Filter名称的获取,servletContext对象的获取;
Filter的详细配置:可以有多个Filter,filter的执行顺序由web.xml中<filter-mapping>的顺序决定,在上面的先执行;所有filter执行完成,再执行servlet等web资源;
<url-pattern>的几种写法:
1.完全匹配:必须以/开始
2.*通配符:包括目录匹配:/a/*;扩展名匹配:*.do   *.action 不能以/开始;

过滤器Filter是servlet规范中定义的一种特殊的类,用于对servlet容器的调用过程进行拦截。有多个过滤器时依照<filrter-mapping>的先后顺序执行。

写一个Java类,实现Filter接口;在doFilter的方法中实现过滤的逻辑。

在web.xml中实现:

<filter>

<filter-name>CommentFilter2</filter-name>

<filter-class>web.CommentFilter2</filter-class>

<init-param>

<param-name>size</param-name>

<param-value>3</param-value>

</init-param>

</filter>

 

<filter-mapping>

<filter-name>CommentFilter2</filter-name>

<url-pattern>/CommentFilter2</url-pattern>

</filter-mapping>

 

package web;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CommentFilter2 implements Filter {	private FilterConfig config;	public void destroy() { }		 public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)	throws IOException, ServletException {		 System.out.println("Filter2 begin process...");		 HttpServletRequest request =	(HttpServletRequest)arg0; 	HttpServletResponse response =	(HttpServletResponse)arg1;	String name = request.getParameter("name");//获取传过来的参数	response.setContentType("text/ html;charset=utf-8");	PrintWriter out = response.getWriter();	int size = Integer.parseInt(config.getInitParameter("size"));//获取初始化配置参数	System.out.println(size);	if(name.length() > size){	out.println("超过最大长度");	}else{		//调用后续的过滤器,如果没有了,则调用 web 组件//		arg2.doFilter(arg0, arg1); 		request.getRequestDispatcher("add") .forward(request, response);		}	System.out.println("Filter2 process finished.");	}	public void init(FilterConfig arg0) throws ServletException { 		config = arg0;	}}

转载地址:http://tmmgi.baihongyu.com/

你可能感兴趣的文章
PowerDesigner(数据建模)使用大全
查看>>
RadioButton与CheckBox_优就业
查看>>
java中的throw与throws的区别
查看>>
js函数的传参是按值传对递
查看>>
优化用户登录体验效果
查看>>
用js批量选中功能实现更改数据库中status状态值_优就业
查看>>
JavaScript事件详解-zepto的事件实现(二)
查看>>
MySql表信息基础知识学习
查看>>
为什么document找到的不是html节点_优就业
查看>>
Javascript本地存储小结
查看>>
常用排序方法介绍
查看>>
Java异常分类和统一处理
查看>>
原 荐 cache线程池对数据库操作的饥饿问题
查看>>
使用Eclipse把java文件打包成jar 含有第三方jar库的jar包
查看>>
3种web会话管理的方式
查看>>
SSM(框架)-异常1:面向接口式编程异常
查看>>
Android蓝牙4.0之玩爆智能穿戴、家具(二)
查看>>
使用Condition实现多线程之间调用
查看>>
javaAPI之String
查看>>
JQ 新窗口打开链接并设置参数
查看>>