`

【转载】Servlet过滤器的实例

    博客分类:
  • web
阅读更多

下面是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>  
分享到:
评论

相关推荐

    servlet过滤器实例经典过滤器

    接下来,我们将探讨五个经典的Servlet过滤器实例: 1. **字符集过滤器**:这个过滤器用于确保所有请求和响应都使用统一的字符编码,如UTF-8。在doFilter()方法中,我们可以通过设置HttpServletRequest和...

    Servlet过滤器的简单使用源码+文档

    1. `init(FilterConfig config)`:在过滤器实例化后并首次被调用时,服务器会调用这个方法。在这里,可以初始化过滤器的配置参数,这些参数通常在`web.xml`文件中定义。 2. `doFilter(ServletRequest request, ...

    Servlet过滤器小实例

    ### Servlet过滤器小实例 #### 实例背景与需求分析 在Web开发中,为了保障系统的安全性和稳定性,经常需要对接收到的HTTP请求进行预处理,比如验证用户身份、过滤恶意请求等。通常情况下,这些预处理操作可以在...

    servlet过滤器实例代码

    在这个实例代码中,我们将深入探讨Servlet过滤器的使用,以及如何通过它来增强应用程序的功能。 首先,我们需要了解Servlet过滤器的基本原理。在`web.xml`部署描述符中,我们可以通过`&lt;filter&gt;`和`&lt;filter-mapping&gt;...

    servlet过滤器技术实例,

    在本实例中,我们将深入探讨Servlet过滤器(Filter)的使用和实现,以及它在实际应用中的重要性。 一、Servlet过滤器简介 Servlet过滤器遵循Java Servlet规范,通过实现`javax.servlet.Filter`接口来创建自定义过滤...

    Servlet过滤器使用

    这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数。 b、doFilter(ServletRequest,ServletResponse,FilterChain)...

    5个Servlet过滤器实例源码(JSP)

    Servlet过滤器大全,各种详细使用的代码! 一、字符编码的过滤器 二、使浏览器不缓存页面的过滤器 三、检测用户是否登陆的过滤器 四、资源保护过滤器 五 利用Filter限制用户浏览权限

    基于servlet的过滤器

    `init()`在过滤器实例被创建并准备服务时调用,`doFilter()`是核心方法,用于拦截请求并进行处理,而`destroy()`则在过滤器生命周期结束时调用,用于清理资源。 在描述的项目中,`doFilter()`方法会被用来计数。...

    servlet过滤器配置及运行过程.doc

    servlet过滤器配置及运行过程,servlet实例用法。

    servlet过滤器

    本篇文章将深入探讨在Tomcat容器中如何使用servlet过滤器,并通过实例进行讲解。 首先,了解过滤器的基本概念。Servlet过滤器遵循Servlet规范中的Filter接口,该接口定义了三个关键方法:`doFilter()`, `init()` 和...

    servlet四个有用的过滤器

    ### 二、四个有用的Servlet过滤器实例 #### 1. **中文转码过滤器** 虽然在给定的部分内容中没有直接提供中文转码过滤器的具体代码实现,但我们可以大致推断其功能。该过滤器主要用于处理中文字符的编码问题,确保...

    JAVA_Servlet过滤器.

    在Web应用停止或重新部署时,容器调用destroy()方法来销毁过滤器实例,并将其标记为垃圾收集。 在过滤器的定义与实现方面,一个典型的过滤器类应该实现javax.servlet.Filter接口。该接口包含三个方法:init()、...

    Servlet过滤器与监听器.doc

    1. 容器创建过滤器实例。 2. 初始化过滤器,通过`init()`方法传递配置参数。 3. 请求到达时,容器调用`doFilter()`方法,过滤器有机会检查和修改请求。 4. 过滤器可以选择将请求传递给下一个过滤器或直接结束请求...

    servlet过滤器教程(含代码)

    Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达Servlet之前或者响应离开Servlet之后进行拦截处理。本教程将深入讲解Servlet过滤器的工作原理、配置与实际应用,同时提供相关的代码示例。 一...

    servlet+jsp实现过滤器 防止用户未登录访问

    此外,destroy方法用于在过滤器实例被销毁之前执行一些必要的清理工作,而init方法则是初始化过滤器实例。在init方法中可以接收一个FilterConfig对象,通过它可以获取web应用中filter的初始化参数,但在本例中,init...

    java过滤器简单实例

    Java过滤器(Filter)是Java Web开发中的一个重要概念,它主要应用于Servlet容器中,如Tomcat、Jetty等。过滤器允许我们在请求被处理之前或之后进行预处理和后处理,以此来拦截、修改或者增强请求和响应。在这个简单...

    过滤器 java servlet

    在Servlet 3.0及以上版本,过滤器可以通过容器进行实例化,支持依赖注入。这使得过滤器可以方便地利用Spring等框架提供的服务。 ### 7. 拦截与放行 在`doFilter()`方法中,通常会调用`chain.doFilter(request, ...

Global site tag (gtag.js) - Google Analytics