JSP学习笔记--Servlet过滤器
来源:互联网 发布:家庭暴力的危害知乎 编辑:程序博客网 时间:2024/05/03 05:50
Servlet过滤器是一种小型的、可插入的Web组件,其提供了对Web应用程序的前期处理和后期处理的逻辑控制,可以拦截请求和响应,以便查看、提取或以某种方式操作正在客户端和服务器之间进行交换的数据。Servlet过滤器具有动态、灵活、透明、模块化、可移植、可重用等性质,是一种自包含的,模块化的组件,可以在使用时将其添加到请求/响应链中,也可以被删除而不影响到应用程序的其他Web组件。Servlet过滤器应用非常广泛,有拦截的地方一般都可以用到过滤器,其也和Servlet类似,也需要在Web应用配置文件(即Web.xml)中进行配置部署。
过滤器并不是servlet,他们并不实际创建一个请求。他们是请求到达一个servlet前的预处理程序,和/或响应离开servlet后的后处理程序。一个过滤器能够:
1.在一个servlet被调用前截获该调用
2.在一个servlet被调用前检查请求
3.修改在实际请求中提供了可定制请求对象的请求头和请求数据
4.修改在实际响应中提供了可定制响应对象的响应头和响应数据
过滤器类必须要实现Filter接口,这个接口在javax.servlet包中。该接口有三个方法如下:
1.void init(FilterConfig config) throws ServletException:在过滤器执行service前被调用,以设置过滤器的配置对象。服务器调用一次init(FilterConfig)以为服务准备过滤器,然后在请求需要使用过滤器的任何时候调用doFilter()。FilterConfig接口检索过滤器名、初始化参数以及活动的servlet上下文。
2.void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException;执行实际的过滤工作。在doFilter()方法中,每个过滤器都接受当前的请求和响应,而FilterChain包含的过滤器则仍然必须被处理。doFilter()方法中,过滤器可以对请求和响应做它想做的一切。过滤器调用chain.doFilter()将控制权传送给下一个过滤器。当这个调用返回后,过滤器可以在它的doFilter()方法的最后对响应做些其他的工作;例如,它能记录响应的信息。如果过滤器想要终止请求的处理或或得对响应的完全控制,则他可以不调用下一个过滤器。
3.void destroy();在过滤器执行service后被调用。服务器调用destory()以指出过滤器已结束服务。
下面是一个很经典的例子,记录请求所持续的时间。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TimerFilter implements Filter
...{
private FilterConfig config = null;
public void init(FilterConfig config) throws ServletException //初始化
...{
this.config = config;
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException, ServletException
...{
long before = System.currentTimeMillis(); //请求处理前获取系统时间
chain.doFilter(request, response); //将请求转发到过滤器链上的其他对象
long after = System.currentTimeMillis(); //请求处理后获取系统时间
String name = "";
if (request instanceof HttpServletRequest)
...{
name = ((HttpServletRequest)request).getRequestURI(); //获取发出请求的URI
}
config.getServletContext().log(name + ": " + (after - before) + "ms"); //记录信息
}
public void destroy() //结束服务
...{
config = null;
}
}
import javax.servlet.*;
import javax.servlet.http.*;
public class TimerFilter implements Filter
...{
private FilterConfig config = null;
public void init(FilterConfig config) throws ServletException //初始化
...{
this.config = config;
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException, ServletException
...{
long before = System.currentTimeMillis(); //请求处理前获取系统时间
chain.doFilter(request, response); //将请求转发到过滤器链上的其他对象
long after = System.currentTimeMillis(); //请求处理后获取系统时间
String name = "";
if (request instanceof HttpServletRequest)
...{
name = ((HttpServletRequest)request).getRequestURI(); //获取发出请求的URI
}
config.getServletContext().log(name + ": " + (after - before) + "ms"); //记录信息
}
public void destroy() //结束服务
...{
config = null;
}
}
前面说过,过滤器要在Web.xml文件中部署,部署跟Servlet部署非常相似,就是把Servlet部署中的标签中servlet改为filter就可以了。
<filter>
<filter-name>timerFilter</filter-name>
<filter-class>TimerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>timerFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-name>timerFilter</filter-name>
<filter-class>TimerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>timerFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- JSP学习笔记--Servlet过滤器
- JAVA WEB学习笔记-Servlet过滤器
- servlet过滤器学习笔记
- JSP学习笔记(第2次):Servlet过滤器
- JSP学习笔记--Servlet
- JAVA WEB学习笔记(四)-Servlet过滤器
- jsp 学习笔记-servlet相关概念
- JSP/Servlet学习笔记
- Jsp+servlet学习笔记
- jsp&servlet学习笔记
- JSP Servlet学习笔记
- JSP/Servlet学习笔记
- Jsp&servlet学习笔记
- JSP&Servlet学习笔记
- jsp&servlet学习笔记
- jsp+servlet学习笔记
- JSP&Servlet学习笔记
- Servlet+JSP学习笔记
- 怎样获取服务器信息
- 不要当自己的奴隶
- smbclient 常用命令使用
- 做了个C#的Hotkey简单封装,希望对大家有帮助
- 博客今天开通!!
- JSP学习笔记--Servlet过滤器
- QQ自由幻想囧表情引领新时尚!
- HOW TO MAKE A TROJAN LOOK LIKE A JPG
- 在桌面程序中添加GPS功能
- 某大款致二奶的《出师表》
- 动态图形和表格的生成
- WinXP远程连接
- C#代码与javaScript函数的相互调用
- linux终端简介