MVC和Filter

目录

MVC和三层架构模型的联系

Filter

概念

作用

应用场景

步骤

简单入门


MVC和三层架构模型的联系

m-->model即模型是三层架构模型的业务层(service)和持久层(dao)

v-->views即视图是三层架构模型的表现层(web)

c-->controller即控制器也是三层架构模型的表现层(web)

Filter

概念

Filter表示过滤器属于java.servlet.Filter接口类型,过滤器可以对访问的静态和动态资源进行过滤,既可以过滤请求,也可以过滤响应

作用

1.拦截客户端对web资源的请求

web资源

静态:html,css,js,img

动态:jsp,servlet

2.拦截web资源对客户端的响应

应用场景

1.解决post请求中文乱码(全栈)

2.敏感字符过滤

3.登录权限进行校验

步骤

1.自定义类实现Filter接口

2.在实现类实现接口的所有代码

3.在doFilter方法中书写过滤资源的代码

4.在web.xml中配置过滤器

5.访问被过滤的资源

简单入门

java 复制代码
//自定义类实现Filter接口
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //不要调用父类的方法,否则会报错
        //Filter.super.init(filterConfig);
    }
    //在doFilter中书写拦截资源的代码
    //每次访问被过滤的资源都要执行该方法
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter...");
    }

    @Override
    public void destroy() {

    }
}

在web.xml配置Filter

html 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">

<!--    配置Filter-->
    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.hhh.filter.MyFilter</filter-class>
    </filter>
<!--    配置的是当前过滤器过滤的资源路径,表示Myfilter过滤器过滤demo1.html的请求和响应-->
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <url-pattern>/demo1.html</url-pattern>
    </filter-mapping>
</web-app>

tomcat底层解析xml获取过滤类的全路径,使用反射技术调用Myfilter类中的无参构造方法创建对象,使用对象调用MyFilter类的doFilter方法

Class c=Class.forName("过滤类的全路径");

MyFilter f=c.newInstance();

f.doFilter(request,response);

前端代码

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>我是被过滤的</h1>
</body>
</html>

浏览器:

可以发现不显示前端的内容,因为已经被过滤

但是在控制台有结果

该怎么查看被过滤的资源呢

在doFilter中书写放行代码

java 复制代码
import javax.servlet.*;
import java.io.IOException;
//自定义类实现Filter接口
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //不要调用父类的方法,否则会报错
        //Filter.super.init(filterConfig);
    }
    //在doFilter中书写拦截资源的代码
    //每次访问被过滤的资源都要执行该方法
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter...");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }

结果

相关推荐
张元清几秒前
React useMount Hook:只在挂载时执行一次的正确姿势 (2026)
javascript·react.js
晓说前端3 分钟前
TypeScript 核心语法应用 —— Vue 3 中的使用(上)
前端·typescript
breeze jiang7 分钟前
JavaScript 单例模式:用静态属性保证 Popup 只创建一次
开发语言·javascript·单例模式
No Silver Bullet8 分钟前
Vue进阶(贰幺叁)vue.config.js 中 productionSourceMap 作用详解
前端·javascript·vue.js
xcsweb11 分钟前
从5分钟到10秒:我用一个Skill把团队部署效率提升了30倍
前端·vue.js
用户629605932470530 分钟前
一次位置调整引发的画布失忆:深入 Vue2 虚拟 DOM 复用机制
前端·vue.js
Sterting32 分钟前
条件渲染与列表渲染
前端·vue.js
xiaoxiangsiyan34 分钟前
企业网络运维自动化与管理协议深度指南
linux·运维·服务器·网络·学习·自动化
__sjfzllv___35 分钟前
在职前端Leader学习/转行 AI Agent -DAY28
前端
用户8471810541936 分钟前
LangChain中间件教程及DeepAgents应用
javascript·agent