动手学servlet(六) 过滤器和监听器
过滤器(Filter)
过滤器是在客户端和请求资源之间,起一个过滤的作用,举个例子,比如我们要请求admin文件夹下的index.jsp这个页面,那么我们可以用一个过滤器,判断登录用户是不是管理员
-请求资源可以是servlet,jsp页面,html页面等
-在请求资源的前后执行
-请求和响应可以通过filter修改
过滤器常用在这几个方面:Session管理,权限验证,日志记录,字符编码转换
- package servletdemo;
- 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 {
- @Override
- public void destroy() {
- // TODO 自动生成的方法存根
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- System.out.println("filter...");
- chain.doFilter(request, response);
- // TODO 自动生成的方法存根
- }
- @Override
- public void init(FilterConfig arg0) throws ServletException {
- // TODO 自动生成的方法存根
- }
- }
创建一个Filter
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
- <display-name>javaeedemo2</display-name>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- <welcome-file>default.html</welcome-file>
- <welcome-file>default.htm</welcome-file>
- <welcome-file>default.jsp</welcome-file>
- </welcome-file-list>
- <filter>
- <filter-name>MyFilter</filter-name>
- <filter-class>servletdemo.MyFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>MyFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
配置文件
注意:这里ulr-parten是起一个过滤的作用,如果是/*,那么所有的资源请求都要经过这个过滤器,再假如要对admin文件夹下的文件过滤,就可以写成/admin/*
我们新建一个index.jsp页面进行访问,每次刷新页面,过滤器都会起作用
再看一个例子,使用Filter进行登录权限验证(访问admin下面的内容需要登录)
- package servletdemo;
- 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.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import sun.misc.Regexp;
- public class MyFilter implements Filter {
- @Override
- public void destroy() {
- // TODO 自动生成的方法存根
- }
- @Override
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest req=(HttpServletRequest)request;
- HttpServletResponse res=(HttpServletResponse)response;
- HttpSession session=req.getSession();
- if(session.getAttribute("userlogin")==null)
- {
- System.out.println("please login...");
- }
- else {
- req.getRequestDispatcher("../login.html").forward(request, response);
- }
- chain.doFilter(request, response);
- // TODO 自动生成的方法存根
- }
- @Override
- public void init(FilterConfig arg0) throws ServletException {
- // TODO 自动生成的方法存根
- }
- }
代码
监听器(Listener)
监听器用于监听JAVA WEB程序中的事件,例如创建,修改,删除Session,request,context等,并触发相应的事件
下面我们就针对刚才提到的三个共享变量来学习监听器
1、ServletContextListener
- package servletdemo;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- public class MyListener implements ServletContextListener {
- @Override
- public void contextDestroyed(ServletContextEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("contextDestroyed......");
- }
- @Override
- public void contextInitialized(ServletContextEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("contextInitialized......");
- }
- }
代码
运行WEB工程,无论是哪个页面首先启动,该监听器都会执行,所以一切全局的操作就可以写在这里
2、ServletContextAttributeListener
- package servletdemo;
- import javax.servlet.ServletContextAttributeEvent;
- import javax.servlet.ServletContextAttributeListener;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- public class MyListener implements ServletContextAttributeListener {
- @Override
- public void attributeAdded(ServletContextAttributeEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("attributeAdded......");
- }
- @Override
- public void attributeRemoved(ServletContextAttributeEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("attributeRemoved......");
- }
- @Override
- public void attributeReplaced(ServletContextAttributeEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("attributeReplaced......");
- }
- }
创建监听器
- package servletdemo;
- import java.io.IOException;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- * Servlet implementation class TestListenerServlet
- */
- @WebServlet("/TestListenerServlet")
- public class TestListenerServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- /**
- * @see HttpServlet#HttpServlet()
- */
- public TestListenerServlet() {
- super();
- // TODO Auto-generated constructor stub
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- ServletContext ctx=this.getServletContext();
- ctx.setAttribute("ctx_name", "ctx_value");
- //替换
- ctx.setAttribute("ctx_name", "ctx_value2");
- //删除
- ctx.removeAttribute("ctx_name");
- }
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- doGet(request, response);
- }
- }
创建Servlet
运行servlet,该监听器的事件会执行,效果如下
3、HttpSessionListener
- package servletdemo;
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
- public class MyListener implements HttpSessionListener {
- @Override
- public void sessionCreated(HttpSessionEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("sessionCreated......");
- }
- @Override
- public void sessionDestroyed(HttpSessionEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("sessionDestroyed......");
- }
- }
创建监听器
- package servletdemo;
- import java.io.IOException;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- /**
- * Servlet implementation class TestListenerServlet
- */
- @WebServlet("/TestListenerServlet")
- public class TestListenerServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- /**
- * @see HttpServlet#HttpServlet()
- */
- public TestListenerServlet() {
- super();
- // TODO Auto-generated constructor stub
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- HttpSession session=request.getSession();
- session.setAttribute("session_name", "session_value");
- //销毁
- session.invalidate();
- }
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- doGet(request, response);
- }
- }
创建servlet
运行servlet,该监听器的事件会执行,效果如下
4、HttpSessionAttributeListener
- package servletdemo;
- import javax.servlet.http.HttpSessionAttributeListener;
- import javax.servlet.http.HttpSessionBindingEvent;
- public class MyListener implements HttpSessionAttributeListener {
- @Override
- public void attributeAdded(HttpSessionBindingEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("attributeAdded......");
- }
- @Override
- public void attributeRemoved(HttpSessionBindingEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("attributeRemoved......");
- }
- @Override
- public void attributeReplaced(HttpSessionBindingEvent arg0) {
- // TODO 自动生成的方法存根
- System.out.println("attributeReplaced......");
- }
- }
创建监听器
- package servletdemo;
- import java.io.IOException;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- /**
- * Servlet implementation class TestListenerServlet
- */
- @WebServlet("/TestListenerServlet")
- public class TestListenerServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- /**
- * @see HttpServlet#HttpServlet()
- */
- public TestListenerServlet() {
- super();
- // TODO Auto-generated constructor stub
- }
- /**
- * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- HttpSession session=request.getSession();
- session.setAttribute("session_name", "session_value");
- //替换
- session.setAttribute("session_name", "session_value2");
- //删除
- session.invalidate();
- }
- /**
- * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
- */
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- doGet(request, response);
- }
- }
创建servlet
运行servlet,该监听器的事件会执行,效果如下
还有一个HttpRequestListener和HttpRequestAttributeListener,一运行servlet就会创建一个request,所以对应的监听器的add事件就会执行
还有监听器的配置文件代码:
<listener>
<listener-class>servletdemo.MyListener</listener-class>
</listener>
动手学servlet(六) 过滤器和监听器的更多相关文章
- 面试之servlet、过滤器、监听器
servlet.过滤器.监听器servlet是Java中WEB请求和响应的容器servlet的运行需要在类似tomcat容器中,一个 Web 应用对应一个 Context 容器,也就是 Servlet ...
- Servlet,过滤器和监听器的配置和使用
一.什么是Servlet Servlet使用Java语言实现的程序,运行于支持Java语言的Web服务器或者应用服务器中.Servlet先于JSP出现,提供和客户端动态交互的功能.Servlet可以处 ...
- servlet,过滤器,监听器,拦截器的区别
一.目录 1.概念 2.生命周期 3.职责 4.执行过程 二.内容 概念 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性, 可以动态生成web页面它 ...
- SpringBoot09 自定义servlet、注册自定义的servlet、过滤器、监听器、拦截器、切面、webmvcconfigureradapter过时问题
1 servlet简介 servlet是一种用于开发动态web资源的技术 参考博客:servlet基础知识 httpservlet详解 2 在springboot应用中添加servlet sp ...
- SpringBoot自定义servlet、注册自定义的servlet、过滤器、监听器、拦截器、切面、webmvcconfigureradapter过时问题
[转]https://www.cnblogs.com/NeverCtrl-C/p/8191920.html 1 servlet简介 servlet是一种用于开发动态web资源的技术 参考博客:serv ...
- servlet、过滤器、监听器、拦截器之间的关系和区别
一.概念 1.什么是servlet servlet是一个接口.定义了一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destr ...
- 动手学servlet(五) 共享变量
1. 无论对象的作用域如何,设置和读取共享变量的方法是一致的 -setAttribute("varName",obj); -getAttribute("varName&q ...
- 动手学servlet(四) cookie和session
Cookie cookie是保存在客户端的一个“键值对”,用来存储用户的一些信息 cookie的应用: -在电子商务会话中标识用户 -对网站进行定制,比如你经常浏览哪些内容,就展示哪些页面给你 - ...
- 动手学servlet(三) 请求头和响应头信息
获取请求头信息 package servletdemo; import java.io.IOException; import java.util.Enumeration; import javax. ...
随机推荐
- Nothing about semantics
Motivation fork a project in github, seriously. Candidates PasaLab / cichlid 80% Distributed RDFS &a ...
- HDFS的运行原理
简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统.是根据google发表的论文翻版的.论文为GFS(Google File System)Go ...
- WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION 图片上传
CKEDITOR 编辑器 图片上传 WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION (CKEditorFuncNum,图片路径,返回信息); CKEditor ...
- Linux下搭建FTP服务器
实习的公司有一台老服务器转作为FTP服务器,老大把这个任务交给了我.这两天边学边卖的捣腾起来,总算搞成.现在记录下来,加深映像,也以便以后查看复习. 服务器安装的是:Red Hat Enterpris ...
- PS中的图像知识
图像处理对于前端工作来说是一个不能回避的问题,ps技术也是我们必备的技能.用法可以在使用中不断的熟练,但针对前端技术本身的一些知识点,需要我们平时不断的积累才能够在使用中不出现问题. 如今的办公,已经 ...
- 《C与指针》第十二章练习
本章例程 //12.3 #include <stdio.h> #include <stdlib.h> typedef struct NODE{ struct NODE *lin ...
- [WARNING]考前必读?!
考试策略很重要. 1) 认真读懂每道题,把题意搞明白,把样例算出来,把题目要求的细节标出. 2) 推出每道题的模型,确定每道题的策略,是部分分还是要全部 ...
- SQL Server 中存储过程的练习
建库建表建约束 插入数据 --建库建表建约束和插入测试数据 use bankDB go --1.完成存款,取款业务--存款 create proc usp_takeMoney ),),)=null,@ ...
- 用C#,SQL Server编写的音乐播放软件
主界面代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...
- Android Saving Data(一)
Saving Key-value Sets 保存键值对 SharedPreferences只能用来保存一些简单的数据,并且这些数据可以是共享的,也可以是私有的. SharedPreferences没 ...