java之Filter过滤器、filterConfig、禁用jsp缓存、设置图片缓存时间


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;
	}
}

猜你喜欢

转载自blog.csdn.net/u011146511/article/details/87862699
今日推荐