Filter Config 接口
为了获取filter程序,在web.xml文件中的配置信息,servlet api提供了filterConfig接口。该接口封装了filter程序在web.xml中的所有注册信息,并且提供了一系列获取这些配置信息的方法。
Listener监听器
在程序开发中,经常需要对某些事件进行监听,如监听鼠标单击事件、监听键盘按下事件等,此时就需要使用监听器,监听器在监听的过程中会涉及几个重要组成部分,具体如下。 (1)事件(Event):用户的一个操作,如单击一个按钮、调用一个方法、创建一个对象等。 (2)事件源:产生事件的对象。 (3)事件监听器(Listener ):负责监听发生在事件源上的事件。 (4)事件处理器:监听器的成员方法,当事件发生的时候会触发对应的处理器(成员方法)。 当用户进行一个操作触发事件源上的事件时,就会被事件监听器监听到。当监听器监听到事件发生时,相应的事件处理器就会对发生的事件进行处理。 事件监听器在进行工作时,可分为几个步骤,具体如下。 (1)将监听器绑定到事件源,也就是注册监听器。 (2)事件发生时会触发监听器的成员方法,即事件处理器,传递事件对象。 (3)事件处理器通过事件对象获得事件源,并对事件源进行处理。 在开发 Web 应用程序时,也经常会使用监听器,这个监听器也被称为 Servlet 事件监听器。Servlet 事件监听器就是一个实现了特定接口的 Java 程序,专门用于监听 Web 应用程序中ServletContext、HttpSession 和 ServletRequest 等域对象的创建和销毁过程,监听这些域对象属性的修改以及感知绑定到 HtpSession 域中某个对象的状态。
servlet八种监听器
上述监听器根据监听事件的不同可以将其分为 3 类,具体如下。 (1)用于监听域对象创建和销毁的事件监听器(ServetContextListener接口、HttpSessionListener 接口、ServletRequestListener 接口)。 (2)用于监听域对象属性增加和删除的事件监听器(SewvletContexAtthbuteListener 接口、HttpSessionAttributeListener 接口、ServletRequestAttributeListener 接口)。 (3)用于监听绑定到 HtpSession 域中某个对象状态的事件监听器(HtpSessionBinding Listener 接口、HttpSessionActivationListener 接口)。 在Servet 规范中,这 3 类事件监听器都定义了相应的接口,在编写事件监听器程序时只需实现对应的接口就可以。Web 服务器会根据监听器所实现的接口,把它注册到被监听的对象上,当触发了某个对象的监听事件时,Web容器将会调用Servet监听器与之相关的方法对事件进行处理。
Filter 什么是过滤器
Filter 过滤器它是JavaWeb的三大组件之一。三大组件分别是: Servlet 程序、Listener 监听器、Filter 过滤器 Filter 过滤器它是JavaEE的规范。也就是接口 Filter 过滤器它的作用是:拦截请求,过滤响应。
Filter过滤器的使用步骤
编写一个类去实现Filter接口 实现过滤方法doFilter() 到web.xml中去配置Filter的拦截路径
Filter的生命周期包含几个方法
构造器方法 init 初始化方法 第1,2步,在web工程启动的时候执行(Filter 已经创建) doFilter 过滤方法 第3步,每次拦截到请求,就会执行 destroy 销毁 第4步,停止web工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)
FilterConfig 类
FilterConfig类见名知义,它是Filter过滤器的配置文件类。 Tomcat每次创建Filter 的时候,也会同时创建一 个FilterConfig 类,这里包含了Filter 配置文件的配置信息。 FilterConfig类的作用是获取filter过滤器的配置内容 1、获取Filter的名称filter-name 的内容 2、获取在Filter中配置的init-param初始化参数 3、获取ServletContext对象 ##filter的作用 解决多个servlet共性代码冗余问题,乱码处理,权限验证等问题 过滤器的执行地位在servlet服务之前,客户端发送请求时,会先经过Filter,再到达目标Servlet,响应时会根据执行流程再次反向执行到Filter. 注意: 过滤器是用来拦截请求和响应的,不能产生响应,而servlet是用来处理请求并产生响应的。
代码及成果
package cn.itcast.chapter8.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.http.Cookie;
import javax.servlet.http.HttpServletRequest;
public class AutoLoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest)request;
Cookie[] cs = req.getCookies();
String autoLogin=null;
for(int i =0;cs!=null && i<cs.length;i++){
String cookieName = cs[i].getName();
if("autoLogin".equals(cookieName)){
autoLogin = cs[i].getValue();
}
}
if(autoLogin!=null){
String[] strs = autoLogin.split("-");
String username =strs[0];
String password =strs[1];
if("itcast".equals(username) && "123".equals(password)){
User u = new User();
u.setUsername(username);
u.setPassword(password);
req.getSession().setAttribute("user",u);
}
}
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
package cn.itcast.chapter8.filter;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
if("itcast".equals(username) && "123".equals(password)){
User u = new User();
u.setUsername(username);
u.setPassword(password);
request.getSession().setAttribute("user",u);
String autologin = request.getParameter("autologin");
if(autologin!=null){
Cookie c= new Cookie("autoLogin",username+"-"+password);
int time = Integer.parseInt(autologin);
c.setMaxAge(time);
c.setPath(request.getContextPath());
response.addCookie(c);
}
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{
request.setAttribute("errorMsg", "用户名或密码错误");
RequestDispatcher rd = request.getRequestDispatcher("/login.jsp");
rd.forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
package cn.itcast.chapter8.filter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LogoutServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getSession().removeAttribute("user");
Cookie c = new Cookie("autoLogin","");
c.setMaxAge(0);
c.setPath(request.getContextPath());
response.addCookie(c);
response.sendRedirect("/chap08/index.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
package cn.itcast.chapter8.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;
public class myFilter implements Filter {
public myFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
package cn.itcast.chapter8.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;
public class myFilter3 implements Filter {
private String classfive;
FilterConfig fConfig;
public myFilter3() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
response.setContentType("text/html;Charset=utf-8");
classfive=fConfig.getInitParameter("class");
response.getWriter().print("myfilter3:"+classfive+"<br/>");
}
public void init(FilterConfig fConfig) throws ServletException {
this.fConfig=fConfig;
}
}
package cn.itcast.chapter8.filter;
public class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String Username) {
this.username=username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password=password;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%response.addCookie(new Cookie("username","yuanxuehua"));%>
获取cookie对象:${cookie.username }<br/>
获取cookie对象名字:${cookie.username.name }<br/>
获取cookie对象值:${cookie.username.value }<br/>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="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>Insert title here</title>
</head>
<body>
<%session.invalidate(); %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.util.*"
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>显示登录的用户信息</title>
</head>
<body>
<br />
<center>
<h3>欢迎光临</h3>
</center>
<br />
<c:choose>
<c:when test="${sessionScope.user==null }">
<a href="http://localhost:9999/chap08/login.jsp">用户登录</a>
</c:when>
<c:otherwise>
袁袁欢迎您:${sessionScope.user.username} <a href="http://localhost:9999/chap08/LogoutServlet">退出</a>
</c:otherwise>
</c:choose>
<hr />
</body>
</html>
<%@ page language="java" contentType="textcml; charset=utf-8"
pageEncoding="utf-8" import="java.util.*"%>
<html>
<head></head>
<center><h3>用户登录</h3></center>
<body style="text-align: center;">
<form action="${pageContext.request.contextPath }/login"
method="post">
<table border="1" width="600px" cellpadding="0" cellspacing="0"
align="center" >
<tr>
<td height="30" align="center">用户名:</td>
<td>
<input type="text" name="username" />${errorMsg }</td>
</tr>
<tr>
<td height="30" align="center">密 码:</td>
<td>
<input type="password" name="password" /></td>
</tr>
<tr>
<td height="35" align="center">自动登录时间</td>
<td><input type="radio" name="autologin"
value="${60*60*24*31 }" />一个月
<input type="radio" name="autologin"
value="${60*60*24*31*3 }" />三个月
<input type="radio" name="autologin"
value="${60*60*24*31*6 }" />半年
<input type="radio" name="autologin"
value="${60*60*24*31*12 }" />一年
</td>
</tr>
<tr>
<td height="30" colspan="2" align="center">
<input type="submit" value="登录" />
<input type="reset" value="重置" />
</td>
</tr>
</table>
</form>
</body>
<html>
<%@ page language="java" contentType="textcml; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
测试监听对象的请求
<br/>
<a href="destroy.jsp">销毁session</a>
</body>
<cml>
<%@ page language="java" contentType="textcml; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="textcml;charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
测试域对象属性值的页面:<br/>
<%
application.setAttribute("username","itcast");
application.setAttribute("username","heima");
application.removeAttribute("username");
session.setAttribute("username","itcast");
session.setAttribute("username","heima");
session.removeAttribute("username");
request.setAttribute("username","itcast");
request.setAttribute("username","heima");
request.removeAttribute("username");
%>
</body>
<cml>
2020080605045 袁雪华 大数据2005
|