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

    }

结果

相关推荐
码路飞15 分钟前
热榜全是 OpenClaw,但我用 50 行 Python 就造了个桌面 AI Agent 🤖
java·javascript
前端Hardy44 分钟前
别再忽略 Promise 拒绝了!你的 Node.js 服务正在“静默自杀”
前端·javascript·面试
前端Hardy1 小时前
别再被setTimeout闭包坑了!90% 的人都写错过这个经典循环
前端·javascript·vue.js
小林coding1 小时前
专为程序员打造的简历模版来啦!覆盖前端、后端、测开、大模型等专业简历
前端·后端
前端Hardy1 小时前
你的 Vue 组件正在偷偷吃掉内存!5 个常见的内存泄漏陷阱与修复方案
前端·javascript·面试
RaidenLiu1 小时前
Flutter Platform Channel 底层架构解析 —— 从 BinaryMessenger 到跨平台消息通信机制
前端·flutter·前端框架
bluceli1 小时前
CSS容器查询:响应式设计的新范式
前端·css
Tapir1 小时前
被 Karpathy 下场推荐的 NanoClaw 是什么来头
前端·后端·github
前端人类学1 小时前
深入解析JavaScript中的null与undefined:区别、用法及判断技巧
前端·javascript
ssshooter2 小时前
Tauri 项目实践:客户端与 Web 端的授权登录实现方案
前端·后端·rust