Filter/Listener简介

来源:互联网 发布:linux 重新挂载根目录 编辑:程序博客网 时间:2024/06/15 12:31


          

创建Filter类:

LogFilter.java

package com.song.web;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;public class LogFilter implements Filter{private FilterConfig config;//用于访问Filter的配置信息//销毁方法@Overridepublic void destroy() {this.config = null;}//过滤的核心方法@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {//用于对用户请求进行预处理ServletContext context = this.config.getServletContext();//获取ServletContext对象,用于记录日志long before = System.currentTimeMillis();System.out.println("Start Filter---");HttpServletRequest hrequest = (HttpServletRequest)arg0;//转换为HttpServletRequest请求System.out.println("Filter已经截获到用户请求的地址:" + hrequest.getServletPath());//输出提示信息arg2.doFilter(arg0, arg1);//Filter只是链式处理,请求依然放行到目的地址//用于对服务器响应执行后处理long after = System.currentTimeMillis();System.out.println("过滤结束");System.out.println("请求被定位到:"+hrequest.getRequestURI()+" 所花的时间为: " + (after - before));}//初始化方法@Overridepublic void init(FilterConfig arg0) throws ServletException {this.config = arg0;}}



配置Filter:







AuthorityFilter.java

package com.song.web;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.http.HttpServletRequest;import javax.servlet.http.HttpSession;public class AuthorityFilter implements Filter{private FilterConfig config;@Overridepublic void destroy() {this.config = null;}@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {//获取Filter的配置参数String encoding = config.getInitParameter("encoding");String loginPage = config.getInitParameter("loginPage");String proLogin = config.getInitParameter("proLogin");//设置request编码用的字符集arg0.setCharacterEncoding(encoding);HttpServletRequest requ = (HttpServletRequest)arg0;HttpSession session = requ.getSession(true);//获取客户请求的页面String requestPath = requ.getServletPath();if(session.getAttribute("user") == null && !requestPath.endsWith(loginPage) && !requestPath.endsWith(proLogin)){//forward到登录界面arg0.setAttribute("tip", "您还没有登录");arg0.getRequestDispatcher(loginPage).forward(arg0, arg1);}else{//放行请求arg2.doFilter(arg0, arg1);}}@Overridepublic void init(FilterConfig arg0) throws ServletException {this.config = arg0;}}

login2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登录页面</title></head><body><h2>登录页面</h2><%if(request.getAttribute("tip") != null){out.println("<font color='red'>" + request.getAttribute("tip")+ "</font>");}%><form method="post" action="proLogin2.jsp">用户名:<input type="text" name="name"/><br/><input type="submit" value="登录"/></form></body></html>

proLogin2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>登录页面</title></head><body><h2>登录页面</h2><%session.setAttribute("user", request.getParameter("name"));%>登录成功,可以访问该应用的其他页面.</body></html>


web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app 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_3_0.xsd"version="3.0" metadata-complete="true"><!-- Servlet 2.5之前,Java web应用的绝大部分组件都通过web.xml文件来配置管理,Servlet3.0规范可通过注解来配置管理 --><!-- metadata-complete中属性值为true时,该web应用将不会加载annotation配置的web组件 --><!-- 为该web应用配置参数 --><context-param><param-name>driver</param-name><param-value>com.mysql.jdbc.Driver</param-value></context-param><!-- 为jsp(本质是servlet)页面配置参数 --><servlet><servlet-name>config</servlet-name><jsp-file>/configTest2.jsp</jsp-file><init-param><param-name>name</param-name><param-value>youku</param-value></init-param><init-param><param-name>age</param-name><param-value>40</param-value></init-param></servlet><!-- 为Servlet类配置 --><servlet><servlet-name>login</servlet-name><servlet-class>com.song.web.LoginServlet</servlet-class></servlet><servlet><servlet-name>firstServlet</servlet-name><servlet-class>com.song.web.FirstServlet</servlet-class></servlet><!-- 定义filter --><filter>    <!-- filter的名字 --><filter-name>log</filter-name><!-- filter的实现类 --><filter-class>com.song.web.LogFilter</filter-class></filter><filter>    <!-- filter的名字 --><filter-name>authority</filter-name><!-- filter的实现类 --><filter-class>com.song.web.AuthorityFilter</filter-class>    <!-- 为该filter配置参数 --><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>    <!-- 为该filter配置参数 --><init-param><param-name>loginPage</param-name><param-value>/login2.jsp</param-value></init-param>    <!-- 为该filter配置参数 --><init-param><param-name>proLogin</param-name><param-value>/proLogin2.jsp</param-value></init-param></filter>    <!-- 为servlet定义URL -->    <servlet-mapping>    <servlet-name>config</servlet-name>    <url-pattern>/config</url-pattern>    </servlet-mapping><servlet-mapping><servlet-name>login</servlet-name><url-pattern>/login</url-pattern></servlet-mapping><servlet-mapping><servlet-name>firstServlet</servlet-name><url-pattern>/firstServlet</url-pattern></servlet-mapping>    <!-- 定义filter拦截的URL --><filter-mapping><filter-name>authority</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter-mapping><filter-name>log</filter-name><url-pattern>/*</url-pattern></filter-mapping>    <!-- 配置web应用的首页列表 --><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.xhtml</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

实现listener类:




配置listener:



0 0