Filter是一个很有用的东西(前面已经提到过),使用filter可以修改request, response, session,
application中的内容,javax.servlet.Filter的doFilter()的signature是这样的:
public
void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain) 例如, 我们如果想在request中增加一点东西,
可以request.setAttribute("xx","xx");然后需要记住的是一定要记得调用chain.doFilter(request,
response); 否则的话,后面的filter和servlet, jsp将不会得到执行。举例详细点就是:
filter1,
filter2都在web.xml中定义了,对应的url-mapping都是/*, index.jsp是该应用下的一个jsp,
那么如果直接访问index.jsp的话,那么首先访问的是filter1, 然后是filter2(加入filter1的定义在filter2之前),
最后才是index.jsp。filter1:
public void doFilter(ServletRequest
request, ServletResponse response,FilterChain chain) throws IOException,
ServletException
{
request.setAttribute("aaa","aaa");
chain.doFilter(request,response);
request.setAttribute("bbb","bbb");
}filter2:
public void
doFilter(ServletRequest request, ServletResponse response,FilterChain
chain) throws IOException, ServletException
{
System.out.println(request.getAttribute("aaa")+"
"+request.getAttribute("bbb"));
request.setAttribute("ccc","ccc");
chain.doFilter(request,response);
request.setAttribute("ddd","ddd");
}index.jsp:
System.out.println(request.getAttribute("aaa")+"
"+request.getAttribute("bbb")+" "+request.getAttribute("ccc")+"
"+request.getAttribute("ddd"));结论是先作filter1中chain.doFilter()前的部
分,然后是filter2中chain.doFilter()前的部分,然后是jsp,然后是filter2中chain.doFilter()后的代码
部分,然后是filter1中chain.doFilter()后的部分。