MVC架构&Filter&Listener 学习笔记

本文介绍了JavaBean的规范,包括无参构造、私有属性、getter/setter方法及其在ORM中的作用。接着探讨了MVC架构,从早期的Servlet直接操作数据库到三层架构的演变,详细解释了Model、View和Controller的职责。此外,还讲解了过滤器的使用,如处理中文乱码,并展示了Filter的开发步骤。最后,提到了监听器在会话管理中的应用,例如在线人数统计。
摘要由CSDN通过智能技术生成

0 JavaBean

属于实体类,有特定的写法:

  • 必须有一个无参构造
  • 属性必须私有化
  • 必须有get和set方法
    一般用来和数据库的表做映射
    ORM:对象关系映射
  • 表→类
  • 字段→属性
  • 行→对象

1 架构讲解

什么是MVC:Model、View、Controller,模型、视图、控制器

1.1 早期架构

用户直接访问控制层,控制层直接操作数据库,Servlet->CRUD->数据库,程序臃肿,不利于维护。
Servlet:处理请求、响应、视图跳转、处理JDBC、处理业务代码、处理逻辑代码
在这里插入图片描述

1.2 MVC三层架构

在这里插入图片描述
Model:

  • 业务处理:业务逻辑(Service)
  • 数据持久层:CRUD(Dao)

View:

  • 展示数据
  • 提供链接发起Servlet请求(a、form、img……)

Controller:

  • 接受用户的请求:request(请求参数、Session信息等)
  • 交给业务层处理相应的代码
  • 控制视图跳转

以登录功能举例:
接受用户的登录请求->处理用户的请求(获取请求参数,username、password等)->交给业务层处理登录业务(判断用户名密码是否正确)->Dao层查询用户名和密码是否正确->数据库

2 过滤器

Filter:用来过滤网站的数据

  • 处理中文乱码
  • 登录验证……

Filter开发步骤:

  1. 导包
  2. 编写过滤器代码:
    继承接口(注意得是Servlet下的Filter接口)
    实现必须实现的方法,init、doFilter、destroy
    在web.xml中配置filter
    在这里插入图片描述
	public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("CharacterEncodingFilter初始化");
    }

    //chain:链
    /*
    1.过滤器中的所有代码,在过滤特定请求时都会执行
    2.必须要让过滤器继续执行filterChain.doFilter()

     */
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");
        //servletResponse.setCharacterEncoding("utf-8");
        servletResponse.setContentType("text/html;charset=utf-8");

        System.out.println("Filter执行前……");
        filterChain.doFilter(servletRequest,servletResponse);//让请求继续走
        System.out.println("Filter执行后");
    }

    public void destroy() {
        System.out.println("CharacterEncodingFilter销毁");
    }
	<filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>com.songhc.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/servlet/show.do</url-pattern>
    </filter-mapping>

3 监听器

  1. 实现监听器接口
  2. 重写方法
	public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();

        System.out.println(httpSessionEvent.getSession().getId());
        Integer onlineCount = (Integer)servletContext.getAttribute("OnlineCount");
        if (onlineCount == null) {
            onlineCount = new Integer(1);
        } else {
            onlineCount = new Integer(onlineCount.intValue()+1);
        }
        servletContext.setAttribute("OnlineCount", onlineCount);
    }

    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        ServletContext servletContext = httpSessionEvent.getSession().getServletContext();
        Integer onlineCount = ((Integer) servletContext.getAttribute("OnlineCount"));
        if (onlineCount == null) {
            onlineCount = new Integer(0);
        } else {
            onlineCount = new Integer(onlineCount.intValue()-1);
        }
        servletContext.setAttribute("OnlineCount", onlineCount);
    }
  1. 在web.xml中注册
 <listener>
    <listener-class>com.songhc.listener.OnlineCountListener</listener-class>
</listener>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值