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

    }

结果

相关推荐
Cloud_Shy618几秒前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第十一章 Python 包跟踪器 下篇)
前端·后端·python·数据分析·excel
程序员榴莲2 分钟前
网络编程入门 Python Socket 实现一个简单的用户认证系统
服务器·网络·python
kyriewen2 分钟前
我用AI把公司10万行代码屎山重构了,CTO看了代码后说:你提前转正
前端·javascript·ai编程
ttwuai4 分钟前
XYGo Admin 菜单与路由:Vue3 动态路由 + GoFrame 权限菜单的完整实现方案
前端·vue·后台框架
程序员码歌12 分钟前
OpenSpec 到 Superpowers:AI 编码从说清到做对
android·前端·人工智能
爱编程的小新☆13 分钟前
LangGraph4j工作流框架
前端·数据库·ai·langchain·langgraph4j
甲方大人请饶命14 分钟前
Java-网络编程和反射
网络
Oll Correct20 分钟前
实验二十五:从IPv4向IPv6过渡所使用的隧道技术
网络·笔记
c++逐梦人27 分钟前
五种IO模型与⾮阻塞IO
开发语言·网络
冰冰的米咖28 分钟前
交换与路由技术整理与总结(持续更新版)
网络·网络协议·智能路由器