Servlet过滤器
Servlet过滤器可以转换请求或修改响应。过滤器通常包括记录过滤器、图像过滤器、加密过滤器和多用途Internet邮件扩展(MIME)类型过滤器。
过滤器是一个简单的类,它实现了javax.servlet.Filter接口。
1 javax.servlet.Filter接口的实现方法
(1)init()方法:在使用doFilter()方法前调用,负责设置FilterConfig对象。FilterConfig对象将为过滤器提供初始化参数,并允许访问与之相关联的ServletContext(Servlet过虑器上下文)。
public void init(FilterConfig filterConfig) throws ServletException
(2)doFilter()方法:每当传递请求或响应时由Web容器调用。
public void doFilter(ServletRequest request,ServletResponse response FilterChain chain) throws IOException,ServletException
其中:
ServletRequest定义一个对象,将客户端请求提供给Servlet。
ServletResponse定义一个对象,帮助Servlet将响应发送给用户。
FilterChain用于调用过滤器链中的下一个过滤器。
(3)destroy()方法:销毁过滤器。任何可以实现该接口功能的类都可以被看成是过滤器,也可以被归为Web应用程序组件。
2 FilterConfig接口
FilterConfig接口用来建立过滤器的初始化参数、文本名称或应用程序运行下的ServletContext。
FilterConfig接口提供的四种方法:
(1)getFilterName():返回部署描述符中定义的过滤器的名称。
(2)getInitParameter(String name):将命名初始化参数的值作为字符串返回。
(3)getInitParameterNames():返回<filter>元素中定义的init参数的名称的字符串枚举。
(4)getServletContext():返回过滤器或Servlet的ServletCOntext。
示例:过滤器实现中文编码转换:
FilterEncoding.java代码如下:
package cn.webtier;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FilterEncoding extends HttpServlet implements Filter ...{
protected FilterConfig filterConfig;
private String targetEncoding="gb18030";
/** *//**
*
*/
private static final long serialVersionUID = -562221877359718235L;
//初始化
public void init(FilterConfig arg0) throws ServletException ...{
FilterConfig filterConfig=(FilterConfig)arg0;
this.filterConfig=filterConfig;
}
//执doFilter方法,进行中文字符转换。
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException ...{
HttpServletRequest request=(HttpServletRequest)arg0;
HttpServletResponse response=(HttpServletResponse)arg1;
FilterChain filterChain=(FilterChain)arg2;
request.setCharacterEncoding(targetEncoding);
response.setCharacterEncoding(targetEncoding);
System.out.print("FilterEncoding");
filterChain.doFilter(request, response);
}
//销毁
public void destroy() ...{
this.filterConfig=null;
}
}
web.xml代码如下:
<filter>
<filter-name>FilterEncoding</filter-name>
<filter-class>cn.FilterEncoding</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
792

被折叠的 条评论
为什么被折叠?



