转载并修改自:
http://blog.csdn.net/lip009/archive/2006/10/17/1337730.aspx http://tech.sina.com.cn/s/2009-11-19/00471138968.shtml
@Servlet里的过滤器的主要作用
1,任何系统或网站都要判断用户是否登录。
2,网络聊天系统或论坛,功能是过滤非法文字
3,统一解决编码
@Servlet3.0之前怎么创建一个过滤器
1,生成一个普通的class类,实现Filter接口(javax.servlet.Filter)。
2,重写接口里面的三个方法:init,doFilter,destroy。
其中的doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
3,然后在web.xml配置过滤器。
具体例子:1.首先写一个权限过滤filter类,实现Filter接口
2.然后在web.xml里配置需要登陆权限验证的JSP文件:
a.如果是某个具体的JSP文件(如a.jsp)需要登陆验证
b.如果是某一个目录(如a/目录)整个目录下的文件都需要登陆验证:
@Servlet3.0中的创建过滤器:使用@WebFilter
@WebFilter用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是value、urlPatterns、servletNames三者必需至少包含一个,且value和urlPatterns不能共存,如果同时指定,通常忽略value的取值):
属性名类型描述
1.filterNameString指定过滤器的name属性。
2.valueString[]该属性等价于urlPatterns属性。但是两者不应该同时使用。
3.urlPatternsString[]指定一组过滤器的URL匹配模式。等价于标签。
4.servletNamesString[]指定过滤器将应用于哪些Servlet。取值是@WebServlet中的name属性的取值,或者是web.xml中的取值。
5.dispatcherTypesDispatcherType指定过滤器的转发模式。具体取值包括:
◆ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
◆initParamsWebInitParam[]指定一组过滤器初始化参数,等价于标签。
◆asyncSupportedboolean声明过滤器是否支持异步操作模式,等价于标签。
◆descriptionString该过滤器的描述信息,等价于标签。
◆displayNameString该过滤器的显示名,通常配合工具使用,等价于标签。
一个简单的示例:
@WebFilter(filterName = "AuthenticateFilter", urlPatterns ={"/stock.jsp", "/getquote"})
public class AuthenticateFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
String username = ((HttpServletRequest) request).getParameter("uname");
String password = ((HttpServletRequest) request).getParameter("password");
if (username == null || password == null) {
((HttpServletResponse) response).sendRedirect("index.jsp");
}
if (username.equals("admin") && password.equals("admin")) {
chain.doFilter(request, response);
} else {
((HttpServletResponse) response).sendRedirect("index.jsp");
}
}
public void destroy() {
}
public void init(FilterConfig filterConfig) {
}
}
如此配置之后,就可以不必在web.xml中配置相应的和元素了,容器会在部署时根据指定的属性将该类发布为过滤器。
具体Servlet3.0相关的内容请参考:http://blog.csdn.net/flfna/archive/2010/05/16/5598201.aspx