携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第41天,点击查看活动详情
今天带大家来学习一下内置对象监听器的简单实用
1.创建控制器包controller并且创建HelloController类文件
package com.example.firstlistenner.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Controller
@RequestMapping("hello")
public class HelloController {
@GetMapping("test")
@ResponseBody
public String testListener(HttpServletRequest request, HttpServletResponse response) throws IOException {
// System.out.println("testListener");
response.getWriter().println("hello world");
request.getServletContext().setAttribute("sc","12");
request.getSession().setAttribute("sesstion","2");
request.setAttribute("request-attr1","request-attr-value1");
return "{"code":"ok"}";
}
}
代码说明:
- request.getServletContext().setAttribute("sc","12");:设置request请求属性
- request.getSession().setAttribute("sesstion","2");:设置session属性
2.创建servelet包并且创建FirstListenner类文件
public class FirstListenner implements ServletContextListener, HttpSessionListener, ServletRequestListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext初始化");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext销毁");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
HttpServletRequest request= (HttpServletRequest) sre.getServletRequest();
System.out.println("ServletRequest请求被创建,URI:"+request.getRequestURL());
}
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("ServletRequest请求被销毁");
}
@Override
public void sessionCreated(HttpSessionEvent se) {
HttpSession session = se.getSession();
System.out.println("session被创建,SessonId:"+session.getId());
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("session已被销毁");
}
代码说明:
- FirstListenner implements ServletContextListener, HttpSessionListener, ServletRequestListener:FirstListener类实现ServletContextListener类,HttpSessionListener和ServletRequestListener类
- 重写六个方法,每个监听器都有一个监听器创建方法和监听器销毁方法
3.web.xml配置监听器监听类
<listener>
<listener-class>com.example.firstlistenner.servelet.FirstListenner</listener-class>
</listener>
4.重启应用
servletListener初始化
serveletRequest初始化和销毁
浏览器访问:http://localhost:8086/hello/test
我们发现先创建了ServletRequest,然后创建session,接着ServletRequest被销毁
刷新url查看控制台输出(这时候没有创建session)
如果重新创建一个无痕窗口,发现session又被重新创建了
5.总结
监听器首先创建ServletContext,接着调用ServletResquest,如果有session,创建HttpSessionListener,销毁ServletRequest