栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java Web-Servlet

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java Web-Servlet

文章目录

1.Filter过滤器

		①什么是Filter
		②Filter映射
		③Filter链
		④FilterConfig接口

2.监听器

1.Filter过滤器
①什么是Filter

	Filter被称作过滤器或者拦截器,其基本功能就是对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理前后实现一些特殊功能。这就好比现实中的污水净化设备,它可以~~看做~~看作一个过滤器,专门用于过滤污水杂质。图1描述了Filter在Web应用中的拦截过程,具体如下:

②Filter映射

	Filter拦截的资源需要在web.xml文件中进行配置,即Filter映射。Filter的映射方式可分为两种

Filter的元素可以配置过滤器所有拦截的资源,如果想让过滤器拦截所有的请求访问,那么需要使用通配符“*”来实现,具体示例如下:

Filter1

cn.itcast.chapter04.filter.MyFilter

Filter1

/*

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

● REQUEST

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

● INCLUDE

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

● FORWARD

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

● ERROR

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

为了大家更好地理解上述四个值的作用,接下来以FORWARD为例,分步骤演示Filter对转发请求的拦截效果,具体如下:

(1)在chapter04工程的cn.itcast.chapter04. filter包中,创建一个ServletTest.java程序,该程序用于将请求转发给first.jsp页面,如例1所示。

例1 ServletTest.java

1 package cn.itcast.chapter04.filter;

2 import java.io.*;

3 import javax.servlet.*;

4 import javax.servlet.http.*;

5 public class ServletTest extends HttpServlet {

6 public void doGet(HttpServletRequest request, HttpServletResponse

7 response) throws ServletException, IOException {

8 request.getRequestDispatcher("/first.jsp")

9 .forward(request, response);

10 }

11 public void doPost(HttpServletRequest request, HttpServletResponse

12 response) throws ServletException, IOException {

13 doGet(request, response);

14 }

15 }

(2)在chapter04工程的WebContent目录中创建一个first.jsp页面,该页面用于输出内容,如例2所示。

例2 first.jsp
1 <%@ page language=“java” contentType=“text/html; charset=utf-8”

2 pageEncoding=“utf-8”%>

3

4

5

6 first.jsp

7

8
(3)在chapter04工程的cn.itcast.chapter04.filter包中,创建一个FilterTest.java程序,专门用于拦截first.jsp页面

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

}
(4)在web.xml文件中,配置Filter过滤器,拦截first.jsp页面,具体代码如下:



FilterTest

cn.itcast.chapter04.filter.FilterTest





FilterTest

/first.jsp


(5)为了拦截ServletTest通过forward()方法转发的first.jsp页面,需要在web.xml文件中的增加一个元素,将该元素的值设置为FORWARD,修改后的FilterTest的映射如下所示:


  FilterTest
cn.itcast.chapter04.filter.FilterTest


 FilterTest
/first.jsp
  FORWARD


④FilterCinfig接口

FilterConfig 是 Servlet API 提供的一个用于获取 Filter 程序在 web.xml 文件中的配置信息的接口,该接口封装了 Filter 程序在 web.xml 中的所有注册信息,并且提供了一系列获取这些配置信息的方法


①创建过滤器

package com.mengma.filter;

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 MyFilter03 implements Filter {
private String characterEncoding;
FilterConfig fc;

public void init(FilterConfig fConfig) throws ServletException {
    // 获取 FilterConfig 对象
    this.fc = fConfig;
}

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    // 输出参数信息
    characterEncoding = fc.getInitParameter("Encoding");
    System.out.println("encoding初始化参数的值为:" + characterEncoding);
    chain.doFilter(request, response);
}

public void destroy() {
}

}

②配置过滤器

在 web.xml 文件中配置过滤器信息。为了防止其他过滤器影响 MyFilter03 的拦截效果,需要先将 web.xml 文件中其他过滤器的配置信息注释掉,然后将 MyFilter03 过滤器的映射信息配置在 MyServlet 配置信息的前面,具体代码如下所示:


MyFilter03
com.mengma.filter.MyFilter03

    encoding
    UTF-8



MyFilter03
/MyServlet


2.监听器

Servlet 事件监听器是一个实现了特定接口的 Java 程序,这个程序专门用于监听 Web 应用中 ServletContext、HttpSession 和 ServletRequest 等域对象的创建和销毁过程、监听这些域对象属性的修改以及感知绑定到 HttpSession 域中的某个对象的状态。

Servlet 规范中定义了八种监听器。

HttpSessionActivationListener 的描述中涉及活化和钝化的概念,HttpSession 对象从内存中转移至硬盘的过程称为钝化,HttpSession 对象从持久化状态变为运行状态的过程称为活化。

根据监听事件的不同,可以将表中的监听器分为如下三类。

①用于监听域对象创建和销毁的事件监听器(ServletContextListener 接口、HttpSessionListener 接口、ServletRequestListener 接口)。

②用于监听域对象属性增加和删除的事件监听器(ServletContextAttributeListener 接口、HttpSessionAttributeListener 接口、ServletRequestAttributeListener 接口)。

③用于监听绑定到 HttpSession 域中某个对象状态的事件监听器(HttpSessionBindingListener 接口、HttpSessionActivationListener 接口)。

在 Servlet 规范中,这三类事件监听器都定义了相应的接口,在编写事件监听器程序时只需实现对应的接口即可。在使用监听程序时,Web 服务器会根据监听器所实现的接口,把它注册到被监听的对象上,当触发了某个对象的监听事件时,Web 容器将会调用 Servlet 监听器与之相关的方法对事件进行处理。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/602922.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号