1.什么是MVC
Model,Views,Contraller 模型,视图,控制器
2.1 早些年
用户直接访问控制层,控制层就可以直接操作数据库;
- servlet–CRUD–>数据库
- 弊端:程序十分臃肿,不利于维护
- servlet的代码中: 处理请求、响应、视图跳转、 处理JDBC、处理业务代码、处理逻辑代码
- 架构:没有什么是加-层解决不了的!
2.2 MVC三层架构
Model
- 业务处理:业务逻辑(Service)
- 数据持久层: CRUD (Dao)
View
- 展示数据
- 提供链接发起Servlet请求(a, form, img…)
Controller (Servlet)
- 接收用户的请求: (req: 请求参数、Session信息…
- 交给业务层处理对应的代码
- 控制视图的跳转
登录---> 接收用户的登录请求--->处理用户的请求(获取用户登录的参数,username, password) ---->交
给业务层处理登录业务(判断用户名密码是否正确:事务) --->Dao层 查询用户名和密码是否正确-->数据库
3.1. 什么是过滤器Filter ?
- Filter 过滤器它是 JavaWeb 的三大组件之一。
- 三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
- Filter 过滤器它是 JavaEE 的规范。也就是接口
- Filter 过滤器它的作用是:拦截请求,过滤响应。
拦截请求常见的应用场景有:
1.权限检查 2.日记操作 3.事务管理 ……等等
3.2 Filter 过滤器的使用
- 编写一个类去实现 Filter接口,导包不要错(javax.servlet)
- 实现过滤方法 doFilter()
- 到 web.xml 中去配置 Filter 的拦截路径
1)精确匹配
<filter-mapping>
<filter-name>Filter2</filter-name>
<url-pattern>/target.jsp</url-pattern> <!--精确匹配-->
</filter-mapping>
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/target.jsp
2)目录匹配
<filter-mapping>
<filter-name>Adminfilter</filter-name>
<url-pattern>/admin/*</url-pattern> <!--目录匹配-->
</filter-mapping>
以上配置的路径,表示请求地址必须为:http://ip:port/工程路径/admin/*
3)后缀名匹配
<filter-mapping>
<filter-name>Filter2</filter-name>
<url-pattern>*.action</url-pattern> <!--后缀名匹配-->
</filter-mapping>
以上配置的路径,表示请求地址必须以.action 结尾才会拦截到
3.3 Filter 的生命周期
Filter 的生命周期包含几个方法
1). 构造器方法
2). init 初始化方法
第 1,2 步,在 web 工程启动的时候执行(Filter 已经创建)
3).doFilter 过滤方法
.第 3 步,每次拦截到请求,就会执行(访问一次,拦截一次请求)
4).destroy 销毁
第 4 步,停止 web 工程的时候,就会执行(停止 web 工程,也会销毁 Filter 过滤器)
3.4 FilterConfig 类
FilterConfig 类是 Filter 过滤器的配置文件类。
Tomcat 每次创建 Filter 的时候,也会同时创建一个 FilterConfig 类,这里包含了 Filter 配置文件的配置息。
FilterConfig 类的作用是获取 filter 过滤器的配置内容
- 获取 Filter 的名称 filter-name 的内容
- 获取在 Filter 中 wen.xml 配置的 init-param 初始化参数
- 获取 ServletContext 对象
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("2.Filter 初始化方法 init(FilterConfig filterConfig)");
// 1. 获取 Filter 的名称 filter-name 的内容 (web-xml 中配置的名称)
System.out.println("filter-name:" + filterConfig.getFilterName());
// 2. 获取在 web.xml 中配置的 init-param 初始化参数
System.out.println("初始化参数username的值是:" + filterConfig.getInitParameter("username"));
System.out.println("初始化参数url的值是:" + filterConfig.getInitParameter("url"));
// 3. 获取 ServletContext 对象
System.out.println(filterConfig.getServletContext());
}
3.5FilterChain 过滤器链
FilterChain 就是过滤器链,多个过滤器如何一起工作?
- 在多个 Filter 过滤器执行的时候,他们的优先顺序是由他们在 web.xml 中从上到下配置的顺序决定的!
- 所有filter和目标资源默认都执行同一个线程中
- 多个Filter过滤器同时执行的时候,他们都要使用同一个Request对象
FilterChain.doFilter() 方法的作用:
- 执行下一个Filter过滤器(如果有Filter)
- 执行目标资源