一、Servlet过滤器
过滤器是进行过滤预处理的装置。
Servlet过滤器是一种特殊的Servlet,可以对用户的请求信息和响应信息进行过滤,当访问Servlet过滤器对应的Servlet时,会先执行Servlet过滤器,对请求和响应的信息进行过滤。
Servlet过滤器类需要实现javax.servlet.Filter接口,同时需要继承HttpServlet类。接口中的方法如下:
init(FilterConfig):初始化方法,完成Servlet过滤器类的初始化。
doFilter(ServletRequest, ServletResponse,FilterChain):完成过滤操作。
destory():销毁过滤器。
二、Demo
过滤器LoginFilter类实现登录时的过滤,如果帐号或密码为空的话,则不防问Login.java。该例子接上一篇:JavaEE学习笔记之JSP+Servlet(一)
在上一个工程中,建一个LoginFilter类,实现过滤功能。源代码如下:
- package edu.cn.filters;
- 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;
- import javax.servlet.http.HttpServlet;
- public class LoginFilter extends HttpServlet implements Filter {
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain filterchain) throws IOException, ServletException {
- String username = request.getParameter("username");
- String password = request.getParameter("password");
- if(username.length()==0||password.length()==0){
- //设定response返回的编码
- response.setContentType("text/html;charset=gb2312");
- try{
- PrintWriter out = response.getWriter();
- out.print("用户名或口令为空,请");
- out.print("<a href='Login.jsp'>");
- out.print("重新登录");
- out.print("</a>!");
- out.flush();
- return;
- }catch(Exception e){
- }
- }
- try{
- filterchain.doFilter(request, response);
- }catch(Exception e){
- }
- }
- public void init(FilterConfig config) throws ServletException {
- }
- }
还需要在配置文件中配置过滤器,此时的配置文件内容为
- <?xml version="1.0" encoding="GB2312"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <servlet>
- <servlet-name>Login</servlet-name>
- <servlet-class>edu.cn.servlets.Login</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>Login</servlet-name>
- <url-pattern>/Login</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>Login.jsp</welcome-file>
- </welcome-file-list>
- <span style="color: #ff0000;"><filter>
- <filter-name>LoginFilter</filter-name>
- <filter-class>edu.cn.filters.LoginFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>LoginFilter</filter-name>
- <url-pattern>/Login</url-pattern>
- </filter-mapping>
- </span></web-app>
其中红色的为配置过滤器的代码。