2021-11-2 JavaBean SpringMVC Filter Listener

右击项目名称 添加框架支持 web
JavaBean
pojo/实体类
无参构造器
属性私有化
对应的get/set
一般用来和数据库的字段做映射 ORM
ORM:对象关系映射
表 ------类
字段 -----属性
行记录 ------对象

MVC三层架构

Servlet和JSP都可以写Java代码 ,为了易于维护和使用, servlet 专注于处理请求,以及控制试图跳转 JSP专注于显示数据

Controller 控制器 --------- Servlet 1.接受用户的请求 2.响应给客户端内容3.重定向或转发(视图跳转)
Model 模型 ---------- JavaBean ----》JDBC《------ 数据库
View 试图 --------- JSP 1.展示数据2.提供可以供我们操作的请求

用户访问控制层,控制层直接操作数据库

JDBC

Controller 控制器 --------- Servlet 1.接受用户的请求 2.交给业务层去做3.视图跳转
↓ 转发或者重定向 操作↑ Model 模型 service(业务层)(login、logout、查询) --------> JavaBean ----》DAO ----> JDBC《------ 数据库
View 试图 --------- JSP 1.展示数据2.提供用户操作

Model
业务处理:业务逻辑(Service)
数据持久层 CRUD (Dao)
View
展示数据
提供链接发起Servlet请求
Controller(Servlet)
接受用户的请求:
交给业务层处理对应的代码
控制试图的跳转

登录 —》接受用户的登录请求-----》处理用户的请求(获取用户登录的参数)-----》交给业务层处理登录业务(判断用户名密码是否正确:事务)-----》Dao层查询用户名和密码是否正确----》数据库

过滤器 Filter

过滤器 :用来过滤网站的数据;
处理中文乱码
用户验证
在这里插入图片描述
Filter开发步骤
1.导依赖 javax.servlet
2.编写过滤器 实现Filter接口 导包不要错javax.servlet.Filter

public class CharacterEncodingFilter implements Filter {
    //初始化
    public void init(FilterConfig filterConfig) throws ServletException {

    }
    //Chain链
    // 1.过滤中的所有代码,在过滤特定请求的时候都会执行
    //2.必须要让过滤器继续通行
    //chain.doFilter(request,response);
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=UTF-8");

        System.out.println("执行前");
        chain.doFilter(request,response);//让我们的请求继续走,若不写 程序就会被拦截停止
        System.out.println("执行后");




    }
    //销毁 Web服务器关闭才被销毁
    public void destroy() {

    }
}

3.在web.xml中配置Filter

filter
com.zxw.filter.CharacterEncodingFilter


filter

    <url-pattern>/servlet/*</url-pattern>
</filter-mapping>

在这里插入图片描述

监听器 Listener

每个事件中都有监听
1.编写一个监听器

public class OnlineCountListener implements HttpSessionListener {
//创建session监听:一旦创建session就会触发一次这个事件
public void sessionCreated(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
Integer onlineCount = (Integer) ctx.getAttribute(“OnlineCount”);
if (onlineCount == null) {
onlineCount = new Integer(1);

    } else {
        int count = onlineCount.intValue();
        onlineCount = new Integer(count + 1);
    }
    ctx.setAttribute("OnlineCount", onlineCount);

}

//一旦销毁session就会触发一次这个事件
public void sessionDestroyed(HttpSessionEvent se) {
    ServletContext ctx = se.getSession().getServletContext();
    Integer onlineCount = (Integer) ctx.getAttribute("OnlineCount");
    if (onlineCount == null) {
        onlineCount = new Integer(1);

    } else {
        int count = onlineCount.intValue();
        onlineCount = new Integer(count - 1);
    }
    ctx.setAttribute("OnlineCount", onlineCount);
}

}

2.注册监听器 web.xml

com.zxw.listener.OnlineCountListener

3.看情况是否使用

监听器使用场景
用户登录
1.用户登录之后,向Session中放入用户的数据
2.进入主页的时候要判断用户是否已经登录(在锅炉其中实现)

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request1 = (HttpServletRequest) request;
        HttpServletResponse response1 = (HttpServletResponse) response;
        if(request1.getSession().getAttribute("USER_SESSION") == null){
               response1.sendRedirect("/sys/error.jsp");
        }

将项目中经常用到的常量封装到一个类里面
User
id
name
grade 等级
VIP1
VIP2
VIP3
VIP4
Filter 权限管理
if(request1.getSession().getAttribute(“USER_SESSION”).grade == VIP1){
response1.sendRedirect("/vip1/index.jsp");
}

if(request1.getSession().getAttribute(“USER_SESSION”).grade == VIP2){
response1.sendRedirect("/vip2/index.jsp");
}

if(request1.getSession().getAttribute(“USER_SESSION”).grade == VIP3){
response1.sendRedirect("/vip3/index.jsp");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值