栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java web 项目之Listener,Filter

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java web 项目之Listener,Filter

一、Listener

1、Listener 主要作用于整个javaweb程序中,有几种常用监听器

ServletContextListener 这类监听器主要是监听于在javaWeb 程序的部署时和结束的操作,可用于你希望在程序启动前干啥,比如重新contextInitialized 方法可以在此处初始化 servlet 上下文相关数据重写contextDestroyed可以在此处操作在javaweb结束后想做的操作

HttpSessionListener这个监听器主要是监听Session的,这个可以监听通过重写sessionCreated和sessionDestroyed可以分别监听创建的session和销毁的session,统计在线用户数和下线用户HttpSessionAttributeListenerHttpSessionAttributeListener则用于监听HttpSession(session)范围内属性的变化

2、在idea创建Listener步骤

会自动实现三个监听器

 会自动默认使用@WebListener() 注解,如果不用注解可以在web.xml配置

二、Filter过滤器处于客户端和服务器端资源之间,对所有的请求或者响应进行拦截操作

一般用于完成通用的操作,如:登录验证、统一编码处理、敏感字符过滤

1、登录拦截例子

1.1、idea创建filter

idea新建的filter默认也是使用注解方式,也可以不使用注解,在web.xml配置

注意url-pattern,这个主要是配置你想要拦截的 请求url,“/*"表示所有ur都会拦截

1.2、重写doFilter()实现拦截,,例子以登录为例,重写的的代码部分为

 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        System.out.println(" req.getRequestURI() "+request.getRequestURI());
        // 获取请求地址
        String requestURI = request.getRequestURI().substring(request.getRequestURI().indexOf("/", 1),
                request.getRequestURI().length());
        System.out.println("====================requestURI"+requestURI);

        // 登陆页面和接口放开限制,否则死循环
        if ("/jstl/login.jsp".equals(requestURI) || "/login".equals(requestURI)) {
            chain.doFilter(request, response);
        } else {
            // 默认不开启
            HttpSession session = request.getSession(false);
            // 如果session中没有用户信息,拦截返回登陆页面
            if (session == null || session.getAttribute("name") == null) {
                response.sendRedirect(request.getContextPath() + "/jstl/login.jsp");
                // 返回
                return;
            } else {
                chain.doFilter(request, response);
            }
        }
    }

下面把login 的请求和login的jsp代码也贴进来

login接口,首先访问的时候会先调用doget请求,所以要记得在doget请求 要写一个跳到登录页面的,然后再login.jsp中要配置请求的方法和请求接口

package com.demo.servlert;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(name = "LoginServlet",urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        request.getRequestDispatcher("/jstl/login.jsp").forward(request, response);
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        String userName = request.getParameter("uname");
        String pwd = request.getParameter("pwd");
        if ("admin".equals(userName) && "123".equals(pwd)){
            request.setAttribute("uname",userName);
            request.setAttribute("pwd",pwd);
            HttpSession session = request.getSession();//获取session
            session.setAttribute("name", userName);// 将用户名和密码保存在session中
            session.setAttribute("pwd", pwd);// 将用户名和密码保存在session中
            response.sendRedirect(request.getContextPath()+"/jstl/flag.jsp");
        }else {
            response.sendRedirect(request.getContextPath()+"/jstl/login.jsp");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.getRequestDispatcher("/jstl/login.jsp").forward(request, response);
    }
}

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    
    登录页面


用户名:

密码:

最后呈现的效果是,如果密码不对或者session过期,那就会重定向回login.jsp,否则就是会放行

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782693.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号