一。web监听器:监听特殊事件的发生
1.监听实现步骤
  a。写一个java类,实现特定的接口,重写相关方法
  b。在web.xml中,牌配置
    <listener>
      <listener-class>com.listener.MyContextLisenter</listener-class>
    </listener>
  c.注解方式:在java类上写一个@WebLisenter
2.可以在web.xml中可以配置servetContext初始化的参数
  <context-param>
    <param-name>basePath</param-name>
    <param-value>http://localhost:8888/StudentManager/</param-value>
  </context-param>
  在程序中获取方式:sce.getServletContext().getInitParameter("basePath");

3.三种监听:请求监听(ServletRequestListener),会话监听(HttpSessionListener),上下文监听(ServletContextListener)

二。过滤器
1、特点:在服务器中第一个被执行,可以拦截任意指定的路径请求
2.用于项目中的非法访问,字符集设置等等
3.实现步骤:
  a.写一个java程序,实现Filter接口,重写方法
  b.在web.xml中配置
  <filter>
    <filter-name>charfilter</filter-name>
    <filter-class>com.filter.CharSetFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>charfilter</filter-name>
    <!-- 拦截根目录下的所有请求 -->
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  c.dofilter方法里面的最后一句,应该将请求继续放行china.doFilter(req,resp);

  web.xml配置文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  3. <display-name>javaweb06</display-name>
  4. <!-- <listener> -->
  5. <!-- <listener-class>com.listener.MyRequestListener</listener-class> -->
  6. <!-- </listener> -->
  7. <context-param>
  8. <param-name>basePath</param-name>
  9. <param-value>http://localhost:8888/StudentManager/</param-value>
  10. </context-param>
  11. <filter>
  12. <filter-name>charset</filter-name>
  13. <filter-class>com.filter.CharSetFilter</filter-class>
  14. </filter>
  15. <filter-mapping>
  16. <filter-name>charset</filter-name>
  17. <url-pattern>/*</url-pattern>
  18. </filter-mapping>
  19.  
  20. <servlet>
  21. <servlet-name>loginservlet</servlet-name>
  22. <servlet-class>com.control.LoginServlet</servlet-class>
  23. </servlet>
  24. <servlet-mapping>
  25. <servlet-name>loginservlet</servlet-name>
  26. <url-pattern>/login</url-pattern>
  27. </servlet-mapping>
  28. <servlet>
  29. <servlet-name>loginservlet2</servlet-name>
  30. <servlet-class>com.control.LoginServlet2</servlet-class>
  31. </servlet>
  32. <servlet-mapping>
  33. <servlet-name>loginservlet2</servlet-name>
  34. <url-pattern>/login2</url-pattern>
  35. </servlet-mapping>
  36.  
  37. <welcome-file-list>
  38. <welcome-file>index.html</welcome-file>
  39. <welcome-file>index.htm</welcome-file>
  40. <welcome-file>index.jsp</welcome-file>
  41. <welcome-file>default.html</welcome-file>
  42. <welcome-file>default.htm</welcome-file>
  43. <welcome-file>default.jsp</welcome-file>
  44. </welcome-file-list>
  45. </web-app>

实例1:

  1. package com.listener;
  2.  
  3. import javax.servlet.ServletRequestEvent;
  4. import javax.servlet.ServletRequestListener;
  5.  
  6. public class MyRequestListener implements ServletRequestListener{
  7. @Override
  8. public void requestInitialized(ServletRequestEvent sre) {
  9. sre.getServletContext();
  10. sre.getServletRequest();
  11. System.out.println("请求开始");
  12. }
  13.  
  14. @Override
  15. public void requestDestroyed(ServletRequestEvent sre) {
  16. System.out.println("请求结束");
  17. }
  18. }

实例2:

  1. package com.listener;
  2.  
  3. import javax.servlet.ServletContext;
  4. import javax.servlet.annotation.WebListener;
  5. import javax.servlet.http.HttpSessionEvent;
  6. import javax.servlet.http.HttpSessionListener;
  7. @WebListener
  8. public class MySessionListener implements HttpSessionListener{
  9.  
  10. @Override
  11. public void sessionCreated(HttpSessionEvent se) {
  12. String path = se.getSession().getServletContext().getInitParameter("basePath");
  13. System.out.println("初始化参数为:"+path);
  14. ServletContext app = se.getSession().getServletContext();
  15. Integer online = (Integer)app.getAttribute("online");
  16. if(online==null){
  17. online = 0;
  18. }
  19. System.out.println("当前在线人数是:"+ ++online);
  20. app.setAttribute("online", online);
  21. }
  22.  
  23. @Override
  24. public void sessionDestroyed(HttpSessionEvent se) {
  25. ServletContext app = se.getSession().getServletContext();
  26. Integer online = (Integer)app.getAttribute("online");
  27. System.out.println("当前在线人数为:"+ --online);
  28. app.setAttribute("online", online);
  29. }
  30. }

实例3:

  1. package com.filter;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.ServletRequest;
  9. import javax.servlet.ServletResponse;
  10. import javax.servlet.annotation.WebFilter;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13.  
  14. @WebFilter("/student/*")
  15. public class IsLoginFilter implements Filter{
  16.  
  17. @Override
  18. public void doFilter(ServletRequest req, ServletResponse resp, FilterChain arg2)
  19. throws IOException, ServletException {
  20. //1.从session中获取用户信息
  21. HttpServletRequest request = (HttpServletRequest) req;
  22. HttpServletResponse response = (HttpServletResponse) resp;
  23. String username = (String) request.getSession().getAttribute("username");
  24.  
  25. System.out.println(request.getRequestURI());
  26. if(request.getRequestURI().endsWith("/login.jsp")||request.getRequestURI().endsWith("/login3")){
  27. arg2.doFilter(req, resp);
  28. return;
  29. }
  30.  
  31. if(username==null){//非法登录
  32. response.sendRedirect("login.jsp");
  33. }else{
  34. arg2.doFilter(req, resp);
  35. }
  36. }
  37.  
  38. }

实例4:

  1. package com.filter;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.ServletRequest;
  9. import javax.servlet.ServletResponse;
  10. import javax.servlet.annotation.WebFilter;
  11.  
  12. /**
  13. * 将所有请求的字符集统一修改
  14. * @author allen
  15. */
  16. @WebFilter("/*")
  17. public class CharSetFilter implements Filter{
  18. @Override
  19. public void doFilter(ServletRequest req, ServletResponse resp, FilterChain arg2)
  20. throws IOException, ServletException {
  21. System.out.println("请求字符集修改为utf-8");
  22. req.setCharacterEncoding("utf-8");
  23. arg2.doFilter(req,resp);//将请求继续往下放行
  24. }
  25. }

8-过滤器Filter和监听器Listener的更多相关文章

  1. 过滤器Filter与监听器Listener

    过滤器Filter 过滤器也是一种servlet   它也可以对用户的请求进行处理  , 但是他所做的处理,只是一些轻量级的处理.Fileter就好像jsp页面与servlet之间的一道关卡,如果这个 ...

  2. 过滤器(filter),监听器(listener),与servlet的执行顺序

    创建: 加载顺序 监听器-->过滤器-->Servlet.项目启动后,容器会首先创建声明的各种监听器,为后继的各个事件监听做准备,然后创建过滤器,最后是Servlet.销毁的时候是反序进行 ...

  3. 二十五、过滤器Filter,监听器Listener,拦截器Interceptor的区别

    1.Servlet:运行在服务器上可以动态生成web页面.servlet的声明周期从被装入到web服务器内存,到服务器关闭结束.一般启动web服务器时会加载servelt的实例进行装入,然后初始化工作 ...

  4. Servlet过滤器Filter和监听器

    一.Servlet过滤器的概念: *********************************************************************************** ...

  5. JavaWeb学习篇之----Servlet过滤器Filter和监听器

    首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: ************************************************************** ...

  6. Java Web(五) 监听器Listener

    监听器概述 在上一篇里介绍了过滤器Filter,而Listener是Servlet的另一个高级特性.Listener用于监听Java Web程序中的事件,例如创建,修改,删除Session,reque ...

  7. 过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)

    一.Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servle ...

  8. Introduction of Servlet Filter(介绍javaweb组件之一过滤器filter)

    javaweb的三大组件都需要交给web服务器运行,都需要在web.xml文件中配置. ①Servlet:javax.servlet.Servlet通过http协议接受客户端的请求,并作出响应的Jav ...

  9. SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】

    配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter ...

随机推荐

  1. 从无到有-在create-react-app基础上接入react-router、redux-saga

    搭建项目框架 新建项目 执行如下代码,用create-react-app来建立项目的基础框架,然后安装需要用到的依赖. $ npx create-react-app my-test-project $ ...

  2. RabbitMQ消息队列(十二)-性能测试

    硬件配置 宿主机用的联想3850X6的服务器四颗E7-4850v3的处理器,DDR4内存,两块1.25TB的pcie固态.在宿主机上使用的事esxi5.5的虚拟化平台,在子系统中安装RabbitMQ和 ...

  3. 【c#】RabbitMQ学习文档(三)Publish/Subscribe(发布/订阅)

    (本教程是使用Net客户端,也就是针对微软技术平台的) 在前一个教程中,我们创建了一个工作队列.工作队列背后的假设是每个任务会被交付给一个[工人].在这一部分我们将做一些完全不同的事情--我们将向多个 ...

  4. 简单的SQL注入

    Topic Link http://ctf5.shiyanbar.com/423/web/ 1)测试输入1的时候正常显示 2) 单引号测试输入1'发现存在漏洞(判断为字符型注入) 3) 联合注入测试( ...

  5. 设计模式总结篇系列:单例模式(SingleTon)

    在Java设计模式中,单例模式相对来说算是比较简单的一种构建模式.适用的场景在于:对于定义的一个类,在整个应用程序执行期间只有唯一的一个实例对象.如Android中常见的Application对象. ...

  6. 超级账本fabric原理之gossip详解

    Goosip协议 去中心化.容错和最终一致性的算法 信息达到同步的最优时间:log(N). 功能: 节点发现 数据广播 gossip中有三种基本的操作: push - A节点将数据(key,value ...

  7. 杭电ACM2015--偶数求和

    偶数求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. Linux几个常用的目录结构

    记录几个个人觉得需要了解的目录结构含义: /lost+found: 这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件. /media: linux系统会自动识别一些设备,例如U盘.光驱 ...

  9. C# 消息队列-Microsoft Azure service bus 服务总线

    先决条件 Visual Studio 2015或更高版本.本教程中的示例使用Visual Studio 2015. Azure订阅. 注意 要完成本教程,您需要一个Azure帐户.您可以激活MSDN订 ...

  10. Java 8 的Lambda表达式

    第一次看到用lambda表达式写出来的Java代码时,我对这种神秘的语法感到非常不理解,认为这样的Java搞得不可读.没有专门的去学习和认识,今天花了几个小时写了示例的练习后,我开心的看到了更清晰的J ...