当前位置: 代码迷 >> Web前端 >> 【转载】Servlet过滤器的范例
  详细解决方案

【转载】Servlet过滤器的范例

热度:349   发布时间:2013-03-21 10:08:17.0
【转载】Servlet过滤器的实例

下面是JavaWeb工程中的web.xml配置

?

Xml代码 复制代码?收藏代码
  1. <?xml?version="1.0"?encoding="UTF-8"?>??
  2. <web-app?version="2.5"??
  3. ????xmlns="http://java.sun.com/xml/ns/javaee"??
  4. ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
  5. ????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee? ??
  6. ????http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">??
  7. ????<filter>??
  8. ????????<filter-name>EncodingFilter</filter-name>??
  9. ????????<filter-class>com.jadyer.Filter.CharacterEncodingFilter</filter-class>??
  10. ????????<init-param>??
  11. ????????????<param-name>encoding</param-name>??
  12. ????????????<param-value>UTF-8</param-value>??
  13. ????????</init-param>??
  14. ????</filter>??
  15. ????<filter-mapping>??
  16. ????????<filter-name>EncodingFilter</filter-name>??
  17. ????????<url-pattern>/*</url-pattern>??
  18. ????</filter-mapping>??
  19. </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

?

Java代码 复制代码?收藏代码
  1. package?com.jadyer.Filter; ??
  2. ??
  3. import?java.io.IOException; ??
  4. ??
  5. import?javax.servlet.Filter; ??
  6. import?javax.servlet.FilterChain; ??
  7. import?javax.servlet.FilterConfig; ??
  8. import?javax.servlet.ServletException; ??
  9. import?javax.servlet.ServletRequest; ??
  10. import?javax.servlet.ServletResponse; ??
  11. ??
  12. /** ?
  13. ?*?设定传输参数编码 ?
  14. ?*/??
  15. public?class?CharacterEncodingFilter?implements?Filter?{ ??
  16. ????private?String?encoding?=?"ISO8859_1"; ??
  17. ??
  18. ????/** ?
  19. ?????*?当过滤器对象被销毁的时候,由Web容器调用该方法 ?
  20. ?????*?@see?该方法主要用来释放过滤器对象所占用的资源 ?
  21. ?????*/??
  22. ????public?void?destroy()?{} ??
  23. ???? ??
  24. ????/** ?
  25. ?????*?由Web容器在刚生成过滤器对象的时候进行调用,主要用来完成对过滤器的初始化工作 ?
  26. ?????*?@see?该方法接收一个FilterConfig类型的参数,通过该参数以获得有关当前过滤器的信息 ?
  27. ?????*?@see?例如:调用FilterConfig的getFilterName()方法可以获得过滤器的名字 ?
  28. ?????*?@see?例如:调用getServletContext()方法可以获得当前的ServletContext对象 ?
  29. ?????*?@see?这里主要是用来读取web.xml中设定的<param-name>encoding</param-name>的值 ?
  30. ?????*/??
  31. ????public?void?init(FilterConfig?config)?throws?ServletException?{ ??
  32. ????????encoding?=?config.getInitParameter("encoding"); ??
  33. ????} ??
  34. ??
  35. ????/** ?
  36. ?????*?doFilter()方法是Filter接口中最核心的方法,完成过滤器的过滤功能 ?
  37. ?????*?@see?FilterChain类型的对象是保存多个过滤器执行顺序的对象 ?
  38. ?????*?@see?一个Web应用中可以有多个过滤器,这些过滤器就像珠子被线串在了一起 ?
  39. ?????*?@see?调用时,是一个接着一个进行调用的,调用顺序是按照过滤器在web.xml中声明的先后顺序 ?
  40. ?????*?@see?通过调用FilterChain对象的doFilter()方法,可以调用下一个过滤器的doFilter()方法 ?
  41. ?????*?@see?如果下一个过滤器是最后一个,则调用客户端所请求的Servlet、JSP或者其它文件 ?
  42. ?????*/??
  43. ????public?void?doFilter(ServletRequest?request,?ServletResponse?response,?FilterChain?chain)?throws?IOException,?ServletException?{ ??
  44. ????????request.setCharacterEncoding(encoding);?//设定表单参数编码方式 ??
  45. ????????chain.doFilter(request,?response); ??
  46. ????} ??
  47. }??
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

?

Java代码 复制代码?收藏代码
  1. package?servlet; ??
  2. ??
  3. import?java.io.IOException; ??
  4. import?java.util.Enumeration; ??
  5. ??
  6. import?javax.servlet.Filter; ??
  7. import?javax.servlet.FilterChain; ??
  8. import?javax.servlet.FilterConfig; ??
  9. import?javax.servlet.ServletException; ??
  10. import?javax.servlet.ServletRequest; ??
  11. import?javax.servlet.ServletResponse; ??
  12. ??
  13. public?class?CharFilter?implements?Filter?{ ??
  14. ??
  15. ????public?void?destroy()?{ ??
  16. ??
  17. ????????System.out.println("aaaaaaaaaa"); ??
  18. ????} ??
  19. ??
  20. ????public?void?doFilter(ServletRequest?request,?ServletResponse?response, ??
  21. ????????????FilterChain?chain)?throws?IOException,?ServletException?{ ??
  22. ????????String?content?=?request.getParameter("text"); ??
  23. ????????if?(content?!=?null)?{ ??
  24. ????????????if?(content.indexOf("AAA")?==?-1)?{ ??
  25. ????????????????chain.doFilter(request,?response); ??
  26. ????????????}?else?{ ??
  27. ????????????????System.out.println("有非法文字"); ??
  28. ????????????} ??
  29. ????????}?else?{ ??
  30. ????????????chain.doFilter(request,?response); ??
  31. ????????} ??
  32. ??
  33. ????} ??
  34. ??
  35. ????public?void?init(FilterConfig?filterConfig)?throws?ServletException?{ ??
  36. ????????String?charset?=?filterConfig.getInitParameter("charset"); ??
  37. ????????System.out.println(charset); ??
  38. ????????Enumeration<String>?servletName?=?filterConfig.getInitParameterNames(); ??
  39. ????????while?(servletName.hasMoreElements())?{ ??
  40. ????????????String?object?=?(String)?servletName.nextElement(); ??
  41. ????????????System.out.println(object?+?"="??
  42. ????????????????????+?filterConfig.getInitParameter(object)); ??
  43. ??
  44. ????????} ??
  45. ??
  46. ????} ??
  47. ??
  48. }??
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配置

?

Xml代码 复制代码?收藏代码
  1. <filter>??
  2. ????????<filter-name>char</filter-name>??
  3. ????????<filter-class>servlet.CharFilter</filter-class>??
  4. ????????<init-param>??
  5. ????????????<param-name>charset</param-name>??
  6. ????????????<param-value>gbk</param-value>??
  7. ????????</init-param>??
  8. ????????<init-param>??
  9. ????????????<param-name>it</param-name>??
  10. ????????????<param-value>hope</param-value>??
  11. ????????</init-param>??
  12. ????</filter>??
  13. ????<filter-mapping>??
  14. ????????<filter-name>char</filter-name>??
  15. ????????<url-pattern>/*</url-pattern>??
  16. ????</filter-mapping>??
  相关解决方案