学习笔记——过滤器、过滤器的HelloWord、过滤器生命周期
2023-01-06
一、过滤器(Filter)
1、概念:Filter是一个实现了特殊接口(Filter)的java类,实现对请求资源(jsp,servlet,html)的过滤的功能。过滤器是一个运行在服务器的程序,优先于请求资源(Servlet或者jsp、html)之前执行。过滤器是Javaweb技术中最为实用的技术之一。
2、功能:拦截请求,检查,之后选择放行或者是禁止放行。
3、应用场景:登陆权限检查、解决网站乱码、过滤敏感字符等等。
二、过滤器的HelloWord
(1)首先,先创建一个module,选择“web Application”,写入项目名,完成创建。
(2)准备一个请求
①将“index.jsp”删除,在web文件夹下创建index.html,创建一个超链接
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <a href="hello">点击访问HelloServlet</a> </body> </html>
②在src文件夹中创建一个Servlet包,在该包下创建一个名为“HelloServlet”的Servlet,去掉注解。
③在“web.xml”中创建访问路径
<servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>com.hh.Servlet.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping>
④设置“HelloServlet”中的代码
package com.hh.Servlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class HelloServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("访问到了HelloServlet"); } }
⑤将服务器进行简单修改,将Name可以设置为“filter_listener”,使用“Chrome”,使用“Redeploy”.
⑥为这次请求创建一个过滤器,创建过滤器的步骤:
a.新建一个类,“com.hh.filter.HelloFilter”,使这个类实现一个接口“Filter”,该接口的包是“javax.servlet”
b.实现一个类
c.实现接口中的所有抽象方法,使用快捷键“ctrl+o”。有“init”、“doFilter”、“destroy”
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //当前过滤器的核心方法 System.out.println("访问到了HelloFilter"); //放行代码 filterChain.doFilter(servletRequest,servletResponse); System.out.println("这是过滤器放行后的代码"); }
d.配置过滤器的过滤路径,在“web.xml”中设置
<filter> <filter-name>HelloFilter</filter-name> <filter-class>com.hh.filter.HelloFilter</filter-class> </filter> <filter-mapping> <filter-name>HelloFilter</filter-name> <url-pattern>/hello</url-pattern> </filter-mapping>
刷新服务器后,在弹出的超链接页面中点击超链接,在后台的运行顺序为:
(3)结论:请求发出,如果符合过滤器的过滤要求,执行放行前代码;放行,执行目标资源;目标资源执行完毕,会执行放行后的代码;
三、过滤器生命周期
需要了解:filter对象什么时候创建、对象类的方法什么时候执行、对象什么时候销毁
(1)在“HelloFilter”中创建一个构造器,使用快捷键“Alt+Insert”,点击“Constructor”
public HelloFilter() { System.out.println("HelloFilter的构造器被执行了"); }
(2)在“HelloFilter”中的“init”、“destroy”中添加输出语句
@Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("HelloFilter在进行初始化"); } @Override public void destroy() { System.out.println("HelloFilter被销毁了"); }
(3)filter对象是在特定情况下被创建,filter对象是在特定情况下被执行。
即“在web项目被加载的时候,过滤器对象被创建”,之后立刻执行初始化方法;n次发送符合过滤器路径的请求时,直接执行n次“doFilter”方法;web项目被卸载的时候(服务器关闭),对象被销毁,销毁之前,执行destroy方法。
(4)验证结论:
将服务器关闭后,过滤器被销毁
相关文章
- ToB新视角:小程序生态评估方法探索
- 7月份国内高端手机市场苹果竟然占据了63%,但我很期待8月的成绩
- 腾讯QQ更新!上线“美体”功能 小姐姐实测:秒变大长腿
- 针对用户操作失误,如何给产品的体验加分?
- 腾讯出品!手机银行适老化设计探索(附超多干货)
- 腾讯内测曝光,刷手支付来了?业内专家:应用前景不乐观
- 腾讯出品!7 种人机交互设计模型科普
- 新版 iOS/iPadOS 15 开发工具优先考虑 5G 而非 Wi-Fi
- 上线不足半月!腾讯“小借条”功能遭举报:涉嫌不正当竞争
- 为什么手机越来越贵了?
- 应用程序现代化的11个秘密
- 腾讯高手都在学的「感知性模式设计」是什么?
- 看了 800 多份简历和作品集,我总结了这份求职避坑指南
- 微信里可以开借条了:提供规范模版、还款提醒等功能
- 支付宝上线长辈模式,互联网平台适老化为何如此迫切?
- 中国5G手机销量排行榜:华为仍是第一,小米反而被反超
- 云数据中心需要基础设施即代码(IaC)
- 谷歌推出面向iOS/Android移动平台的Chrome 92软件更新
- 10年大数据平台经验,总结出这份数据建设干货(内含多张架构图)
- iPad版腾讯QQ HD彻底停止服务 已无法登录账号