一、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>??
其中红色的为配置过滤器的代码。
1 楼
mixer_a
2012-05-24
关注一下,最近也在学习这个
2 楼
bestchenwu
2012-05-24
兄弟,这些文章自己写写看看就好了,没必要老是要人工置顶到首页吧?
3 楼
290845534
2012-05-24
bestchenwu 写道
兄弟,这些文章自己写写看看就好了,没必要老是要人工置顶到首页吧?
+ 1
4 楼
liveonnoevil
2012-05-24
太少了讲的。。。
5 楼
longfor5
2012-05-24
username.length()==0||password.length()==0 这样判断字符串有些不合适吧。如果字符串是null。。。
6 楼
xianwu13
2012-05-25
讲的很没有水平,鉴定垃圾,抄袭,没有重点