JSP详细篇——Servlet过滤器和监听器

过滤器和监听器

Servlet过滤器是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强,监听器可以监听到Web应用程序启动和关闭。创建监听器需要实现响应的接口,并对其进行配置。

Servlet过滤器

1.什么是过滤器

Servlet过滤器与Servlet十分相似,但是它具有拦截客户端请求的功能。Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要。对于程序开发人员来说,过滤器实质上就是在Web应用服务器上的一个Web应用组件,用于拦截客户端与目标资源之间的请求,并对这些请求进行过滤处理再发送给目标资源。

如果在一个Web应用中使用一个过滤器不能解决问题,可以部署多个过滤器对业务请求进行多次处理。这样就形成一个过滤器链,在Web容器处理过滤器链时,将按照过滤器的先后顺序对请求进行处理。

2.过滤器核心对象

过滤器对象放在javax.servlet包中,其名为Filter,它是一个接口,除了这个接口外,与过滤器相关的对象还有FilterConfig对象与FilterChain对象,这两个对象也同样是接口,为位于javax.servlet包中,分别为过滤器的配置对象和过滤器的传递工具。在实际开发过程中,定义过滤器只要直接或间接的实现Filter接口即可。而FilterChain和FilterConfig用于对过滤器的相关操作。

Filter接口

每一个过滤器都要直接或间接的实现Filter接口,在Filter接口中,定义了3个方法,分别为init(),doFilter(),destroy()。对应的方法说明如下:


方法声明


说明


public void init(FilterConfig filterConfig) throws ServlerException


过滤器初始化,该方法在过滤器初始化时调用


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


对请求进行过滤处理


public void destroy()


销毁方法,以便释放资源

FilterConfig接口

FilterConfig接口由Servlet容器进行实现,主要用于获取过滤器中的配置信息。其方法说明如下:


方法声明


说明


Public String getFilterName()


用于获取过滤器的名字


Public ServletContext getServletContext()


获取Servlet上下文


Public String getInitParameter(String name)


获取过滤器的初始化参数的值


Public Enumeration getInitParameterNames()


获取过滤器所有的初始化参数

FilterChain接口

FilterChain接口也是由Servlet容器实现的,在这个接口中只有一个方法,其方法声明为:public void doFilter(ServletRuquest request,ServletResponse response) throws IOException,ServletException

该方法用于将过滤后的请求传递给下一个过滤器,如果此过滤器已经是过滤器中的最后一个过滤器,那么,请求将传送给目标资源。

过滤器的创建与配置

创建也该过滤器需要实现javax.servlet.Filter接口,同时实现接口的3个方法。

范例:

package com.zgy.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 MyFilter implements Filter {

@Override

public void destroy() {

// TODO Auto-generated method stub

}

@Override

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2) throws IOException, ServletException {

// TODO Auto-generated method stub

}

@Override

public void init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}

}

使用过滤器不一定要将请求传递到下一个过滤器,如果业务逻辑需要,也可以在过滤器处理完后,直接回应客户端

创建名称为MyServlet的过滤对象,其web.xml的配置如下:

<filter>

<filter-name>MyFilter</filter-name>

<filter-class>com.zgy.filter.Myfilter</filter-class>

</filter>

<filter-mapping>

<filter-name>MyFilter</filter-name>

<url-pattern>/MyFilter</url-pattern>

</filter-mapping>

<filter>标签用于声明过滤对象,在这个标签中必须配置两个元素,分别为过滤器名称与过滤器完整类名,其中<filter-name>用于定义过滤器的名称,<filter-class>用于指定过滤器的完整类名

<filter-mapping>标签用于创建过滤器的映射,它的主要作用就是指定Web应用中,哪些URL应该用哪个过滤器进行处理。在<filter-mapping>标签中,需要指定过滤的名称和过滤的URL映射,其中,<filter-name>用于定义过滤器的名称,<url-pattern>用于指定过滤器应用的URL。

PS:<filter>标签中的<filter-name>可以是自定义的名称,<filter-mapping>标签中的<filter-name>是指定的已定义的过滤器名称,他需要与<filter>标签中的<filter-name>一一对应

时间: 2024-08-02 09:00:06

JSP详细篇——Servlet过滤器和监听器的相关文章

JSP详细篇——Servlet过滤器和监听器(二)

4.字符编码过滤器 在Java Web开发中,由于Web容器内部所使用的编码格式并不支持中文,所以,处理浏览器请求的中文数据会出现乱码. Web容器使用的编码格式是ISO-8859-1,所以在Web应用的业务处理中也会使用ISO-8859-1的编码格式.虽然浏览器提交请求使用的中文编码格式是UTF-8,但是经业务处理中的ISO-8859-1编码,就会出现乱码.在开发中,处理此问题的方法是:通过过滤器来处理字符编码. 范例: 实现图书信息的添加功能,并创建字符编码过滤器,避免中文乱码出现. (1)

JSP详细篇——Servlet(二)

Servlet开发 1.Servlet创建 Servlet创建很简单,主要有两种方法:一是创建一个普通的Java类使其继承HttpServlet类,在手动配置web.xml文件注册Servlet对象.另一种是直接通过IDE继承开发工具进行创建. 2.Servlet配置 (1)声明Servlet对象 在web.xml中,通过<servlet>标签声明一个Servlet对象.再此标签下主要包含两个子元素,分别为:<servlet-name>和<servlet-class>.

JSP详细篇——Servlet(一)

Servlet技术 Servlet是用Java语言编写应用到Web服务器端的扩展技术.它先于JSP产生,可以方便的对Web应用中的HTTP请求进行处理.在Java Web程序开发中,Servlet主要用于处理业务逻辑,它比JSP更具有业务逻辑层的意思.而且Servlet的安全性.扩展性以及性能方面十分优秀.在Java Web程序开发及MVC模式的应用方面起到了十分重要的作用. Servlet基础 1.Servlet结构体系 如图所示,Servlet.ServletConfig与Serializa

Servlet过滤器和监听器知识总结(转)

 Servlet过滤器是 Servlet 程序的一种特殊用法,主要用来完成一些通用的操作,如编码的过滤.判断用户的登录状态.过滤器使得Servlet开发者能够在客户端请求到达 Servlet资源之前被截获,在处理之后再发送给被请求的Servlet资源,并且还可以截获响应,修改之后再发送给用户.而Servlet监听器可以  监听客户端发出的请求.服务器端的操作,通过监听器,可以自动激发一些操作,如监听在线人数.  Servlet过滤器简介绍      Servlet过滤器是在Java Servle

java基础篇---Servlet过滤器

Servlet过滤器从字面上的字意理解为景观一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源. 过滤器的基本概念 Filter是在Servlet 2.3之后增加的新功能,当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器完成. 过滤器是以一种组件的形式绑定到WEB应用程序当中的,与其他的WEB应用程序组件不同的

Servlet,过滤器,监听器,拦截器的区别

<因时间仓促,引用别人的博文> 想起struts2和struts1的区别的时 候,发现为什么struts1要用servlet,而struts2要用filter呢?一时又发现,servlet和filter有什么区别呢?于是看 了看web.xml,一时又发现,咦,servlet.filter.listener?还有个interceptor? 慢慢来吧,需要补课的地方还有很多很多呀.初学的时候都不知道他们存在呢.呵呵. 下面从几个方面阐述一下题目中四个概念的区别与联系: 1.概念 2.生命周期 3.

JSP详细篇——EL表达式(二)

EL的隐含对象 为了能够获得Web应用中的是相关数据,EL提供了11个隐含对象,这些对象类似于JSP的内置对象,也是直接通过对象名进行操作.在EL的隐含对象中,除了PageContext是JavaBean对象,对应于javax.servlet.jsp.PageContext类型外,其他的隐含对象都对应于java.util.Map类型.这些隐含对象可以分为页面上下文对象.访问作用域范围的隐含对象和访问环境信息的隐含对象3种.下面分别进行详细介绍. 1.页面上下文对象 页面上下文对象为pageCon

JSP详细篇——JDBC操作数据库(二)

删除数据 范例: 在查询所有图书信息的页面中,添加删除图书信息的超链接,通过Servlet实现对数据的删除操作 (1)在book_list.jsp中,增加删除图书信息的超链接,将连接的地址指向DeleteServlet. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextP

JSP详细篇——异步处理

异步处理 一个Servlet的工作流程是:首先,Servlet接收到请求后,需要对请求修改的数据进行一些预处理.接着调用业务接口的某些方法,以完成业务处理.最后根据处理结果提交响应.至此,Servlet线程结束.在此过程中,如果任何一个任务没有结束,Servlet线程就处于阻塞状态,知道业务方法执行完毕.对于较大的应用,很容易造成程序性能的降低. Servlet3.0针对这一问题做出了突破性的工作,现在通过使用Servlet3.0的异步处理机制可以将之前的Servlet处理流程调整为以下过程.