Javaweb——Servlet高级

一、Filter过滤器

1.什么是Filter
Filter被称作过滤器,其基本功能就是对Servlet 容器调用Servlet的过程进行拦截,从而在Serviet进行响应处理前后实现些特殊功能。 这就好比现实中的污水净化设备,它可以看作一个过滤器,专门用于过滤污水杂质。
当浏览器访问服务器中的目标资源时,会被Filter 拦截,在Filter中进行预处理操作,然后再将请求转发给目标资源。当服务器接收到这个请求后会对其进行响应,在服务器处理响应的过程中,也需要先将响应结果发送给过滤器,在过滤器中对响应结果进行处理后,才会发送给客户端。
其实,Filter 过滤器就是一个实现 了javax.servlet.Filter 接口的类。

二、Filter映射

1.拦截不同方式的访问请求
在web.xml文件中,-个filter - mapping>元素用于配置-个Filter 所负责拦截的资源。元素中有一个特殊的子元素 ,该元素用于指定过滤器所拦截的资源被Servlet容器调用的方式, 元素的值共有4个,具体如下。

REQUEST
当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问的,那么该过滤器将不会被调用。

INCL UDE
如果目标资源是通过RequestDispatcher的include()方法访问的,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

FORWARD
如果目标资源是通过RequestDispatcher的forward()方法访问的,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

ERROR
如果目标资源是通过声明式异常处理机制调用的,那么该过滤器将被调用。除此之外,过滤器不会被调用。

(1)创建一个叫chapter08项目,创建一个叫 cn.itcast.chapter08.filter包,创建一个名为ForwardServlet的Servlet类,该类用于将请求转发给first.jsp页面

package cn.itcast.chapter08.filter;
import java.io.*;
import javax.servlet.*;
public class ForwardFilter implements Filter {
   
	public void init(FilterConfig fConfig) throws ServletException {
   
		// 过滤器对象在初始化时调用,可以配置一些初始化参数
    }
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
   
		// 用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,该方法会被调用
		PrintWriter out=response.getWriter();
		out.write("Hello FilterTest");
	}
	public void destroy() {
   
		// 过滤器对象在销毁时自动调用 释放资源
	}
}

(2)在web.xm文件中,配置ForwardSerlet信息。

<servlet>
<description></description>
<display-name> forwardServlet</display-name>
<servlet-name>forwardServlet</servlet-name>
<servlet-class>cn. itcast. chapter08. filter . forwardServlet</servlet-class>
</servlet>
<servlet-mapping>

(3 )在chapter08项目的WebContent目录中创建一个frst.jsp页面,该页面用于输出内容,first.jsp

<%@ page language= "java" contentType="text/html; charset=utf-8"
pageEncoding= "utf-8"%>
<html>
<head>< /head>
. <body>
first.jsp
</body>
</html>

(4)在cn.itcast.chapter08.filter 包中,创建一 个过滤器ForwardFilter.java, 该过滤器专门用于对first.jsp页面进行拦截

package cn. itcast. chapter08.filter;
import java.io. *;0
public class ForwardFilter implements Filter {
   
	public vold init(FilterConfig fConfig) throws ServletException {
   
	//过滤器对象在初始化时调用,可以配置-些初始化参数
	}
	public void doF ilter(ServletRequest request, ServletResponse response,
		FilterChain chain) throws IOException, ServletException {
   
		//用于拦截用户的请求,如果和当前过治器的拦戴路径匹配,该方法会被调用
		PrintWriter out=response. getwriter();
		out . write("Hello FilterTest");
	public void destroy() {
   
	//过滤器对象在销毁时自动调用,释放资源
	}

(5)在web. xml文件中,配置过滤器的映射信息,拦截rstsps页面。

<filter>
<display-name>forwordFilter</display-name>
<filter- name >forwordFilter</filter-name >
<filter-class>cn. itcast. chapter08. filter. forwordF:
</filter>
<filter- mapping>
<filter- name> forwordFilter</filter- name>
<url-pattern>/forwordfilter</url-pattern>


2. Filter链
( 1 )在chapter08 项目的cn.itcast.chapter08.filter 包中新建两个过滤器MyFilter01 和MyFilter02

package cn. itcast . chapter08. filter; 
import java.io.*;0
public class MyFilter02 implements Filter {
   
	public void init(FilterConfig fConfig) throws ServletException {
   
		//过滤器对象在初始化时调用,可以配置-些初始化参数
	}
	public void doF ilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
   
	     	//用于拦截用户的请求,如果和当前过滤器的拦截路径匹配,该方法会被调用
		PrintWriter out=response . getWriter();
		out . write( "MyFilter02 Before<br />");
		chain. doFilter(request, response);
		out. . write("<br />MyFilter02 After<br />");
	}
	public void destroy() 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值