首页 > 其他分享 >十三、过滤器,监听器的常见应用

十三、过滤器,监听器的常见应用

时间:2022-12-04 19:45:14浏览次数:39  
标签:十三 com req HttpServletResponse 监听器 过滤器 import servlet javax

十三、过滤器,监听器的常见应用

  1. 用户登录之后,向Session中放入用户的数据

  2. 进入主页面的时候要判断用户是否已经登录;要求:在过滤器中实现

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        if (request.getSession().getAttribute(Constant.USER_SESSION) == null) {
            response.sendRedirect("/error.jsp");
    ​
        }
        filterChain.doFilter(request,response);
    }

小项目代码实现:

  1. 编写工具类

    package com.lyh.util;
    ​
    public class Constant {
        public final static String USER_SESSION = "USER_SESSION";
    }
  2. 写登录页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>登录页面</h1>
    <form action="/servlet/login" method="post">
        <input type="text" name="username">
        <input type="submit">
    </form>
    ​
    </body>
    </html>
  3. 写登录页面的servlet(LoginServlet)

    package com.lyh.servlet;
    ​
    import com.lyh.util.Constant;
    ​
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    ​
    public class LoginServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //获取前端请求参数
            String username = req.getParameter("username");
            //如果你输入admin就会登录成功
            if (username.equals("admin")){
                req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());
                resp.sendRedirect("/sys/success.jsp");
            }else {//登录失败
                resp.sendRedirect("/error.jsp");
            }
        }
    ​
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
  4. 在web.xml 中注册servlet镜像

    <!--    当/servlet/*路径下的所以运行的服务器都会被过滤-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>com.lyh.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>
    ​
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.lyh.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/servlet/login</url-pattern>
    </servlet-mapping>
  5. 登录成功,登录失败,跳转页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>登录成功</h1>
    <a href="/servlet/logout">注销</a>
    ​
    </body>
    </html>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>错误</h1>
    <a href="/Login.jsp">返回登录页面</a>
    </body>
    </html>
  6. 注销会有一个按钮(对应一个Servlet,编写注销的Servlet为LogoutServlet)

    package com.lyh.servlet;
    ​
    import com.lyh.util.Constant;
    ​
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    ​
    public class LogoutServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //这时我们还有会话记录
            if (req.getSession().getAttribute(Constant.USER_SESSION)!=null){
                //把会话记录销毁
                req.getSession().removeAttribute(Constant.USER_SESSION);
                //重定向到注册页面
                resp.sendRedirect("/Login.jsp");
            }else {
                //重定向到注册页面
                resp.sendRedirect("/Login.jsp");
            }
        }
    ​
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    ​
  7. 注销的servle(LogoutServlet)t,也在web.xml 中注册一下

    <servlet>
        <servlet-name>LogoutServlet</servlet-name>
        <servlet-class>com.lyh.servlet.LogoutServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LogoutServlet</servlet-name>
        <url-pattern>/servlet/logout</url-pattern>
    </servlet-mapping>
  8. 成功页面中注销点击就跳转到Login.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>登录成功</h1>
    <a href="/servlet/logout">注销</a>
    ​
    </body>
    </html>
  9. 写过滤器Filter

    package com.lyh.filter;
    ​
    import com.lyh.util.Constant;
    ​
    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    ​
    public class SysFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    ​
        }
    ​
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            if (request.getSession().getAttribute(Constant.USER_SESSION) == null) {
                response.sendRedirect("/error.jsp");
    ​
            }
            filterChain.doFilter(request,response);
        }
    ​
        @Override
        public void destroy() {
    ​
        }
    }
  10. 在web,xml中注册过滤器

    <filter>
        <filter-name>SysFilter</filter-name>
        <filter-class>com.lyh.filter.SysFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>SysFilter</filter-name>
        <url-pattern>/sys/*</url-pattern>
    </filter-mapping>
  11. 补充一点:我们这个过滤器是过滤页面的,sys这个包下面的页面都会被我们的过滤器过滤一遍

  12.  

标签:十三,com,req,HttpServletResponse,监听器,过滤器,import,servlet,javax
From: https://www.cnblogs.com/lyhidea/p/16950484.html

相关文章

  • 十一、过滤器Filter(重点)
    Filter:过滤器,用来过滤网站的数据处理中文乱码登录验证....也就是说,web传进来的数据要经过这个接口Filter,把一些不想要的东西帮你过滤掉。1、在pom.xml中配置依赖......
  • Quartz使用监听器插入定时任务执行日志
    Quartz使用监听器插入定时任务执行日志使用springboot,将监听器交给spring容器管理,并像其中注入日志服务类,环境准备工作实现任务调度需要导入两个quartz的maven依赖<depen......
  • 二十三. 单臂路由实验和三层交换实验
    1.单臂路由实验图配置流程第1个里程:配置交换机2接口配置<Huawei>sys[Huawei]sysnameS1[S1]vlanbatch1020[S1]intg0/0/2[S1-GigabitEthernet0/0/2]portl......
  • Spring @WebFilter 注解定义过滤器
    @Slf4j@Order(1)@WebFilter(filterName="myFilter",urlPatterns={"/asyncResultGet/*"},initParams={@WebInitParam(name="author",value="Jaemon")})publicc......
  • 布隆过滤器
    布隆过滤器介绍布隆过滤器(BloomFilter)是1970年由布隆提出的它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中......
  • Vue2(笔记15) - Vue核心 - 过滤器
    可学可不学,可用可不用过滤器需求:把一个时间戳格式化成可读的年月日时间;需要引入一个dayjs 的 JS库,专门用来处理时间的;​​dayjs在这可以下载​​<scriptsrc="./res/vue.......
  • 第十三章 Pygame游戏编程
     实例01:制作一个跳跃的小球小游戏 创建一个游戏窗口,然后在窗口内创建一个小球,以一定的速度移动小球,当小球碰到游戏窗口的边缘时,小球弹回,继续移动。  代码如下......
  • ASP .NET Core Api使用过滤器
    Asp.netwebapi为我们提供的ActionFilterAttribute拦截器,通过重写OnActionExecuting,来拦截action的请求消息,当执行OnActionExecuting完成以后才真正进入请求的action......
  • 第十三章
    importpygameimportsyspygame.init()screen=pygame.display.set_mode((640,480))ball=pygame.image.load('smallball1(1)(1).jpg')ballrect=ball.get_rect(......
  • Vue的指令与过滤器
    1.内容渲染指令v-text覆盖标签原有内容{{}}插值表达式v-html2.属性绑定指令v-bind为属性动态绑定值简写':'3.事件绑定指令v-on简写'@'vue提供了内置......