首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

JAVA开发(七) - filter

2013-02-15 
JAVA开发(7) - filterfilter的意思简单的说就是过滤器,它的作用就是当用户请求一个url之前,可以预先做一些

JAVA开发(7) - filter

filter的意思简单的说就是过滤器,它的作用就是当用户请求一个url之前,可以预先做一些处理,当请求完url返回给用户之前还可以做一些处理(所以filter的功能十分的强大,如果想做的话可以强大到让用户,不能访问请求的url的程度。。。)<?XML:NAMESPACE PREFIX = O ?>

?

接口javax.servlet.Filter

?

?? void init(FilterConfig filterConfig)

?? 可以在此方法中完成Filter需要初始化的内容,在一个filter提供服务之前肯定会先调用此方法

?

?????? void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

当用户访问的url或者servlet被配置了使用此filter时,servlet/jsp容器会调用此方法,每次访问调用一次。chain参数为一个FilterChain接口的对象,可以简单的理解成chain包含了访问一个url上所有的需要调用的方法。

?

?????? void destroy()

当不需要一个filter再提供服务时调用,容器会调用此方法

?

filter的工作模式:

?

?JAVA开发(七) - filter

可以看到假如用户访问的一个url有两个filter的时候。

servlet容器会先调用最外层的filter(Filter1)的doFilter()方法,然后在由Filter1中调用的chain.doFilter方法将控制权返回给容器,接着容器调用第二层filter(Filter2)的doFilter方法,然后在由Filter2中调用的chain.doFilter方法将控制权返回给容器,这个时候容器才能去访问真正的需要请求的servlet和jsp,但servlet和jsp执行完毕以后,会运行Filter2中doFilter方法调用的chain.doFilter方法后剩余的代码片断,之后再运行Filter1中doFilter方法调用的chain.doFilter方法后剩余的代码片断。

?

Filter对应的请求方式有4种:request、forward、include、error

?

request:当用户直接请求一个网页时才会通过此filter,当用户通过RequestDispatcher(会再后面详细介绍该类的方法)的forward不会通过该filter

forward: 当用户通过RequestDispatcher的forward方法访问对应的url时才会通过该filter

include:当用户通过RequestDispatcher的include方法访问对应的url时才会通过该filter

error:当用户的请求通过错误处理机制的时候才会通过该filter(目前不准备详细论述)。

?

一个filter可以对应几种请求方式,但是如果配置时不写请求方式的话,默认方式为request。

?

下面先举一个例子看下filter工作的过程:

?

FilterFirst:

?

JAVA开发(七) - filterpackage?squall.servlet.filter;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterimport?java.io.IOException;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.Filter;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.FilterChain;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.FilterConfig;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletException;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletRequest;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletResponse;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterpublic?class?FilterFirst?implements?Filter
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter...{
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????public?void?destroy()
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????public?void?doFilter(ServletRequest?request,?ServletResponse?response,
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????FilterChain?chain)?throws?IOException,?ServletException
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????System.out.println("Begin?First?Filter!");
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????chain.doFilter(request,?response);
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????System.out.println("After?First?Filter!");
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????public?void?init(FilterConfig?config)?throws?ServletException
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter}
JAVA开发(七) - filter
JAVA开发(七) - filter

?

?

FilterSecond:

?

JAVA开发(七) - filterpackage?squall.servlet.filter;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterimport?java.io.IOException;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.Filter;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.FilterChain;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.FilterConfig;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletException;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletRequest;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletResponse;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterpublic?class?FilterSecond?implements?Filter
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter...{
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????public?void?destroy()
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????public?void?doFilter(ServletRequest?request,?ServletResponse?response,
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????FilterChain?chain)?throws?IOException,?ServletException
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????System.out.println("Begin?Second?Filter!");
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????chain.doFilter(request,?response);
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????System.out.println("After?Second?Filter!");
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????public?void?init(FilterConfig?config)?throws?ServletException
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter}
JAVA开发(七) - filter
JAVA开发(七) - filter

?

?

部署时修改web.xml如下:

在第一个<servlet>标签前添加:

???????

JAVA开发(七) - filter??<filter>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-name>FilterFirst</filter-name>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-class>squall.servlet.filter.FilterFirst</filter-class>
JAVA开发(七) - filter
JAVA开发(七) - filter????</filter>
JAVA开发(七) - filter
JAVA开发(七) - filter????<filter>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-name>FilterSecond</filter-name>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-class>squall.servlet.filter.FilterSecond</filter-class>
JAVA开发(七) - filter
JAVA开发(七) - filter????</filter>
JAVA开发(七) - filter
JAVA开发(七) - filter????
JAVA开发(七) - filter
JAVA开发(七) - filter????<filter-mapping>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-name>FilterFirst</filter-name>
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????<url-pattern>/HelloServlet</url-pattern>
JAVA开发(七) - filter
JAVA开发(七) - filter????</filter-mapping>
JAVA开发(七) - filter
JAVA开发(七) - filter????<filter-mapping>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-name>FilterSecond</filter-name>
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????<url-pattern>/HelloServlet</url-pattern>
JAVA开发(七) - filter
JAVA开发(七) - filter</filter-mapping>
JAVA开发(七) - filter
JAVA开发(七) - filter

?

将filter标签放置在一起,将filter-mapping标签放在再一起,顺序根据filter-name一致。这里的filter-mapping的顺序即为:假如我们访问的一个url有两个filter时,filter的先后顺序,web.xml中filter-mapping在前面的filter先被执行。

?

部署完毕之后我们访问:http://127.0.0.1:8080/train/HelloServlet

可以看到tomcat管理控制台输出如下:

Begin First Filter!

Begin Second Filter!

After Second Filter!

After First Filter!

?

上面的例子可以看出filter工作的过程和我们上面的图片一致。

?

下面我们来举一个比较贴近实际的例子看一下filter的方便之处。

下面的例子用于常见的解决中文乱码的问题,我们为了防止中文乱码经常需要调用

HttpServletRequest和HttpServletResponse的setCharacterEncoding方法,底下的这个filter的例子实现了,采用filter来解决这个问题。

Filterparam.html:

?

JAVA开发(七) - filter<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Strict//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
JAVA开发(七) - filter
JAVA开发(七) - filter<html?xmlns="http://www.w3.org/1999/xhtml">
JAVA开发(七) - filter
JAVA开发(七) - filter<head>
JAVA开发(七) - filter
JAVA开发(七) - filter<META?http-equiv="Content-Type"?content="text/html;?charset=GBK"?/>?
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter<script?type="text/javascript">...
JAVA开发(七) - filter
JAVA开发(七) - filter???????
JAVA开发(七) - filter
JAVA开发(七) - filter???????
JAVA开发(七) - filter
JAVA开发(七) - filterfunction?changeaction()
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter...{
JAVA开发(七) - filter
JAVA开发(七) - filter???????var?a?=?document.getElementsByName("filter");
JAVA开发(七) - filter
JAVA开发(七) - filter???????for(i?=?0;?i?<?a.length;?i++)
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????if(a[i].checked==true)
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter??????????????...{
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????fm.action=a[i].value;
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????break;
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????}
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter}
JAVA开发(七) - filter
JAVA开发(七) - filter</script>
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter????????<title>filterparameter.html</title>
JAVA开发(七) - filter
JAVA开发(七) - filter</head>
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter<body?bgcolor="#FDF5E6">
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter<h2>Filter中文乱码示范</h2>
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter<form?name?="fm"?method="post"?action="FilterShowParameter/No">
JAVA开发(七) - filter
JAVA开发(七) - filter??
JAVA开发(七) - filter
JAVA开发(七) - filter??<p>姓名:<input?type="text"?name="username"?size="15"?/>?</p>
JAVA开发(七) - filter
JAVA开发(七) - filter??
JAVA开发(七) - filter
JAVA开发(七) - filter??<p>使用filter:
JAVA开发(七) - filter
JAVA开发(七) - filter??<input?name="filter"?value="FilterShowParameter/No"?type="radio"?onclick="changeaction()"?checked?/>
JAVA开发(七) - filter
JAVA开发(七) - filter???????不使用
JAVA开发(七) - filter
JAVA开发(七) - filter??<input?name="filter"?value="FilterShowParameter/Yes"?type="radio"?onclick="changeaction()"?/>
JAVA开发(七) - filter
JAVA开发(七) - filter???????使用
JAVA开发(七) - filter
JAVA开发(七) - filter??</p>
JAVA开发(七) - filter
JAVA开发(七) - filter??<p>
JAVA开发(七) - filter
JAVA开发(七) - filter??<input?value="确认"?type="submit"?/>
JAVA开发(七) - filter
JAVA开发(七) - filter??<input?value="清除"?type="reset"?/>
JAVA开发(七) - filter
JAVA开发(七) - filter??</p>
JAVA开发(七) - filter
JAVA开发(七) - filter</form>
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter</body>
JAVA开发(七) - filter
JAVA开发(七) - filter</html>
JAVA开发(七) - filter
JAVA开发(七) - filter

?

直接放在train目录下

?

FilterShow:

?

?

JAVA开发(七) - filterpackage?squall.servlet.basic;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterimport?java.io.IOException;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?java.io.PrintWriter;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletException;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.http.HttpServlet;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.http.HttpServletRequest;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.http.HttpServletResponse;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterpublic?class?FilterShow?extends?HttpServlet
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter...{
JAVA开发(七) - filter
JAVA开发(七) - filter???????protected?void?doGet(HttpServletRequest?req,?HttpServletResponse?resp)
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????throws?ServletException,?IOException
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????showParam(?req,??resp);
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????protected?void?doPost(HttpServletRequest?req,?HttpServletResponse?resp)
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????throws?ServletException,?IOException
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????showParam(?req,??resp);
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter???????
JAVA开发(七) - filter
JAVA开发(七) - filter???????private?void?showParam(HttpServletRequest?req,?HttpServletResponse?resp)?throws?IOException
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????resp.setContentType("text/html");
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????PrintWriter?out?=?resp.getWriter();
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????String?docType?=?"<!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.0?Transitional//EN"> ";
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????String?name?=?req.getParameter("username");
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????out.println(docType?+?"<HTML> "?+?"<HEAD><TITLE>?showparam"?
JAVA开发(七) - filter
JAVA开发(七) - filter????????????????????????????+?"</TITLE></HEAD> "?+?"<BODY?BGCOLOR="#FDF5E6"> "
JAVA开发(七) - filter
JAVA开发(七) - filter????????????????????????????+"?????姓名:"?+?name?+?"???</br>"
JAVA开发(七) - filter
JAVA开发(七) - filter????????????????????????????);
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter??????????out.println("</body></html>");
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter}
JAVA开发(七) - filter
JAVA开发(七) - filter

?

部署时将FilterShow mapping至/FilterShowParameter/*

?

EncodingFilter:

?

JAVA开发(七) - filterpackage?squall.servlet.filter;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterimport?java.io.IOException;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.Filter;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.FilterChain;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.FilterConfig;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletException;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletRequest;
JAVA开发(七) - filter
JAVA开发(七) - filterimport?javax.servlet.ServletResponse;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filterpublic?class?EncodingFilter?implements?Filter
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter...{
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????public?void?init(FilterConfig?config)?throws?ServletException
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????String?str?=?config.getInitParameter("encoding");
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????if?(str?!=?null?&&?!"".equals(str))
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????encoding?=?str;
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????public?void?doFilter(ServletRequest?request,?ServletResponse?response,
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????FilterChain?chain)?throws?IOException,?ServletException
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????System.out.println("encoding?is?"?+?encoding);
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????if(encoding?!=?null)
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter??????????????...{
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????request.setCharacterEncoding(encoding);
JAVA开发(七) - filter
JAVA开发(七) - filter?????????????????????response.setCharacterEncoding(encoding);
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????}
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????chain.doFilter(request,?response);
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????public?void?destroy()
JAVA开发(七) - filter
JAVA开发(七) - filterJAVA开发(七) - filter???????...{
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????}
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter???????private?String?encoding?=?null;
JAVA开发(七) - filter
JAVA开发(七) - filter?
JAVA开发(七) - filter
JAVA开发(七) - filter}
JAVA开发(七) - filter
JAVA开发(七) - filter

?

?

EncodingFilter的功能就是将request和response setCharacterEncoding为预先定义好的encoding。getInitParameter 将在以后介绍。

?

EncodingFilter部署方式:

在web.xml最后一个</filter>下添加

?

?

?

JAVA开发(七) - filter<filter>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-name>EncodingFilter</filter-name>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-class>squall.servlet.filter.EncodingFilter</filter-class>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<init-param>
JAVA开发(七) - filter
JAVA开发(七) - filter???????????????<param-name>encoding</param-name>
JAVA开发(七) - filter
JAVA开发(七) - filter???????????????<param-value>GBK</param-value>
JAVA开发(七) - filter
JAVA开发(七) - filter????????</init-param>
JAVA开发(七) - filter
JAVA开发(七) - filter</filter>
JAVA开发(七) - filter

?

然后在最后一个</filter-mapping>下添加:

?

?

JAVA开发(七) - filter<filter-mapping>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-name>EncodingFilter</filter-name>
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????<url-pattern>/FilterShowParameter/Yes</url-pattern>
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????<dispatcher>REQUEST</dispatcher>
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????<dispatcher>FORWARD</dispatcher>
JAVA开发(七) - filter
JAVA开发(七) - filter????</filter-mapping>
JAVA开发(七) - filter

?

部署完毕后访问http://127.0.0.1:8080/train/filterparam.html

输入姓名为中文以后,如果使用filter 选择为不使用则会看到乱码

选择使用filter后则会看到正确的中文。

?

上面的例子是对REQUEST和FORWARD使用filter。

关于filter-mapping的include方式做一个简单的说明,如下:

?

?

JAVA开发(七) - filter<filter-mapping>
JAVA开发(七) - filter
JAVA开发(七) - filter????????<filter-name>FilterName</filter-name>
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????<servlet-name>HelloServlet</servlet-name>
JAVA开发(七) - filter
JAVA开发(七) - filter??????????????<dispatcher>INCLUDE</dispatcher>
JAVA开发(七) - filter
JAVA开发(七) - filter?</filter-mapping>
JAVA开发(七) - filter

?

include方式时必须将<url-pattern>修改为<servlet-name>

上面的filter-mapping的含义为:

当HelloServlet这个servlet里调用RequestDispatcher的include时,才会通过此filter。

?

filter的功能远远不只上面举的例子,filter还可以对servlet和jsp输出至客户端的内容进行修改,还可以用来判断是否满足一些条件,假如不满足条件就不让访问者访问相应的条件,这里就不做一一的介绍了。

热点排行