---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
下面是一个过滤器:
public class Fileter implements Filter
{
@Override
public void destroy()
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,
ServletException
{
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
HttpSession session = req.getSession();
String url = req.getRequestURI();
//注意,此处调用完doFilter之后一定要加上return不然下面会发生重
定向错误。
if(url.endsWith("fileter/login.jsp") || url.endsWith
("loginChecked"))
{
chain.doFilter(req, resp);
return;
}
if(session.getAttribute("user") != null)
{
chain.doFilter(req, resp);
}
else
{
//特别注意,此处不要加fileter的文件夹名,不然浏览器地
址会多一个fileter。
//此处就不需要在重定向后加上请求参数了,因为
loginChecked已经完成了这份工作了。
//resp.sendRedirect("login.jsp?
username="+req.getParameter("username")+"&radio="+req.getParameter("radio"));
resp.sendRedirect("login.jsp");
return;
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
}
}
上面有两个要注意的两个点。
下面是成功页面,和没有过滤器的成功页面有什么区别呢?
<body>
checked<br>
<%
String radio = (String)session.getAttribute("radio");
if(radio.equals("1"))
{
out.println("有");
}
%>
</body>
这是过滤器的配置文件:
<filter>
<filter-name>login</filter-name>
<filter-class>Fileter.Fileter</filter-class>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
*表示检测所有页面。
下面是用过滤器替换掉其中的一些字:
public class MinGanFilter implements Filter
{
@Override
public void destroy()
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,
ServletException
{
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
String text = req.getParameter("textarea");
System.out.println(text);
String te = text.replace("zhang", "li");
req.setAttribute("textarea", te);
chain.doFilter(req, resp);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
}
}
过滤器如果只过滤一个只需要写要过滤的就行了,不要写*否则影响效率。
下面是双filter的例子:
<body>
<form action = "filtershuan">
<input type = "textarea" name = "textarea">
<input type = "submit" value = "dengLu">
</form>
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,
ServletException
{
System.out.println("before");
chain.doFilter(request, response);
System.out.println("after");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException,
ServletException
{
// TODO Auto-generated method stub
System.out.println("before1");
chain.doFilter(request, response);
System.out.println("after1");
}
<filter>
<filter-name>filter1</filter-name>
<filter-class>Fileter.filter1</filter-class>
</filter>
<filter>
<filter-name>filter2</filter-name>
<filter-class>Fileter.filter2</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/filtershuan</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/filtershuan</url-pattern>
</filter-mapping>
结果:
before
before1
after1
after
这样的结果不是由哪个filter先写的造成的而是根据xml中filter的先后顺序造成
的。