• day16学习总结


    一、监听器

    简介:

            监听器属于java web中的三大组件之一

            监听器用于监听内置对象创建 监听内置对象作用域的值 监听容器(spring)的初始化操作

    分类:

            监听内置对象的创建与销毁

            监听内置对象的作用域的值

            监听session中对象的绑定

    监听内置对象的创建与销毁:

            ServletContextListener

    1. package com.qf.listenter;
    2. import javax.servlet.ServletContextEvent;
    3. import javax.servlet.ServletContextListener;
    4. import javax.servlet.annotation.WebListener;
    5. /*@WebListener*/
    6. public class MyServletContextListener implements ServletContextListener {
    7. @Override
    8. public void contextInitialized(ServletContextEvent servletContextEvent) {
    9. System.out.println("创建");
    10. }
    11. @Override
    12. public void contextDestroyed(ServletContextEvent servletContextEvent) {
    13. System.out.println("销毁");
    14. }
    15. }

            

    ServletRequestListener 

    1. package com.qf.listenter;
    2. import javax.servlet.ServletRequestEvent;
    3. import javax.servlet.ServletRequestListener;
    4. import javax.servlet.annotation.WebListener;
    5. /*@WebListener*/
    6. public class MyServletRequestListener implements ServletRequestListener {
    7. @Override
    8. public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
    9. System.out.println("创建");
    10. }
    11. @Override
    12. public void requestInitialized(ServletRequestEvent servletRequestEvent) {
    13. System.out.println("销毁");
    14. }
    15. }
    1. package com.qf.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import javax.servlet.http.HttpSession;
    8. import java.io.IOException;
    9. @WebServlet(name = "servlet01",urlPatterns = "/servlet01")
    10. public class Servlet01 extends HttpServlet {
    11. @Override
    12. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13. System.out.println("发送了请求");
    14. /*HttpSession session = req.getSession();
    15. //手动销毁
    16. session.invalidate();*/
    17. }
    18. }

            

    HttpSessionListener

    1. package com.qf.listenter;
    2. import javax.servlet.annotation.WebListener;
    3. import javax.servlet.http.HttpSessionEvent;
    4. import javax.servlet.http.HttpSessionListener;
    5. /*@WebListener*/
    6. public class MyHttpSessionListener implements HttpSessionListener {
    7. @Override
    8. public void sessionCreated(HttpSessionEvent httpSessionEvent) {
    9. System.out.println("创建");
    10. }
    11. @Override
    12. public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
    13. System.out.println("销毁");
    14. }
    15. }
    1. package com.qf.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import javax.servlet.http.HttpSession;
    8. import java.io.IOException;
    9. @WebServlet(name = "servlet01",urlPatterns = "/servlet01")
    10. public class Servlet01 extends HttpServlet {
    11. @Override
    12. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13. System.out.println("发送了请求");
    14. HttpSession session = req.getSession();
    15. //手动销毁
    16. session.invalidate();
    17. }
    18. }

    监听内置对象作用域的值:

            ServletContextAttributeListener

    1. package com.qf.listenter;
    2. import javax.servlet.ServletContextAttributeEvent;
    3. import javax.servlet.ServletContextAttributeListener;
    4. import javax.servlet.annotation.WebListener;
    5. /*@WebListener*/
    6. public class MyServletContextAttributeListener implements ServletContextAttributeListener {
    7. @Override
    8. public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
    9. System.out.println(servletContextAttributeEvent.getServletContext().getAttribute("uname"));
    10. System.out.println("执行了添加");
    11. }
    12. @Override
    13. public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
    14. System.out.println(servletContextAttributeEvent.getServletContext().getAttribute("uname"));
    15. System.out.println("执行了删除");
    16. }
    17. @Override
    18. public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
    19. System.out.println(servletContextAttributeEvent.getServletContext().getAttribute("uname"));
    20. System.out.println("执行了修改");
    21. }
    22. }
    1. package com.qf.servlet;
    2. import javax.servlet.ServletContext;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.annotation.WebServlet;
    5. import javax.servlet.http.HttpServlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import java.io.IOException;
    9. @WebServlet(name = "servlet02",urlPatterns = "/servlet02")
    10. public class Servlet02 extends HttpServlet {
    11. @Override
    12. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13. ServletContext servletContext = req.getServletContext();
    14. servletContext.setAttribute("uname","班长");
    15. servletContext.setAttribute("uname","肥男");
    16. servletContext.removeAttribute("uname");
    17. }
    18. }

            

            ServletRequestAttributeListener

    1. package com.qf.listenter;
    2. import javax.servlet.ServletRequestAttributeEvent;
    3. import javax.servlet.ServletRequestAttributeListener;
    4. import javax.servlet.annotation.WebListener;
    5. /*@WebListener*/
    6. public class MyServletRequestAttributeListener implements ServletRequestAttributeListener {
    7. @Override
    8. public void attributeAdded(ServletRequestAttributeEvent servletRequestAttributeEvent) {
    9. System.out.println(servletRequestAttributeEvent.getServletRequest().getAttribute("uname"));
    10. System.out.println("执行了添加");
    11. }
    12. @Override
    13. public void attributeRemoved(ServletRequestAttributeEvent servletRequestAttributeEvent) {
    14. System.out.println(servletRequestAttributeEvent.getServletRequest().getAttribute("uname"));
    15. System.out.println("执行了删除");
    16. }
    17. @Override
    18. public void attributeReplaced(ServletRequestAttributeEvent servletRequestAttributeEvent) {System.out.println(servletRequestAttributeEvent.getServletRequest().getAttribute("uname"));
    19. System.out.println("执行了修改");
    20. }
    21. }
    1. package com.qf.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. @WebServlet(name = "servlet03",urlPatterns = "/servlet03")
    9. public class Servlet03 extends HttpServlet {
    10. @Override
    11. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. req.setAttribute("uname","班长");
    13. req.setAttribute("uname","肥男");
    14. req.removeAttribute("uname");
    15. }
    16. }

            HttpSessionAttributeListener

    1. package com.qf.listenter;
    2. import javax.servlet.annotation.WebListener;
    3. import javax.servlet.http.HttpSessionAttributeListener;
    4. import javax.servlet.http.HttpSessionBindingEvent;
    5. /*@WebListener*/
    6. public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
    7. @Override
    8. public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
    9. System.out.println(httpSessionBindingEvent.getSession().getAttribute("uname"));
    10. System.out.println("执行了添加");
    11. }
    12. @Override
    13. public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
    14. System.out.println(httpSessionBindingEvent.getSession().getAttribute("uname"));
    15. System.out.println("执行了删除");
    16. }
    17. @Override
    18. public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
    19. System.out.println(httpSessionBindingEvent.getSession().getAttribute("uname"));
    20. System.out.println("执行了修改");
    21. }
    22. }
    1. package com.qf.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import javax.servlet.http.HttpSession;
    8. import java.io.IOException;
    9. @WebServlet(name = "servlet04",urlPatterns = "/servlet04")
    10. public class Servlet04 extends HttpServlet {
    11. @Override
    12. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    13. HttpSession session = req.getSession();
    14. session.setAttribute("uname","班长");
    15. session.setAttribute("uname","肥男");
    16. session.removeAttribute("uname");
    17. }
    18. }

    监听session中对象的绑定:

            

    1. package com.qf.entity;
    2. import javax.servlet.http.HttpSessionBindingEvent;
    3. import javax.servlet.http.HttpSessionBindingListener;
    4. public class STest implements HttpSessionBindingListener {
    5. @Override
    6. public void valueBound(HttpSessionBindingEvent httpSessionBindingEvent) {
    7. System.out.println(httpSessionBindingEvent.getSession().getAttribute("uname"));
    8. System.out.println("绑定");
    9. }
    10. @Override
    11. public void valueUnbound(HttpSessionBindingEvent httpSessionBindingEvent) {
    12. System.out.println(httpSessionBindingEvent.getSession().getAttribute("uname"));
    13. System.out.println("解绑");
    14. }
    15. }
    1. package com.qf.servlet;
    2. import com.qf.entity.STest;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.annotation.WebServlet;
    5. import javax.servlet.http.HttpServlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import javax.servlet.http.HttpSession;
    9. import java.io.IOException;
    10. @WebServlet(name = "servlet05",urlPatterns = "/servlet05")
    11. public class Servlet05 extends HttpServlet {
    12. @Override
    13. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    14. STest s = new STest();
    15. HttpSession session = req.getSession();
    16. session.setAttribute("STest",s);
    17. session.removeAttribute("STest");
    18. }
    19. }

    二、过滤器

    简介:

            开发中过滤器是对请求路径以及数据进行过滤

    基本使用:

            新建一个类 实现Filter接口

    1. package com.qf.filter;
    2. import javax.servlet.*;
    3. import javax.servlet.annotation.WebFilter;
    4. import java.io.IOException;
    5. @WebFilter(urlPatterns = "/*")
    6. public class MyFilter implements Filter {
    7. //初始化
    8. @Override
    9. public void init(FilterConfig filterConfig) throws ServletException {
    10. }
    11. //过滤方法
    12. @Override
    13. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    14. System.out.println("执行");
    15. //放行
    16. filterChain.doFilter(servletRequest, servletResponse);
    17. System.out.println("哈哈哈");
    18. }
    19. //销毁
    20. @Override
    21. public void destroy() {
    22. }
    23. }

            使用注解配置过滤的路径

            或者使用web.xml配置过滤路径

    1. <filter>
    2. <filter-name>myFilterfilter-name>
    3. <filter-class>filter.MyFilterfilter-class>
    4. filter>
    5. <filter-mapping>
    6. <filter-name>myFilterfilter-name>
    7. <url-pattern>/*url-pattern>
    8. filter-mapping>

    执行流程:

            

    案例:

            

            代码:

                    jsp

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: 86182
    4. Date: 2022/9/7
    5. Time: 13:38
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>Titletitle>
    12. head>
    13. <body>
    14. <form action="${pageContext.request.contextPath}/servlet06" method="post">
    15. <p style="color: red">
    16. ${msg}
    17. p>
    18. <p>
    19. 用户名:<input type="text" name="uname">
    20. p>
    21. <p>
    22. 密码:<input type="password" name="upwd">
    23. p>
    24. <p>
    25. <input type="submit" value="登录">
    26. p>
    27. form>
    28. body>
    29. html>
    30. <%--
    31. Created by IntelliJ IDEA.
    32. User: 86182
    33. Date: 2022/9/7
    34. Time: 13:40
    35. To change this template use File | Settings | File Templates.
    36. --%>
    37. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    38. <html>
    39. <head>
    40. <title>Titletitle>
    41. head>
    42. <body>
    43. <h1>登录成功h1>
    44. body>
    45. html>

                    servlet

    1. package com.qf.servlet;
    2. import javax.servlet.ServletException;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.IOException;
    8. @WebServlet(name = "servlet06",urlPatterns = "/servlet06")
    9. public class Servlet06 extends HttpServlet {
    10. @Override
    11. protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    12. //获取前端传递的参数
    13. String uname = req.getParameter("uname");
    14. String upwd = req.getParameter("upwd");
    15. //验证登录
    16. if ("admin".equals(uname)&&"123456".equals(upwd)){
    17. //将用户名添加到sess作用域中
    18. req.getSession().setAttribute("uname",uname);
    19. //跳转到登录成功页面
    20. resp.sendRedirect("success.jsp");
    21. }else {
    22. req.setAttribute("msg","登录失败");
    23. req.getRequestDispatcher("login.jsp").forward(req,resp);
    24. }
    25. }
    26. }

     

             过滤器:

    1. package com.qf.filter;
    2. import javax.servlet.*;
    3. import javax.servlet.annotation.WebFilter;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import java.io.IOException;
    7. @WebFilter(urlPatterns = "/*")
    8. public class LoginFilter implements Filter {
    9. @Override
    10. public void init(FilterConfig filterConfig) throws ServletException {
    11. }
    12. @Override
    13. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    14. HttpServletRequest request = (HttpServletRequest) servletRequest;
    15. HttpServletResponse response = (HttpServletResponse) servletResponse;
    16. //获取请求路径
    17. String uri = request.getRequestURI();
    18. //判断路径中是否包含登录页面或者servlet06路径
    19. if (uri.contains("login.jsp")||uri.contains("servlet06")){
    20. //放行
    21. filterChain.doFilter(servletRequest, servletResponse);
    22. }else {
    23. //获取session中的值
    24. Object uname = request.getSession().getAttribute("uname");
    25. //判断
    26. if (uname==null||"".equals(uname)){
    27. request.setAttribute("msg","非法登录");
    28. request.getRequestDispatcher("login.jsp").forward(request,response);
    29. }else {
    30. //uname存在
    31. //放行
    32. filterChain.doFilter(servletRequest, servletResponse);
    33. }
    34. }
    35. }
    36. @Override
    37. public void destroy() {
    38. }
    39. }

            修改tomcat默认访问的路径:

     

     

  • 相关阅读:
    免费GPU:九天•毕昇平台使用教程
    Python fileinput模块:逐行读取多个文件
    【伪彩色图像处理】将灰度图像转换为彩色图像研究(Matlab代码实现)
    万字总结随机森林原理、核心参数以及调优思路
    Pandas列中的字典/列表拆分为单独的列
    Unity 3D模型展示框架篇之ILRuntime整合与应用
    Git管理(Linux版本)
    vue3使用router的时候出现问题
    技术干货|昇思MindSpore NLP模型迁移之Bert模型—文本匹配任务(二):训练和评估
    架构师备考专栏-导航页
  • 原文地址:https://blog.csdn.net/qq_53884348/article/details/126744642