一、过滤器
什么是过滤器?
Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener [监听器](https://so.csdn.net/so/search?q=监听器&spm=1001.2101.3001.7020)、Filter 过滤器。
Filter 过滤器它是 JavaEE 的规范。也就是接口,它的作用是:拦截请求,过滤响应。
(一)请求方式
(二)实现过程
1、编写Java类实现Filter接口
2、实现doFilter()过滤方法
3、修改web.xml内容,配置拦截路径
login.jsp
<form method="post" action="/myServlet1">
用户名
<input type="text" name="username"><br>
密码
<input type="text" name="password"><br>
<input type="submit" value="提交">
</form>
MyFilter.java
@Override
public void init(FilterConfig filterConfig) throws ServletException {
Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpSession session = httpServletRequest.getSession();
String username = (String) session.getAttribute("username");
String password = (String) session.getAttribute("password");
//判断用户名是否为空
if (username==null){
//为空,拦截,转发登录
servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);
}
else {
//不为空,打开权限,放行
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Override
public void destroy() {
Filter.super.destroy();
}
MyServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username= request.getParameter("username");
String password = request.getParameter("password");
HttpSession session = request.getSession();
session.setAttribute("username",username);
session.setAttribute("password",password);
if (("bai".equals(username))&&("123456").equals(password)){
response.sendRedirect("/page/index.jsp");
}
else {
request.getRequestDispatcher("/login.jsp").forward(request,response);
}
}
web.xml
<filter>
<!-- 起别名-->
<filter-name>myFilter1</filter-name>
<filter-class>com.hz.filter.MyFilter1</filter-class>
</filter>
<filter-mapping>
<!-- 当前拦截路径要给那个filter使用-->
<filter-name>myFilter1</filter-name>
<!--配置拦截路径-->
<url-pattern>/page/*</url-pattern>
</filter-mapping>
(三)拦截路径通配符
/*
匹配一级目录下的所有请求路径。
它只匹配直接跟在指定路径后面的第一级子路径。
例如,如果配置为 /user/*,那么它会匹配 /user/john 或 /user/admin,但不会匹配 /user/profile/edit。
/**
匹配任意多级目录下的所有请求路径。
它可以匹配任何深度的子路径
总结来说,
/\*
只匹配直接下一层的路径,而/\**
可以匹配所有层级的路径,包括直接下一层和更深层次的路径。
(四)过滤器链
当存在多个过滤器时,先配置的先执行(如果没有配置文件,则按照字母排序)
过滤器1、过滤器2、过滤器3
当请求访问资源时,过滤器执行的顺序是1->2->3;
到达资源后,响应的顺序为 3->2->1
(五)使用场景
1、对请求和响应进行统一处理
2、对请求进行日志记录和审核
3、对数据进行屏蔽和替换
4、对数据进行加密和解密
(六)生命周期
阶段 | 对应方法 | 执行时机 | 执行次数 |
---|---|---|---|
创建对象 | 构造器 | web应用启动时 | 1 |
初始化方法 | void init(FilterConfig filterConfig) | 构造完毕 | 1 |
过滤请求 | void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) | 每次请求 | 多次 |
销毁 | default void destroy() | web应用关闭时 | 1次 |
二、监听器
(一)概述
web 监听器是Servlet 中一种的特殊的类,能帮助开发者监听 web 中的特定事件,比如 ServletcontextHttpSession,ServletRequest 的创建和销毁;变量的创建、销毁和修改等。 可以在某些动作前后增加处理,实现监控。例如可以用来统计在线人数等。
(二)监听器分类
web中定义八个监听器接口作为监听器的规范,这八个接口按照不同的标准可以形成不同的分类
按监听的对象划分
application域监听器 ServletContextListener ServletContextAttributeListener
session域监听器 HttpSessionListener HttpSessionAttributeListener HttpSessionBindingListener HttpSessionActivationListener
request域监听器 ServletRequestListener ServletRequestAttributeListener
按监听的事件分
域对象的创建和销毁监听器 ServletContextListener HttpSessionListener ServletRequestListener
域对象数据增删改事件监听器 ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener
其他监听器 HttpSessionBindingListener HttpSessionActivationListener
(三)实现过程
-
创建一个类,根据需求实现对应的接口。
-
实现其中的方法。
-
将监听器交给 Tomcat 管理
三、MVC
(一)概述
视图(View)- JSP、HTML等:负责与用户交互
控制器(Controller)- Servlet:负责流程控制
模型(Model)- JavaBean:负责业务逻辑处理、数据库访问
(二)处理过程
(三)优缺点
优点:
多视图共享一个模型,大大提高代码的可重用性
MVC三个模块相互独立,松耦合架构
控制器提高了应用程序的灵活性和可配置性
有利于软件工程化管理
缺点:
原理复杂
增加了系统结构和实现的复杂性
视图对模型数据的低效率访问
(四)MVC与三层
1、三层
三层架构是指:视图层 View、服务层 Service,与持久层 Dao。它们分别完成不同的功能。
-
View 层:用于接收用户提交请求的代码在这里编写。
-
Service 层:系统的业务逻辑主要在这里完成。
-
Dao 层:直接操作数据库的代码在这里编写。
2、MVC
MVC:即 Model 模型、View 视图,及 Controller 控制器。
View:视图,为用户提供使用界面,与用户直接进行交互。
Model:模型,承载数据,并对用户提交请求进行计算的模块。其分为两类:
一类称为数据承载 Bean:实体类,专门用户承载业务数据的,如 Student、User 等
一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理用户提交请求。
Controller:控制器,用于将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应。