spring boot第三节 Filter和Listener
来源:互联网 发布:空间网络音乐链接 编辑:程序博客网 时间:2024/05/29 13:16
本节接着上一节中的注解方法添加Filter和Listener
一、Filter过滤器
package org.springboot.sample.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.annotation.WebFilter;/** * 使用注解标注过滤器 * @WebFilter将一个实现了javax.servlet.Filter接口的类定义为过滤器 * 属性filterName声明过滤器的名称,可选 * 属性urlPatterns指定要过滤 的URL模式,也可使用属性value来声明.(指定要过滤的URL模式是必选属性) */@WebFilter(filterName="myFilter",urlPatterns="/*")public class MyFilter implements Filter { @Override public void destroy() { System.out.println("过滤器销毁"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("执行过滤操作"); chain.doFilter(request, response); } @Override public void init(FilterConfig config) throws ServletException { System.out.println("过滤器初始化"); }}
二、 ServletContextListener监听
package org.springboot.sample.listener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import javax.servlet.annotation.WebListener;/** * 使用@WebListener注解,实现ServletContextListener接口 * */@WebListenerpublic class MyServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContex初始化"); System.out.println(sce.getServletContext().getServerInfo()); } @Override public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContex销毁"); }}
三、HttpSessionListener监听
package org.springboot.sample.listener;import javax.servlet.annotation.WebListener;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;/** * 监听Session的创建与销毁 * */@WebListenerpublic class MyHttpSessionListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent se) { System.out.println("Session 被创建"); } @Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println("Session 被销毁"); }}然后启动就会看到
访问随便一个地址如前几节定义的http://localhost:8080
接着清除缓存
如果你访问前面定义的http://localhost:8080/xs/myservlet是不会出现
session被创建这句话的 ,原因是这个servlet并没有返回JSP而是一个流类似静态的html,具体原因参考下面
一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet )调用HttpServletRequest.getSession(true)这样的语句时才会被创建。
*************************************************************************************
我一开始还不信,做个试验我信了。
一开始不信是因为,用 FireFox 测试清空了Cookie ,只要一跑一个jsp ,马上会看到生成了一个名字是 JSESSIONID 的Cookie ,注意这个是 Session Cookie (会话Cookie),不是 Persistent Cookie (持久Cookie),这个《Cookie和Session专题 》一文中讲的很明白,会话 Cookie 是为实现 session 机制而采用的在 Client 端与 Server 端之间保持状态的解决方案之一,在默认情况下是保存在 Client 端内存中的。注意:会话 Cookie 的“会话”这里不是指 Server 端的 Session ,而是指的是浏览器,所以会话 Cookie 的生命周期不是与 Server 端的 Session 那个会话相同,而是与浏览器相同,就是说只要开着浏览器会话 Cookie 就存在,关闭浏览器它就过期了。但是会话 Cookie 的值是与 Server 端的 SessionId 对应相同的。就是说会话Cookie随着Server端Session的创建而创建,但并不随着Session的过期而过期,而是随着Client端的浏览器关闭而销毁。 这说明只要会话Cookie 出现了,Server 端的 Session 就已经创建了。
我一开始的错误想法是:我的 jsp 里没有 HttpServletRequest.getSession(true) 的代码阿,但是 JSESSIONID 的Cookie 出现了就说明 Server 端 Session 创建了,这与《Cookie和Session专题 》上面讲的不符啊,不过马上想通了,jsp 属于动态页,本质就是一个 Servlet ,编译后的 jsp 是要到 Server 端进行交互的(即便 jsp 里没写一句交互的代码),因为 jsp 里有内置对象,内置对象就是和 Server 交互的产物,所以如果你的首页是个 jsp 页的话,即便没有HttpServletRequest.getSession(true),Session 也会创建。
如果首页是*.html 就不同了,再将 FireFox 的 Cookie 都清除了,将首页设置为 index.html, 回车,查看,果然这次没有JSESSIONID 的 Cookie 生成,这说明Server的Session也没有创建,让 index.html 提交到一个Servlet, 确实可以证明没有 HttpServletRequest.getSession(true) ,Sesion是不会创建的, 即便Servlet又转发(或者重定向)到第二个页,只要第二个页依然不是jsp页,Session就依然不会创建,FireFox 当然也没有名字为 JSESSIONID 的 Cookie 生成。
- spring boot第三节 Filter和Listener
- spring boot-servlet、filter、listener
- Spring boot 配置Servelt、Filter、Listener
- spring boot(18)-servlet、filter、listener
- spring boot(18)-servlet、filter、listener
- spring boot (二) servlet listener filter interceptor
- Spring Boot 第三节 自定义 servlet
- Filter(第三节)
- 18.玩转Spring Boot 注册Servlet、Filter、Listener
- spring-boot如何定义一个servlet,filter,listener
- spring boot学习8之Servlet/Filter/Listener配置
- Spring Boot参考教程(六)Spring Boot配置Servlet,Filter,Listener,Interceptor
- Listener 、Filter 和 Interceptor
- filter和listener
- Servlet、Filter和Listener
- Filter和Listener
- Servlet、Filter和Listener
- Servlet、Filter和Listener
- R语言从基础入门到提高(一)Intro to basics(基础介绍)
- Android布局_View属性
- 某个故事
- 关于敏捷开发扫盲篇
- PHP项目发现并处理的问题
- spring boot第三节 Filter和Listener
- # A31S第一屏显示格式,启动声音修改
- 关于线性回归和逻辑回归一些深入的思考
- Activity和fragment/service通信
- 带一个圆环的尼姆博弈
- spark做视频推荐
- 我做CTO的这一年
- FFmpeg中的滤镜(十四):视频滤镜 -- ciescope
- Android获取屏幕高度、状态栏高度、标题栏高度