Servlet过滤器
- 顾名思义,过滤过滤,就是可以把一些我们不需要的东西过滤出去。Java代码也是这样。
- 什么是过滤器
过滤器实质上是一个具有特定功能的Servlet。它具有拦截客户端请求的功能,并且根据需要能够改变请求中的内容,来满足实际开发的需要。过滤器可以有多个并可以按照顺序一一执行 - 过滤器的核心对象
(1)Filter接口:每一个过滤器对象都要直接或间接实现Filter接口,在Filter中定义了三个方法分别是init()、doFilter()、destroy()方法
- init()
- doFilter()
- destroy()
(2)FilterConfig接口:该接口是由Servlet实现,主要用于获取过滤器中的配置信息。有如下方法 - getFilterName():用于获取过滤器名字
- getServletContext():用于获取上下文
- getInitParameter(String name):获取过滤器的特定(name)的初始化参数
- getInitParameterNames():获取过滤器的所有初始化参数
(3)FilterChain接口:该方法只有一个方法doFilter()就是将请求自动传给下一个过滤器或客户端,如果到最后一个过滤器时会直接将资源传递到客户端
- 过滤器的创建与配置
(1)过滤器的创建
创建一个Filter对象要实现javax.servlet.Filter接口,同时实现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;
import javax.servlet.annotation.WebFilter;
/**
* Servlet Filter implementation class file
*/
@WebFilter("/file")
public class file implements Filter {
/**
* Default constructor.
*/
public file() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
// TODO Auto-generated method stub
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
// place your code here
// pass the request along the filter chain
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}
(2)配置过滤器的web.xml。(下面两个选一个配置即可)例如
//1.在web.xml中配置
<!--过滤器声明-->
<filter>
<filter-name>MyFilter</filter-name> <!--过滤器的名称-->
<filter-calss>com.MyFilter</filter-calss> <!--过滤器的完整类名-->
<init-param>
<param-name>count</param-name> <!--过滤器的初始化参数名-->
<param-value>500</param-value> <!--过滤器的初始化参数值-->
</init-param>
</filter>
<filter-mapping> <!--过滤器的映射-->
<filter-name>MyFilter</filter-name> <!--过滤器的名称-->
<url-pattern>/MyFilter</pattern> <!--过滤器的URL映射-->
</filter-mapping>
//2.在类前配置@WebFilter("/映射地址")
@WebFilter("/file")
public class file implements Filter {
...
- 字符编码过滤器(实例)
@WebFilter("/file")
public class file implements Filter {
String encoding=null;
/**
* Default constructor.
*/
public file() {
// TODO Auto-generated constructor stub
}
/**
* @see Filter#destroy()
*/
public void destroy() {
encoding=null;
}
/**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if(encoding!=null) {
request.setCharacterEncoding(encoding);
response.setContentType("text.html;charset="+encoding);
}
chain.doFilter(request, response);
}
/**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
encoding =filterConfig.getInitParameter("encoding");
}
}
Servlet监听器
- 监听器简介
- 监听器的作用就是监听Web容器的有效事件,由容器管理。利用Listener接口监听在容器的某个执行程序,并根据其应用程序的需求做出适当响应
- Servlet监听器工作原理
- Servlet监听器是当今Web应用开发的一个重要组成部分。它比较接近Java的GUI程序的监听器,可以监听由于Web应用中状态改变而引起的Servlet容器产生的响应事件,然后接受并处理这些事件
监听器的种类
监听器的种类分为8个小类,这8个小类又可以分为三个大类,即
一、监听Servlet上下文
- ServletContextListener接口
- 主要监听ServletContext的创建和删除,它提供了下面的两个方法,也称做"Web应用程序的生命周期方法"
(1)contexInitialized(ServlrtContextEvent event)方法:
(2)contextDestroyed(ServlrtContextEvent event)方法:
- ServletAttributeListener接口
- 主要监听ServletContext中属性的增加、删除以及修改,它提供了下面3个方法
(1)attributeAdded(ServlrtContextAttributeEvent event)方法:
(2)attributeReplaced(ServlrtContextAttributeEvent event)方法:
(3)attributeRemoved(ServlrtContextAttributeEvent event)方法:
二、 监听HTTP会话
- HttpSessionListener接口
- 该接口用于监听HTTP会话的创建及销毁,它提供了下面的2个方法
(1)sessionCreated(HttpSessionEvent event)方法:
(2)sessionDestroyed(HttpSessionEvent event)方法:
- HttpSessionActivationListener接口
- HttpSessionAttributeListener接口
- HttpBindingListener接口
三、监听Servlet请求 - ServletRequestListener接口
- 用于监听请求的创建和载出
- ServletRequestAttributeListener接口
- 用于监听请求范围中属性的变化
监听器实例
//你以为会有实例,其实没有!