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() {

    }

结果

相关推荐
kyriewen2 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
IT_陈寒2 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
山河木马3 小时前
矩阵专题2-怎么创建视图矩阵(uViewMatrix)
javascript·webgl·计算机图形学
小林攻城狮3 小时前
使用 Transport 节流解决 Vercel AI SDK 流式渲染卡死问题
前端·react.js
前端缘梦3 小时前
告别 TS 运行时类型漏洞!Zod 完整入门实战教程(前端 / 全栈必备)
前端·react.js·全栈
the_answer3 小时前
Webpack vs Vite 深度对比分析
前端·webpack
转转技术团队3 小时前
验证码识别实战:前端不写页面,改训模型了?
前端
MomentYY3 小时前
Temperature:AI 的“脑洞旋钮”
前端·llm·ai编程
远航_4 小时前
OpenSpec 完整详细介绍
前端·后端
召钱熏4 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端