过滤器和监听器。

关于自动登录的过滤器操作。
过滤所有的请求和相应。
要获得路径,(request.getRequestUrl)对象。
然后看路径里面是否包含登录或者,登录servlet
if包含,就放行。
否则request.getSession(false);判断session是否为空。
空的话,跳转到登录页面。
否则。判断是否含有指定名字的session。
如果为空跳转到登录页面
否则。放行。

放行的意思是说。先访问主页面,但是没有session,会跳转到登录页面,
登录成功,会放行到主页面。(这样用户的体验会更好。)

也可以把放行改为跳转到指定的页面,

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;

        String requestURI = request.getRequestURI();

        //如果当前浏览器路径访问的是login(loginServlet)或者login.jsp时放行
        if(requestURI.contains("login") || requestURI.contains("login.jsp")){
            chain.doFilter(request,response);//放行
        }else{
            //如果访问的是其他路径
            //首先判断session
            //获取session
            HttpSession session = request.getSession(false);
            //判断session
            if (session == null){
                //跳转到登录页面
                response.sendRedirect(request.getContextPath()+"/login.jsp");
            }else{
                //如果seesion不为空,判断session中的user
                if(session.getAttribute("user") == null){
                    response.sendRedirect(request.getContextPath()+"/login.jsp");
                }else {
                    //如果不为空,证明已经登录过了,session默认有效期为30分钟
                    chain.doFilter(request,response);
                }
            }
        }



protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        // 模拟一个登录的过程
//        User user = UserService.login(username, password);

        //User user = null;
        if ("admin".equals(username) && "123456".equals(password)) {
            User user = new User(username, password);
            request.getSession().setAttribute("user",user.getUsername());
            request.getRequestDispatcher("index.jsp").forward(request,response);
        } else {
            request.setAttribute("msg","用户名或密码错误");
            request.getRequestDispatcher("login.jsp").forward(request,response);
        }



//        Cookie cookie = new Cookie("userInfo", username + "#" + password);
//        response.addCookie(cookie);
//        response.sendRedirect("aaa.html");


    }




Java的事件监听机制

 1、事件监听涉及到三个组件:事件源、事件参数、事件监听器
 2、当事件源上发生某一个动作时,它会调用事件监听器的一个方法,并在调用该方法时把事件参数对象传递进去,
	开发人员在监听器中通过事件参数对象,就可以拿到事件源,从而对事件源进行操作。

什么是监听器

​ 监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计访问人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等

监听器类型

生命周期监听器:**

1 ServletContext上下文监听器

ServletContextListener接口
		内部方法:
		初始化:contextInitialized
		销毁:contextDestroyed

2 Session监听器

HttpSessionListener
		内部方法:
		sessionCreated:监听Session对象的创建
		sessionDestroyed:监听Session对象的销毁

3 request监听器

ServletRequestListener
		监听request对象的初始化和销毁
		内部方法:
			1、requestInitialized:监听request对象的初始化
			2、requestDestroyed:监听request对象的销毁

属性变化监听器:**

1 ServletContext属性变化监听器

 ServletContextAttributeListener接口        
 		内部的方法:        
 		attributeAdded:监听属性的添加        
 		attributeRemoved:监听属性的移除        
 		attributeReplaced:监听属性的修改

2 session属性变化监听器

HttpSessionAttributeListener
		监听HttpSession的内容的变化
		内部的方法:
		attributeAdded:监听属性的添加
		attributeRemoved:监听属性的移除
		attributeReplaced:监听属性的修改

3 request属性变化监听器

ServletRequestAttributeListener
		监听属性内容变化
		内部方法:
		attributeAdded:监听属性的添加
		attributeRemoved:监听属性的移除
		attributeReplaced:监听属性的修改

监听器的2种配置

xml的配置

在web.xml中进行配置

<listener>
<!--直接写出自定义的监听器的类名即可-->
    <listener-class>com.qf.web.listener.RequestLeftListener</listener-class>
</listener>
1.3.2注解式配置

Servlet3.0之后新增的,使用注解@WebListener进行监听器的注册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值