Servlet 学习:监听器、过滤器
Servlet 规范扩展-----------------监听器接口 1.介绍:
1)一组来自于 Servlet 规范下接口,共有 8 个接口。在 Tomcat 存在 servlet-api.jar 包
2)监听器接口需要由开发人员亲自实现,Http 服务器提供 jar 包并没有对应的实现类
3)监听器接口用于监控【作用域对象生命周期变化时刻】以及【作用域对象共享数据变化时刻】
2.作用域对象:
1)在 Servlet 规范中,认为在服务端内存中可以在某些条件下为两个 Servlet 之间提供数据共享方案的对象,被称为【作用域对象】
2)Servlet 规范下作用域对象:
ServletContext: 全局作用域对象 HttpSession : 会话作用域对象 HttpServletRequest:请求作用域对象
3.监听器接口实现类开发规范:三步
1)根据监听的实际情况,选择对应监听器接口进行实现
2)重写监听器接口声明【监听事件处理方法】
3)在 web.xml 文件将监听器接口实现类注册到 Http 服务器
4.ServletContextListener 接口:
1)作用:通过这个接口合法的检测全局作用域对象被初始化时刻以及被销毁时刻
2)监听事件处理方法:
public void contextInitlized() : 在全局作用域对象被 Http 服务器初始化被调用
public void contextDestory() : 在全局作用域对象被 Http 服务器销毁时候触发调用
OneListener.java 这个直接创建 java 类,而不是 servlet
package com.bjpoewrnode.listener;
import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;
public class OneListener implements ServletContextListener {
}
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
</web-app>5.ServletContextAttributeListener 接口:
1)作用:通过这个接口合法的检测全局作用域对象共享数据变化时刻
2)监听事件处理方法:
public void contextAdd():在全局作用域对象添加共享数据 public void contextReplaced():在全局作用域对象更新共享数据 public void contextRemove():在全局作用域对象删除共享数据
6.全局作用域对象共享数据变化时刻
ServletContext application = request.getServletContext();
application.setAttribute("key1",100); //新增共享数据
application.setAttribute("key1",200); //更新共享数据
application.removeAttribute("key1"); //删除共享数据
OneListener.java 这个直接创建 java 类,而不是 servlet
package com.bjpowernode.listener;
import javax.servlet.ServletContextAttributeEvent;import javax.servlet.ServletContextAttributeListener;
public class OneListener implements ServletContextAttributeListener {
}
OneServlet.java
package com.bjpowernode.controller;
import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;
public class OneServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
web.xml
1)来自于 Servlet 规范下接口,在 Tomcat 中存在于 servlet-api.jar 包 2)Filter 接口实现类由开发人员负责提供,Http 服务器不负责提供 3)Filter 接口在 Http 服务器调用资源文件之前,对 Http 服务器进行拦截
2.具体作用:
1)拦截 Http 服务器,帮助 Http 服务器检测当前请求合法性 2)拦截 Http 服务器,对当前请求进行增强操作
3.Filter 接口实现类开发步骤:三步
1)创建一个 Java 类实现 Filter 接口 2)重写 Filter 接口中 doFilter 方法 3)web.xml 将过滤器接口实现类注册到 Http 服务器
4.Filter 拦截地址格式
命令格式:<filter-mapping><filter-name>oneFilter</filter-name><url-pattern>拦截地址</url-pattern></filter-mapping>命令作用:通过拦截地址通知 Tomcat 在调用何种资源文件之前需要调用 OneFilter 过滤进行拦截要求 Tomcat 在调用某一个具体文件之前,来调用 OneFilter 拦截<url-pattern>/img/mm.jpg</url-pattern>
要求 Tomcat 在调用某一个文件夹下所有的资源文件之前,来调用 OneFilter 拦截<url-pattern>/img/*</url-pattern>
要求 Tomcat 在调用任意文件夹下某种类型文件之前,来调用 OneFilter 拦截<url-pattern>*.jpg</url-pattern>
要求 Tomcat 在调用网站中任意文件时,来调用 OneFilter 拦截<url-pattern>/*</url-pattern>
过滤器检测请求合法性 OneFilter.java
package com.bjpowernode.filter;
import javax.servlet.*;import java.io.IOException;import java.io.PrintWriter;
/**
http://localhost:8080/myWeb/mm.jpg?age=89*/public class OneFilter implements Filter {
@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}}
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0">
</web-app>过滤器对请求对象进行增强服务 index.html
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><center><form action="/19__war_exploded/one" method="post">参数:<input type="text" name="userName"/><br/><input type="submit" value="POST 方式访问 OneServlet"></form>
</center></body></html>OneServlet.java
package com.bjpowernode.controller;
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;
public class OneServlet extends HttpServlet {
}
TwoServlet.java
package com.bjpowernode.controller;
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;
public class TwoServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//直接从请求体读取请求参数 String userName = request.getParameter("userName");System.out.println("TwoServelt 从请求体得到参数 "+userName);}
}
OneFiter.java
package com.bjpowernode.filter;
import javax.servlet.*;import java.io.IOException;
public class OneFilter implements Filter {
}
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>OneServlet</servlet-name><servlet-class>com.bjpowernode.controller.OneServlet</servlet-class></servlet><servlet><servlet-name>TwoServlet</servlet-name><servlet-class>com.bjpowernode.controller.TwoServlet</servlet-class></servlet><servlet-mapping><servlet-name>OneServlet</servlet-name><url-pattern>/one</url-pattern></servlet-mapping><servlet-mapping><servlet-name>TwoServlet</servlet-name><url-pattern>/two</url-pattern></servlet-mapping>
</web-app>
评论