在现在的web开发中,使用Filter来完成一些支撑性的工作是普遍的。甚至一些web框架就是建立在其之上的。如struts2。没有filter这些框架就无法工做。
没记错的话,filter应是servlet2.3之后加入的新功能。一般的filter都要实现javax.servlet.Filter接口
一般性代码如下:
前面提到过filter是依赖servlet的,所以最后还要在web.xml进行配置:
没记错的话,filter应是servlet2.3之后加入的新功能。一般的filter都要实现javax.servlet.Filter接口
一般性代码如下:
public class MyFilter implements Filter{
FilterConfig filterConfig = null; //缺省的配置对象
String includeURL = ""; //自定义的参数(在web.xml配置)
/**
* 初始化Filter(在web容器启动时执行)
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
includeURL = filterConfig.getInitParameter("includeURL");
}
/**
* 过滤请求,用户提交请求时起作用
*/
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
HttpSession session = req.getSession();
String currUrl = req.getRequestURL().toString();
includeURL = new StringBuffer("http://").append(req.getHeader("host")).append(req.getContextPath()).toString()+includeURL;
//do some things
//当前工作全部完成后,将请求放开给过滤器链的下一filter
chain.doFilter(req, res);
}
/**
* 当filter销毁时执行
*/
public void destroy() {
filterConfig = null;
includeURL = null;
}
}
前面提到过filter是依赖servlet的,所以最后还要在web.xml进行配置:
<filter>
<filter-name>myFilter</filter-name>
<filter-class>com.myapp.filter.MyFilter</filter-class>
<init-param>
<param-name>includeURL</param-name>
<param-value>/index.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>myFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>