Servlet过滤器个监听器

过滤器和监听器

过滤器

  • 什么是过滤器

当浏览器向服务器发送请求的时候,过滤器可以将请求拦截下来,完成一些特殊的功能,比如:编码设置、权限校验、日志记录等。

  • 过滤器执行流程
image-20231223183541087
  • Filter实例
package com.by.servlet;import javax.servlet.*;
import java.io.IOException;public class FilterDemo implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}//真正执行过滤业务的方法@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws ServletException, IOException {request.setCharacterEncoding("utf-8");//设置请求的编码格式response.setContentType("text/html;charset=utf-8"); //设置相应的编码格式System.out.println("请求进来,经过过滤器...");//一个web路径,可以配置多个过滤器,这多个过滤器就被称为过滤器链filterChain.doFilter(request,response);System.out.println("相应返回,经过过滤器...");}@Overridepublic void destroy() {}
}
  • 使用过滤器需要注意的事项:

1.过滤器必须实现Filter接口。

2.过滤器拦截的请求执行完毕之后,必须要放行,否则我们的请求就不会被执行。

 filterChain.doFilter(request,response); //过滤器放行

3.我们可以使用@WebFilter来配置过滤器要拦截的资源,当然我们也可以通过xml的方式配置过滤器。

    <filter><filter-name>filter</filter-name><filter-class>com.by.servlet.FilterDemo</filter-class></filter><filter-mapping><filter-name>filter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
  • Filter的拦截路径的配置

1.拦截具体的资源路径:/index.jsp,只有访问index.jsp的时候才会被拦截

2.目录拦截:/user/*,访问/user下的所有资源,都会被拦截

3.后缀名拦截:*.jsp 访问后缀名为jsp的资源,都会被拦截

4.拦截所有:/* 访问所有的资源,都会被拦截

  • 测试

1.创建servlet

package com.by.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 FilterTestServlet 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 {//设置字符编码//request.setCharacterEncoding("utf-8");String username = request.getParameter("username");String password = request.getParameter("password");System.out.println("username: " + username+"===password"+password);//设置字符编码//response.setContentType("text/html;charset=utf-8");response.getWriter().write("username: " + username+"===password"+password);}
}

2.配置servlet

    <servlet><servlet-name>filterTest</servlet-name><servlet-class>com.by.servlet.FilterTestServlet</servlet-class></servlet><servlet-mapping><servlet-name>filterTest</servlet-name><url-pattern>/filterTest</url-pattern></servlet-mapping>

3.创建filter_test.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<form action="filterTest" method="post"><input type="text" name="username"/><br><input type="text" name="password"/><br><input type="submit" value="提交">
</form>
</body>
</html>

14.2 监听器

  • 是什么?

监听器可以监听就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。

  • Listener分类:Javaweb提供了8个监听器(接口)
    在这里插入图片描述

  • listen实例

package com.by.servlet;import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;public class MyListener implements ServletContextListener {//监听Servlet上下文对象创建的方法@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {System.out.println("============tomcat启动(create servletContext)========");}//监听Servlet上下文对象销毁的方法@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {System.out.println("============tomcat关闭(destroyed servletContext)==========");}
}
    <!--配置监听器--><listener><listener-class>com.by.listen.MyListener</listener-class></listener>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/442208.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文解读】Collaboration Helps Camera Overtake LiDAR in 3D Detection

CoCa3D 摘要引言Collaborative Camera-Only 3D DetectionCollaborative depth estimationCollaborative detection feature learning 实验结论和局限 摘要 与基于 LiDAR 的检测系统相比&#xff0c;仅相机 3D 检测提供了一种经济的解决方案&#xff0c;具有简单的配置来定位 3…

如何判断 LM358 芯片是否损坏或故障?

LM358 芯片是一种流行的低功耗双运放&#xff0c;广泛应用于各种电子电路中&#xff0c;包括放大器、滤波器、积分器、比较器等。它以其低成本、高性价比和广泛的工作电源范围&#xff08;3V至32V单电源或1.5V至16V双电源&#xff09;而被广泛使用。 然而&#xff0c;像所有电…

C语言如何理解 c=a,b;?

一、问题 对于表达式 ca,b;和 d(a,b);该如何进⾏理解&#xff1f;它们的值都是怎样的&#xff1f; 二、解答 在C语⾔中&#xff0c;逗号有两个作⽤&#xff0c;⼀是⽤来分隔函数参数&#xff0c;⼆是作为逗号运算符。本题主要考虑的是逗号运算符&#xff0c;根据逗号运算符的规…

SAP下载word

事务代码&#xff1a;STRANS 启动转换器 步骤 1. 将参数填入模板&#xff0c;并另存为word 2003 xml文档 2.使用网页打开xml文档&#xff0c;并将xml拷贝到转换器tt:template中&#xff0c;添加参数 3.替换参数&#xff0c;部分xml可能存在错误或者跑偏根据实际情况检查修改 …

实现vue3响应式系统核心-合理触发响应

简介 在上一篇文章中&#xff0c;我们增强了对对象的拦截&#xff0c;解决了以下问题&#xff1a; 拦截 in操作符拦截 for in 循环拦截对象的删除操作 接下来我们在对响应式系统做一些优化&#xff0c;避免一些不必要的响应 代码地址&#xff1a; https://github.com/SuYxh…

【Idea+Maven+Git:构建高效Java项目的强大组合】

引言 在当今的软件开发世界中&#xff0c;集成开发环境&#xff08;IDE&#xff09;、构建工具和版本控制系统是每个项目不可或缺的组成部分。本文将深入探讨这三个工具&#xff1a;IntelliJ IDEA、Maven和Git&#xff0c;以及它们如何协同工作&#xff0c;帮助开发者构建更高…

Kotlin快速入门系列8

Kotlin的泛型 与Java一样&#xff0c;Kotlin也提供泛型。泛型&#xff0c;即 "参数化类型"&#xff0c;将类型参数化&#xff0c;可以用在类&#xff0c;接口&#xff0c;方法上。可以为类型安全提供保证&#xff0c;消除类型强转的烦恼。声明泛型类的格式如下&…

TortoiseSVN各版本汉化包下载

首先进入下载版本列表 1.下载地址&#xff1a;https://sourceforge.net/projects/tortoisesvn/files ​ 2.选择自己版本进入​ 3.选择Language Packs进入&#xff0c;选择对应语言包下载。 ​ 4.在TortoiseSVN根目录下点击安装即可。 ​

给准备从事软件开发工作的年轻人的13个建议

从事软件开发是一个不断学习和适应变化的过程。这里有一些针对刚入行或准备从事软件开发工作的年轻人的建议&#xff1a; 掌握基础知识&#xff1a;确保你有扎实的编程基础。了解至少一种编程语言的语法和核心概念&#xff0c;比如C语言、Python、Java或C#。同时&#xff0c;理…

第38期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

Sqli靶场 11--->22Less

打靶场&#xff0c;打靶场&#xff0c;打靶场&#xff0c;打靶场......靶场你别打我 球球 11.不用密码&#xff08;狂喜) 这一关知不知道账号密码都无所谓 那么我们就尝试一下报错类型&#xff0c;单引号报错&#xff0c;好&#xff0c;字符型 构造poc I_don_t_know_t…

QT自制软键盘 最完美、最简单、支持中文输入(二)

目录 一、前言 二、本自制虚拟键盘特点 三、中文输入原理 四、组合键输入 五、键盘事件模拟 六、界面 七、代码 7.1 frmKeyBoard 头文件代码 7.2 frmKeyBoard 源文件代码 八、使用示例 九、效果 十、结语 一、前言 由于系统自带虚拟键盘不一定好用&#xff0c;也不一…