javaweb三大组件简单介绍

**

Servlet

**
Servlet生命周期

第一次访问Servlet的时候创建对象,整个项目只有一个对象
第二次以后访问:访问的通过一个对象。
死亡:相关关闭
单列:懒汉模式
只在访问时才创建
Servlet线程不安全问题
多次访问共用一个对象,如果该对象包含数据域就有可能出现线程不安全的问题
不建议在Servlet中定义全局属性,特别是参数。

ServletContext
(1)ServletContext管理所有servlet,ServletContext是servlet他爹。
(2)ServletContext生命周期:天地同寿,项目启动就有了。
(3)ServletContext也是域对象,生命周期最长的对象,不要轻易往ServletContext写数据。
**

过滤器filter

**
使用场景
(1)用户登录之后,将用户信息放置到Session中,访问一些个人相关的页面,只有session存在的用户信息才能访问(只有登录成功之后才能访问)。
访问所有的Servlet之前都需要先从Session里面去除用户信息进行判断
(2)设置字符编码,在所有的Servlet里面都需要写
解决:使用filter
filter是什么
这个filter 就相当于路上的关卡,设了几道关卡就要拦截几次,只要有一个过滤器没通过,这个请求就结束了。

Filter配置

Web.xml
在这里插入图片描述

注解方式

在这里插入图片描述

package com.huadian.filter;

import com.huadian.entity.User;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter(filterName = "demo1Filter",urlPatterns = {"/servlet/*"})
public class demo1Filter implements Filter {
    public void destroy() {
        System.out.println("destroy");
    }
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("doFilter");
        HttpServletRequest request= (HttpServletRequest) req;
        HttpServletResponse response= (HttpServletResponse) resp;
        resp.setContentType("text/html;charset=utf-8");
        String uri=request.getRequestURI();
        User user=(User) request.getAttribute("user");
        if (user!=null||uri.contains("login"))
        {
            chain.doFilter(req,resp);
        }
        else
        {
            response.getWriter().write( "{\"code\":1,\"message\":\"未登入\"}" );
        }
    }

    public void init(FilterConfig config) throws ServletException {
        System.out.println("init");
    }

}

**

监听器Listener

**

**

是什么

**

监听器就是监听某一个对象的状态,发生改变的组件。
事件源:被监听的对象。
监听器:监听事件源的对象
相应的行为:监听的事件发生了,应该怎么处理

8个监听器

在这里插入图片描述

前6个是对3个域对象(ServletContext、HTTPSession、ServletRequest)的监听,每个与对象分别对应(监听创建和销毁)(属性 的变化)
HTTPSessionBindingListener:
用户成功登陆后,一般会将用户信息(user)存储在session中,会触发该事件,从session中奖User对象移除时,也会触发该事件、
HttpSessionActivationListener:
钝化:将内存中的session持久化到磁盘中,
活化:将磁盘上的session回复到内存中
创建监听器:
(1)配置文件
在这里插入图片描述

方式二:注解

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/simple_start/article/details/89741774