Servlet 如何编写过滤器呢?

Java-教程王 Servlet 发布时间:2021-08-12 14:57:55 阅读数:6087 1

Servlet过滤器的功能及目的

Servlet过滤器的功能:
  1.   可用于动态拦截请求和响应
  2.   可修改请求或响应中的内容
 

Servlet过滤器常根据类型区别过滤器类型

  1. 身份验证过滤器(Authentication Filters)
  2. 数据压缩过滤器(Data compression Filters)
  3. 加密过滤器(Encryption Filters)
  4. 触发资源访问事件过滤器
  5. 图像转换过滤器(Image Conversion Filters)
  6. 日志记录和审核过滤器(Logging and Auditing Filters)
  7. MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)
  8. 标记化过滤器(Tokenizing Filters)
  9. XSL/T 过滤器(XSL/T Filters),转换 XML 内容

Servlet过滤器的个数

我们可以为一个Servlet添加一个或多个Servlet过滤器或附加一组过滤器

Servlet过滤器如何配置呢?

Servlet过滤器需在web.xml文件中进行申明,
然后映射到相应的Servlet或URL上
它会为每个过滤器创建一个实例
Servlet过滤器注意事项:
    1.Servlet过滤器可变相的用于JSP或Page页面上
    2.Servlet运行前会调用附加的Servlet过滤器
    3.过滤器类型只是我们根据过滤器的目的定义,都是采用想用的编写方式
    4.Servlet过滤器的运行顺序同web.xml配置文件中的配置顺序一致
通常将过滤器配置在所有的Servlet之前

Servlet过滤器包含哪些方法呢?

Servlet过滤器必须实现javax.servlet.Filter接口,
必须实现以下三个方法,如下所示: 过滤器是一个实现了 的 Java 类。javax.servlet.Filter 接口定义了三个方法:
编号 方法及备注
1 public void doFilter (ServletRequest, ServletResponse, FilterChain)
完成过滤器的逻辑处理
当请求Servlet时,首先运行此方法,然后进行ServletRequest或ServletResponse的判断或处理
当允许放行时,调用FilterChain(带着处理后的ServletRequest及ServletResponse)进入下一个过滤链
2 public void init(FilterConfig filterConfig)
此方法用于web服务器创建Filter实例对象时调用
其功能用于完成Filter对象的初始化操作
此方法只会运行一次
3 public void destroy()
Servlet容器在销毁过滤器实例前运行此方法
常将一些释放资源的操作放入此方法中

FilterConfig使用示例说明

例: 为Filter的init方法定义一个FilterConfig对象

如:
web.xml内容如下:
<filter>
    <filter-name>LogFilter</filter-name>
    <filter-class>com.java265.test.LogFilter</filter-class>
    <init-param>
        <param-name>Site</param-name>
        <param-value>Java爱好者</param-value>
    </init-param>
</filter>

Filter中获取FilterConfig的方法如下:

public void  init(FilterConfig config) throws ServletException {
    // 获取初始化参数
    String site = config.getInitParameter("Site"); 
    // 输出初始化参数
    System.out.println("网站名称: " + site); 
}


/*
以上过滤器会在控制台 输出:

网站名称: Java爱好者
*/

Servlet过滤器示例



/*
ServletFilter1.java
*/

package servlet01;

import java.io.IOException;
import java.io.PrintWriter;

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 ServletFilter1 implements Filter {

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {

		// 输出站点名称
		System.out.println("我是过滤器:http://www.java265.com");

		// 设置所有网页为utf-8
		response.setContentType("text/html;charset=utf-8");

		PrintWriter t = response.getWriter();

		t.write("<b>我是过滤器加入的Response! </b><br />");

		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// 获取初始化参数
		String v = filterConfig.getInitParameter("ParmName");

		// 输出初始化参数
		System.out.println("FilterConfig-Value: " + v);
	}

}


/*
ServletHelloWorld.java
*/


package servlet01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/helloWorld")
public class ServletHelloWorld extends HttpServlet {

	private static final long serialVersionUID = 888;

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		System.out.println("我是Servlet响应器!");

		PrintWriter t = resp.getWriter();
		t.write("我是Servlet输出的信息");
	}

}


/*
web.xml
*/
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>servlet01</display-name>
  <welcome-file-list>
    <welcome-file>PostTest.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  
 <filter>
  <filter-name>testFilter</filter-name>
  <filter-class>servlet01.ServletFilter1</filter-class>
  <init-param>
    <param-name>ParmName</param-name>
    <param-value>Java爱好者</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>testFilter</filter-name>
  <url-pattern>/index</url-pattern>
</filter-mapping>
  
 <servlet>
        <servlet-name>helloWorld</servlet-name>
        <servlet-class>servlet01.ServletHelloWorld</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>helloWorld</servlet-name>
        <url-pattern>/index</url-pattern>
    </servlet-mapping>
  
</web-app>


  1.启动web容器,控制台将输出以下信息:
 
   信息: 已开始重新加载名为[/servlet01]的上下文
    FilterConfig-Value: Java爱好者
    8月 12, 2021 2:55:37 下午 org.apache.catalina.core.StandardContext reload
   信息: 已完成重新加载名为/servlet01的上下文  
  
  2.访问url ,控制台将输出以下信息:
    http://localhost:8080/servlet01/index

    我是过滤器:http://www.java265.com
    我是Servlet响应器!

Servlet运行后台输出信息

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/Servlet/202108/185.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者