﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-未知数据-随笔分类-workspace</title><link>http://www.blogjava.net/wangjc0801/category/37153.html</link><description>从头开始学Java</description><language>zh-cn</language><lastBuildDate>Wed, 07 Jan 2009 08:04:50 GMT</lastBuildDate><pubDate>Wed, 07 Jan 2009 08:04:50 GMT</pubDate><ttl>60</ttl><item><title>javax.servlet.Filter运用 (转载)</title><link>http://www.blogjava.net/wangjc0801/archive/2009/01/07/250213.html</link><dc:creator>wangjc</dc:creator><author>wangjc</author><pubDate>Wed, 07 Jan 2009 00:41:00 GMT</pubDate><guid>http://www.blogjava.net/wangjc0801/archive/2009/01/07/250213.html</guid><wfw:comment>http://www.blogjava.net/wangjc0801/comments/250213.html</wfw:comment><comments>http://www.blogjava.net/wangjc0801/archive/2009/01/07/250213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wangjc0801/comments/commentRss/250213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wangjc0801/services/trackbacks/250213.html</trackback:ping><description><![CDATA[<p><font color="#0000ff" size="2">&nbsp;&nbsp;&nbsp; Servlets Filter 是Servlet 2.3 规范中新增加的，它是截取用户从客户端提交的请求，在还没有到达需要访问的资源时运行的一个类。它操纵来自客户端的请求，在资源还没有初发送到客户端前截取响应，并处理这些还没有发送到客户端的响应。<br />
Filters 有许多的应用场合。Servlet 2.3 规范建议如下的地方可以应用Filter：<br />
authentication filters <br />
logging and auditing filters <br />
image conversion filters <br />
data compression filters <br />
encryption filters <br />
tokenizing filters <br />
filters that trigger resource access events <br />
XSL/T filters that transform XML content <br />
MIME-type chain filters </font></p>
<font color="#0000ff" size="2">
<hr />
</font>
<p><font color="#0000ff" size="2">package jasso.web.filter; </font>
<p><font color="#0000ff" size="2">import java.io.IOException; </font>
<p><font color="#0000ff" size="2">import javax.servlet.Filter;<br />
import javax.servlet.FilterChain;<br />
import javax.servlet.FilterConfig;<br />
import javax.servlet.ServletException;<br />
import javax.servlet.ServletRequest;<br />
import javax.servlet.ServletResponse; </font>
<p><font color="#0000ff" size="2">public class SetCharacterEncodingFilter implements Filter {<br />
&nbsp;&nbsp;&nbsp; private String encoding; </font>
<p><font color="#0000ff" size="2">&nbsp;&nbsp;&nbsp; public void destroy() {<br />
&nbsp;&nbsp;&nbsp; } </font>
<p><font color="#0000ff" size="2">&nbsp;&nbsp;&nbsp; public void doFilter(ServletRequest request, ServletResponse response,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FilterChain chain) throws IOException, ServletException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setCharacterEncoding(encoding);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chain.doFilter(request, response);<br />
&nbsp;&nbsp;&nbsp; } </font>
<p><font color="#0000ff" size="2">&nbsp;&nbsp;&nbsp; public void init(FilterConfig config) throws ServletException {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; encoding = config.getInitParameter("encoding");<br />
&nbsp;&nbsp;&nbsp; }<br />
} </font>
<p><font color="#0000ff" size="2">web.xml部分 </font>
<p><font color="#0000ff" size="2">...... </font>
<p><font color="#0000ff" size="2">&lt;filter&gt;<br />
&nbsp;&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp; &lt;filter-class&gt;my.web.filter.SetCharacterEncodingFilter&lt;/filter-class&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;encoding&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;Shift_JIS&lt;/param-value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<br />
&lt;/filter&gt;<br />
&lt;filter-mapping&gt;<br />
&nbsp;&nbsp; &lt;filter-name&gt;encodingFilter&lt;/filter-name&gt;<br />
&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&lt;/filter-mapping&gt;<br />
&lt;servlet&gt;<br />
&nbsp;&nbsp; &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />
&nbsp;&nbsp; &lt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/servlet-class&gt;<br />
&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;config&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;/WEB-INF/config/struts-config.xml,/WEB-INF/config/struts-config-contents.xml&lt;/param-value&gt;<br />
&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;debug&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;2&lt;/param-value&gt;<br />
&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;detail&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;2&lt;/param-value&gt;<br />
&nbsp;&nbsp; &lt;/init-param&gt;<br />
&nbsp;&nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt; </font>
<p><font color="#0000ff" size="2">---------------------------------------------- </font>
<h4><font color="#0000ff" size="2">javax.servlet.filter的用法</font></h4>
<p><font color="#0000ff" size="2">如何实现一个过滤器呢？ <br />
1.所在的类实现Filter接口 <br />
　public interface Filter <br />
public void init(FilterConfig filterConfig)throws ServletException <br />
过滤器初始化是在容器启动时自动初始化 <br />
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletExcepton <br />
在标准Servlet中的doGet或doPost 方法中，传递参数为：HttpServletRequest、HttpServletResponse <br />
过滤器销毁 <br />
public void destroy() <br />
package cn.mldn.lxh.filter <br />
import java.io.*; <br />
import javax.servlet.*; <br />
public class FirstFilter implements Filter <br />
{ <br />
&nbsp;&nbsp;&nbsp; public void init(FilterConfig config)throws ServletException <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("过滤器初始化"); <br />
&nbsp;&nbsp;&nbsp; } <br />
　　public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(过滤doFilter); <br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp; public void destroy() <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(过滤器销毁); <br />
&nbsp;&nbsp; } <br />
} <br />
web.xml文件配置 <br />
&lt;filter&gt; <br />
&lt;filter-name&gt; first &lt;/filter-name&gt; <br />
&lt;filter-class&gt; cn.mldn.lxh.filter.FirstFilter &lt;/filter-class&gt; <br />
&lt;/filter&gt; <br />
&lt;filter-mapping&gt; <br />
&lt;filter-name&gt; first &lt;/filter-name&gt; <br />
与servlet中的url-pattern不一样，此处表示对那个页面进行过滤，如果全部都过滤，则"/*" <br />
&lt;url-pattern&gt; /* &lt;/url-pattern&gt; <br />
&lt;/filter-mapping&gt; <br />
如果过滤器要将内容传递到目的地，则需要FilterChain,将请求继续向下转发 <br />
过滤器也会执行两次：FilterChain这前执行一次，之后再执行一次 <br />
1.过滤非法文字： <br />
package cn.mldn.lxh.filter; <br />
import java.io.*; <br />
import javax.servlet.*; <br />
public class CharFilter implements Filter <br />
{ <br />
public void init(FilterConfig filterConfig)throws ServletException <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp; //System.out.println("init"); <br />
} <br />
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException <br />
{ <br />
&nbsp; String content=request.getParameter("content"); <br />
&nbsp; //如果indexOf返回-1则表示没有查到所要的内容 <br />
&nbsp; if(content!=null) {<br />
&nbsp;&nbsp; if(content.indexOf("AAA")==-1) <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; chain.doFilter(request,response); <br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp; else <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; System.out.println("有非法文字"); <br />
&nbsp;&nbsp; //如果需要的话，此处依然可以使用RequestDispatcher进行跳转 <br />
&nbsp;&nbsp; } <br />
&nbsp; }else <br />
&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; chain.doFilter(request,response); <br />
&nbsp;&nbsp; } <br />
}<br />
public void destroy() <br />
{ <br />
//System.out.println("过滤器销毁"); <br />
}<br />
}<br />
&lt;filter&gt; <br />
&lt;filter-name&gt; char &lt;/filter-name&gt; <br />
&lt;filter-class&gt; cn.mldn.lxh.filter.CharFilter &lt;/filter-class&gt; <br />
&lt;/filter&gt; <br />
&lt;filter-mapping&gt; <br />
&lt;filter-name&gt; char &lt;/filter-name&gt; <br />
&lt;url-pattern&gt; /* &lt;/url-pattern&gt; <br />
&lt;/filter-mapping&gt; <br />
2.对内容进行统一的编码 <br />
setCharacterEncoding("GB2312"); <br />
package cn.mldn.lxh.filter; <br />
import java.io.*; <br />
import javax.servlet.*; <br />
public class EncodingFilter implements Filter <br />
{ <br />
&nbsp; public void init(FilterConfig filterConfig)throws ServletException <br />
&nbsp; { <br />
&nbsp;&nbsp;&nbsp; //System.out.println("过滤器初始化"); <br />
&nbsp; } <br />
&nbsp; public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException <br />
&nbsp; { <br />
&nbsp;&nbsp; try{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.setCharacterEncoding("GB2312"); <br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp; catch(Exception e) <br />
&nbsp;&nbsp; {} <br />
&nbsp;&nbsp; chain.doFilter(request,response); <br />
&nbsp; } <br />
&nbsp; public void destroy() <br />
&nbsp; { <br />
&nbsp;&nbsp; //System.out.println("销毁"); <br />
&nbsp; } </font>
<p><font color="#0000ff" size="2">} <br />
&lt;filter&gt; <br />
&lt;filter-name&gt; encoding &lt;/filter-name&gt; <br />
&lt;filter-class&gt; &lt;/filter-class&gt; <br />
&lt;/filter&gt; <br />
&lt;filter-mapping&gt; <br />
&lt;filter-name&gt; encoding &lt;/filter-name&gt; <br />
&lt;url-pattern&gt; /* &lt;/url-pattern&gt; <br />
&lt;/filter-mapping&gt; <br />
3.登陆验证 <br />
package cn.mldn.lxh.filter; <br />
import java.io.*; <br />
import javax.servlet.*; <br />
import javax.servlet.http.*; <br />
&nbsp; public class LoginFilter implements Filter <br />
&nbsp; { <br />
&nbsp;&nbsp;&nbsp; public void init(FilterCoinfig filterConfig)throws ServletException <br />
&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp; //System.out.println("过滤器初始化"); <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; } <br />
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException <br />
{ <br />
&nbsp; //Session属于http范畴，把以ServletRequest对象需要先转换成HttpServletRequest对象 <br />
&nbsp; HttpServletRequest req=(HttpServletRequest)request; <br />
&nbsp; HttpSession session =req.getSession(); <br />
&nbsp; //如果session不为空，则可以浏览其它页面 <br />
&nbsp; if(session.getAttribute("uname")!=null) <br />
&nbsp; { <br />
&nbsp; chain.doFilter(request,response); <br />
&nbsp; } <br />
&nbsp; else <br />
&nbsp; { <br />
&nbsp; //通过requestDispatcher跳转到登陆面 <br />
&nbsp; request.getRequestDispatcher("login.jsp").forward(request,response); <br />
&nbsp; } <br />
} <br />
&nbsp; public void destroy() <br />
&nbsp; { <br />
&nbsp; //System,out.println("销毁"); <br />
&nbsp; } <br />
} <br />
&lt;filter&gt; <br />
&lt;filter-name&gt; login &lt;/filter-name&gt; <br />
&lt;filter-class&gt; cn.mldn.lxh.filter.LoginFilter &lt;/filter-class&gt; <br />
&nbsp;&nbsp; &lt;init-param&gt; <br />
&nbsp;&nbsp; &lt;param-name&gt; 参数名称 &lt;/param-name&gt; <br />
&nbsp;&nbsp; &lt;param-value&gt; 参数值 &lt;/param-value&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/init-param&gt; <br />
&lt;/filter&gt; <br />
&lt;filter-mapping&gt; <br />
&lt;filter-name&gt; login &lt;/filter-name&gt; <br />
&lt;url-pattern&gt; /* &lt;/url-pattern&gt; <br />
&lt;/filter-mapping&gt; <br />
读取web.xml中的参数的方法： <br />
public void init(FilterConfig arg0) throws ServletException { <br />
&nbsp;&nbsp; String 参数值= arg0.getInitParameter("参数名称"); <br />
}</font></p>
<p><font color="#0000ff" size="2"></font></p>
<img src ="http://www.blogjava.net/wangjc0801/aggbug/250213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wangjc0801/" target="_blank">wangjc</a> 2009-01-07 08:41 <a href="http://www.blogjava.net/wangjc0801/archive/2009/01/07/250213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>