下面是JavaWeb工程中的web.xml配置
?
- <?xml?version="1.0"?encoding="UTF-8"?>??
- <web-app?version="2.5"??
- ????xmlns="http://java.sun.com/xml/ns/javaee"??
- ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
- ????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee? ??
- ????http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">??
- ????<filter>??
- ????????<filter-name>EncodingFilter</filter-name>??
- ????????<filter-class>com.jadyer.Filter.CharacterEncodingFilter</filter-class>??
- ????????<init-param>??
- ????????????<param-name>encoding</param-name>??
- ????????????<param-value>UTF-8</param-value>??
- ????????</init-param>??
- ????</filter>??
- ????<filter-mapping>??
- ????????<filter-name>EncodingFilter</filter-name>??
- ????????<url-pattern>/*</url-pattern>??
- ????</filter-mapping>??
- </web-app>??
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter> <filter-name>EncodingFilter</filter-name> <filter-class>com.jadyer.Filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
?下面是用于设定表单传输参数编码的过滤器CharacterEncodingFilter.java
?
- package?com.jadyer.Filter; ??
- ??
- 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; ??
- ??
- /** ?
- ?*?设定传输参数编码 ?
- ?*/??
- public?class?CharacterEncodingFilter?implements?Filter?{ ??
- ????private?String?encoding?=?"ISO8859_1"; ??
- ??
- ????/** ?
- ?????*?当过滤器对象被销毁的时候,由Web容器调用该方法 ?
- ?????*?@see?该方法主要用来释放过滤器对象所占用的资源 ?
- ?????*/??
- ????public?void?destroy()?{} ??
- ???? ??
- ????/** ?
- ?????*?由Web容器在刚生成过滤器对象的时候进行调用,主要用来完成对过滤器的初始化工作 ?
- ?????*?@see?该方法接收一个FilterConfig类型的参数,通过该参数以获得有关当前过滤器的信息 ?
- ?????*?@see?例如:调用FilterConfig的getFilterName()方法可以获得过滤器的名字 ?
- ?????*?@see?例如:调用getServletContext()方法可以获得当前的ServletContext对象 ?
- ?????*?@see?这里主要是用来读取web.xml中设定的<param-name>encoding</param-name>的值 ?
- ?????*/??
- ????public?void?init(FilterConfig?config)?throws?ServletException?{ ??
- ????????encoding?=?config.getInitParameter("encoding"); ??
- ????} ??
- ??
- ????/** ?
- ?????*?doFilter()方法是Filter接口中最核心的方法,完成过滤器的过滤功能 ?
- ?????*?@see?FilterChain类型的对象是保存多个过滤器执行顺序的对象 ?
- ?????*?@see?一个Web应用中可以有多个过滤器,这些过滤器就像珠子被线串在了一起 ?
- ?????*?@see?调用时,是一个接着一个进行调用的,调用顺序是按照过滤器在web.xml中声明的先后顺序 ?
- ?????*?@see?通过调用FilterChain对象的doFilter()方法,可以调用下一个过滤器的doFilter()方法 ?
- ?????*?@see?如果下一个过滤器是最后一个,则调用客户端所请求的Servlet、JSP或者其它文件 ?
- ?????*/??
- ????public?void?doFilter(ServletRequest?request,?ServletResponse?response,?FilterChain?chain)?throws?IOException,?ServletException?{ ??
- ????????request.setCharacterEncoding(encoding);?//设定表单参数编码方式 ??
- ????????chain.doFilter(request,?response); ??
- ????} ??
- }??
package com.jadyer.Filter; 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; /** * 设定传输参数编码 */ public class CharacterEncodingFilter implements Filter { private String encoding = "ISO8859_1"; /** * 当过滤器对象被销毁的时候,由Web容器调用该方法 * @see 该方法主要用来释放过滤器对象所占用的资源 */ public void destroy() {} /** * 由Web容器在刚生成过滤器对象的时候进行调用,主要用来完成对过滤器的初始化工作 * @see 该方法接收一个FilterConfig类型的参数,通过该参数以获得有关当前过滤器的信息 * @see 例如:调用FilterConfig的getFilterName()方法可以获得过滤器的名字 * @see 例如:调用getServletContext()方法可以获得当前的ServletContext对象 * @see 这里主要是用来读取web.xml中设定的<param-name>encoding</param-name>的值 */ public void init(FilterConfig config) throws ServletException { encoding = config.getInitParameter("encoding"); } /** * doFilter()方法是Filter接口中最核心的方法,完成过滤器的过滤功能 * @see FilterChain类型的对象是保存多个过滤器执行顺序的对象 * @see 一个Web应用中可以有多个过滤器,这些过滤器就像珠子被线串在了一起 * @see 调用时,是一个接着一个进行调用的,调用顺序是按照过滤器在web.xml中声明的先后顺序 * @see 通过调用FilterChain对象的doFilter()方法,可以调用下一个过滤器的doFilter()方法 * @see 如果下一个过滤器是最后一个,则调用客户端所请求的Servlet、JSP或者其它文件 */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding(encoding); //设定表单参数编码方式 chain.doFilter(request, response); } }
?字符过滤器:
CharFilter.java
?
- package?servlet; ??
- ??
- import?java.io.IOException; ??
- import?java.util.Enumeration; ??
- ??
- import?javax.servlet.Filter; ??
- import?javax.servlet.FilterChain; ??
- import?javax.servlet.FilterConfig; ??
- import?javax.servlet.ServletException; ??
- import?javax.servlet.ServletRequest; ??
- import?javax.servlet.ServletResponse; ??
- ??
- public?class?CharFilter?implements?Filter?{ ??
- ??
- ????public?void?destroy()?{ ??
- ??
- ????????System.out.println("aaaaaaaaaa"); ??
- ????} ??
- ??
- ????public?void?doFilter(ServletRequest?request,?ServletResponse?response, ??
- ????????????FilterChain?chain)?throws?IOException,?ServletException?{ ??
- ????????String?content?=?request.getParameter("text"); ??
- ????????if?(content?!=?null)?{ ??
- ????????????if?(content.indexOf("AAA")?==?-1)?{ ??
- ????????????????chain.doFilter(request,?response); ??
- ????????????}?else?{ ??
- ????????????????System.out.println("有非法文字"); ??
- ????????????} ??
- ????????}?else?{ ??
- ????????????chain.doFilter(request,?response); ??
- ????????} ??
- ??
- ????} ??
- ??
- ????public?void?init(FilterConfig?filterConfig)?throws?ServletException?{ ??
- ????????String?charset?=?filterConfig.getInitParameter("charset"); ??
- ????????System.out.println(charset); ??
- ????????Enumeration<String>?servletName?=?filterConfig.getInitParameterNames(); ??
- ????????while?(servletName.hasMoreElements())?{ ??
- ????????????String?object?=?(String)?servletName.nextElement(); ??
- ????????????System.out.println(object?+?"="??
- ????????????????????+?filterConfig.getInitParameter(object)); ??
- ??
- ????????} ??
- ??
- ????} ??
- ??
- }??
package servlet; import java.io.IOException; import java.util.Enumeration; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class CharFilter implements Filter { public void destroy() { System.out.println("aaaaaaaaaa"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String content = request.getParameter("text"); if (content != null) { if (content.indexOf("AAA") == -1) { chain.doFilter(request, response); } else { System.out.println("有非法文字"); } } else { chain.doFilter(request, response); } } public void init(FilterConfig filterConfig) throws ServletException { String charset = filterConfig.getInitParameter("charset"); System.out.println(charset); Enumeration<String> servletName = filterConfig.getInitParameterNames(); while (servletName.hasMoreElements()) { String object = (String) servletName.nextElement(); System.out.println(object + "=" + filterConfig.getInitParameter(object)); } } }
?web.xml配置
?
- <filter>??
- ????????<filter-name>char</filter-name>??
- ????????<filter-class>servlet.CharFilter</filter-class>??
- ????????<init-param>??
- ????????????<param-name>charset</param-name>??
- ????????????<param-value>gbk</param-value>??
- ????????</init-param>??
- ????????<init-param>??
- ????????????<param-name>it</param-name>??
- ????????????<param-value>hope</param-value>??
- ????????</init-param>??
- ????</filter>??
- ????<filter-mapping>??
- ????????<filter-name>char</filter-name>??
- ????????<url-pattern>/*</url-pattern>??
- ????</filter-mapping>??