JavaWeb---5、过滤器、监听器与MVC

一、过滤器

什么是过滤器?

        Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener [监听器](https://so.csdn.net/so/search?q=监听器&spm=1001.2101.3001.7020)、Filter 过滤器。

          Filter 过滤器它是 JavaEE 的规范。也就是接口,它的作用是:拦截请求,过滤响应。

(一)请求方式

(二)实现过程

1、编写Java类实现Filter接口

2、实现doFilter()过滤方法

3、修改web.xml内容,配置拦截路径

login.jsp

<form method="post" action="/myServlet1">
   用户名
    <input type="text" name="username"><br>
    密码
    <input type="text" name="password"><br>
    <input type="submit" value="提交">
</form>

MyFilter.java

 @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;

        HttpSession session = httpServletRequest.getSession();
        String username = (String) session.getAttribute("username");
        String password = (String) session.getAttribute("password");
        //判断用户名是否为空
        if (username==null){
            //为空,拦截,转发登录
            servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
        }
        else {
            //不为空,打开权限,放行
            filterChain.doFilter(servletRequest, servletResponse);
        }



    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }

MyServlet.java

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

        if (("bai".equals(username))&&("123456").equals(password)){
            response.sendRedirect("/page/index.jsp");
        }
        else {
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }
    }

web.xml

<filter>
        <!-- 起别名-->
        <filter-name>myFilter1</filter-name>
        <filter-class>com.hz.filter.MyFilter1</filter-class>
    </filter>

    <filter-mapping>
        <!-- 当前拦截路径要给那个filter使用-->
        <filter-name>myFilter1</filter-name>
        <!--配置拦截路径-->
        <url-pattern>/page/*</url-pattern>
    </filter-mapping>

(三)拦截路径通配符

/*

匹配一级目录下的所有请求路径。

它只匹配直接跟在指定路径后面的第一级子路径。

例如,如果配置为 /user/*,那么它会匹配 /user/john 或 /user/admin,但不会匹配 /user/profile/edit。

/**

匹配任意多级目录下的所有请求路径。

它可以匹配任何深度的子路径

总结来说,/\*只匹配直接下一层的路径,而/\**可以匹配所有层级的路径,包括直接下一层和更深层次的路径。

(四)过滤器链

  • 当存在多个过滤器时,先配置的先执行(如果没有配置文件,则按照字母排序)

    • 过滤器1、过滤器2、过滤器3

      • 当请求访问资源时,过滤器执行的顺序是1->2->3;

      • 到达资源后,响应的顺序为 3->2->1

(五)使用场景

1、对请求和响应进行统一处理

2、对请求进行日志记录和审核

3、对数据进行屏蔽和替换

4、对数据进行加密和解密

(六)生命周期

阶段对应方法执行时机执行次数
创建对象构造器web应用启动时1
初始化方法void init(FilterConfig filterConfig)构造完毕1
过滤请求void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)每次请求多次
销毁default void destroy()web应用关闭时1次

二、监听器

(一)概述

web 监听器是Servlet 中一种的特殊的类,能帮助开发者监听 web 中的特定事件,比如 ServletcontextHttpSession,ServletRequest 的创建和销毁;变量的创建、销毁和修改等。 可以在某些动作前后增加处理,实现监控。例如可以用来统计在线人数等。

(二)监听器分类

web中定义八个监听器接口作为监听器的规范,这八个接口按照不同的标准可以形成不同的分类

按监听的对象划分

  • application域监听器 ServletContextListener ServletContextAttributeListener

  • session域监听器 HttpSessionListener HttpSessionAttributeListener HttpSessionBindingListener HttpSessionActivationListener

  • request域监听器 ServletRequestListener ServletRequestAttributeListener

按监听的事件分

  • 域对象的创建和销毁监听器 ServletContextListener HttpSessionListener ServletRequestListener

  • 域对象数据增删改事件监听器 ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener

  • 其他监听器 HttpSessionBindingListener HttpSessionActivationListener

(三)实现过程

  1. 创建一个类,根据需求实现对应的接口。

  2. 实现其中的方法。

  3. 将监听器交给 Tomcat 管理

三、MVC

(一)概述

视图(View)- JSP、HTML等:负责与用户交互

控制器(Controller)- Servlet:负责流程控制

模型(Model)- JavaBean:负责业务逻辑处理、数据库访问

(二)处理过程

(三)优缺点

优点:

多视图共享一个模型,大大提高代码的可重用性

MVC三个模块相互独立,松耦合架构

控制器提高了应用程序的灵活性和可配置性

有利于软件工程化管理

缺点:

原理复杂

增加了系统结构和实现的复杂性

视图对模型数据的低效率访问

(四)MVC与三层

1、三层

三层架构是指:视图层 View、服务层 Service,与持久层 Dao。它们分别完成不同的功能。

  • View 层:用于接收用户提交请求的代码在这里编写。

  • Service 层:系统的业务逻辑主要在这里完成。

  • Dao 层:直接操作数据库的代码在这里编写。

2、MVC

MVC:即 Model 模型、View 视图,及 Controller 控制器

View:视图,为用户提供使用界面,与用户直接进行交互。

Model:模型,承载数据,并对用户提交请求进行计算的模块。其分为两类:

                       一类称为数据承载 Bean:实体类,专门用户承载业务数据的,如 Student、User 等

                        一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理用户提交请求。

Controller:控制器,用于将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值