Servlet 过滤器入门示例

Servlet 过滤器的作用

Servlet 过滤器用于在请求到达 Servlet 之前和响应返回客户端之前对请求和响应进行预处理和后处理。过滤器可以用于:

  1. 请求和响应的修改:可以修改请求和响应的内容。
  2. 日志记录:记录请求和响应的信息,便于调试和监控。
  3. 身份验证和授权:检查用户的身份和权限。
  4. 性能监控:分析请求的处理时间。
  5. 跨域请求处理:处理 CORS(跨域资源共享)相关的请求。

Servlet 过滤器的基本结构

一个 Servlet 过滤器需要实现javax.servlet.Filter接口,并重写以下方法:

  • init(FilterConfig filterConfig):初始化过滤器。
  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain):对请求和响应进行处理。
  • destroy():销毁过滤器。

示例项目

下面是一个简单的 Servlet 过滤器示例项目,展示如何创建和使用过滤器。

1. 创建 Maven 项目

首先,创建一个 Maven 项目,并在pom.xml中添加 Servlet API 依赖:

<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency>
</dependencies>

2. 创建过滤器

创建一个简单的过滤器,记录请求的开始时间和结束时间:

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*") // 过滤所有请求
public class LoggingFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化代码}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {long startTime = System.currentTimeMillis();// 继续处理请求chain.doFilter(request, response);long duration = System.currentTimeMillis() - startTime;System.out.println("Request processed in " + duration + " ms");}@Overridepublic void destroy() {// 清理资源}
}

3. 创建 Servlet

创建一个简单的 Servlet,返回一个欢迎消息:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;@WebServlet("/welcome")
public class WelcomeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<h1>Welcome to the Servlet Filter Example!</h1>");}
}

4. 配置 web.xml(可选)

如果不使用注解,可以在web.xml中配置过滤器和 Servlet:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><filter><filter-name>LoggingFilter</filter-name><filter-class>your.package.LoggingFilter</filter-class></filter><filter-mapping><filter-name>LoggingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>WelcomeServlet</servlet-name><servlet-class>your.package.WelcomeServlet</servlet-class></servlet><servlet-mapping><servlet-name>WelcomeServlet</servlet-name><url-pattern>/welcome</url-pattern></servlet-mapping></web-app>

5. 运行项目

  • 部署到支持 Servlet 的容器(如 Apache Tomcat)。
  • 访问http://localhost:8080/your-app/welcome,你应该会看到欢迎消息,并且在控制台中会打印请求处理的时间。

参考:ChatGPT

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

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

相关文章

网站f12代码怎么修改,掌握网站F12调试工具的使用技巧

打开F12开发者工具:在浏览器中打开您需要调试的网页,按下F12键或右键点击页面任意位置选择“检查”(Inspect),即可打开开发者工具。选择Elements面板:在开发者工具顶部的选项卡中,选择“Elements”面板。这里显示了当前页面的HTML结构。查找目标元素:使用鼠标悬停在页面…

织梦手机网站模板修改,如何在织梦CMS中修改手机网站模板

织梦CMS(DedeCMS)支持手机网站模板的自定义,通过以下步骤可以轻松修改手机网站模板:登录后台:打开浏览器,输入织梦CMS的后台地址,使用管理员账号登录。进入模板管理:在后台左侧菜单栏中选择“模板” -> “默认模板管理”。 选择“手机模板”选项卡,查看当前使用的手…

网站开源代码修改,如何在本地开发环境中修改网站开源代码

修改网站开源代码可以定制网站的功能和设计。以下是修改网站开源代码的步骤:克隆代码仓库:使用Git或其他版本控制工具克隆网站的开源代码仓库。 例如:git clone https://github.com/username/repository.git cd repository安装依赖:根据项目文档安装所需的依赖库。 例如,使…

Codeforces Round 985 div2 个人题解(A~E)

Codeforces Round 985 div2 个人题解(A~E) Dashboard - Codeforces Round 987 (Div. 2) - Codeforces 火车头 #include <bits/stdc++.h>using namespace std;#define ft first #define sd second#define yes cout << "yes\n" #define no cout << &…

CTF/9/pwnerTool,一个适用于CTF中自动对Pwn题目文件进行信息收集,并且生成基础做题py文件的Pwn工具

CTF中自动对Pwn题目文件进行信息收集,并且生成基础做题py文件的Pwn工具,适用于Ubuntu 随手写的,写的不好请轻喷. 一个用于ctf对Pwn题目文件进行信息收集,打包了检查文件类型、检查类型保护、新建py文件、寻找传参工具的过程。 同时可以修补题目给出的动态库和libc文件保证本…

Spacedrive :一款开源超高颜值功能强大的跨平台文件管理器

我们的文件越来越来越多,大量的文件分布在网盘,硬盘里面。即使电脑硬盘里面,也是分布在不同的地方,管理起来越来非常麻烦。 要是能够有一个软件,可以将网盘,硬盘和网络驱动器统一起来管理,将会是多么的方便。 今天就给大家推荐一个高颜值的文件管理软件——spacedrive,…

【shell脚本】监控IP频繁登录服务器脚本

该脚本的作用是监控IP登录失败次数,如果某个IP的登录失败次数超过设定的最大次数,则阻止该IP的进一步登录尝试。通过iptables防火墙阻止连接,当一个IP尝试登录次数超过5次时,iptables会阻止来自该IP的所有连接。 #!/bin/bashfunction secrity(){ # 设置要监控的登录失败次数…

[OtterCTF 2018]-内存取证-WP

看了很多大佬的博客,才发现他们的文章都会写摘要~~ 我就没写过哈哈(比较懒)。我的博客比较水,内容少而质量低,分类挺乱的,后面慢慢改善吧!写这篇主要是为了学习 vol2 的使用(八神推荐的嘿嘿),有不好的地方可以指点一下![OtterCTF 2018] WP [OtterCTF 2018] What the…

vm最小化安装centos

前期准备 VMware Workstation CentOS-7-x86_64-DVD-2009.iso http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/ 创建虚拟机默认下一步,选择稍后安装接着默认下一步,完成后编辑虚拟机设置镜像安装centos 选择第一个Install CentOS 7接着一路默认 配置静态ip 查看子网地…

《Django 5 By Example》阅读笔记:p105-p164

《Django 5 By Example》学习第5天,p105-p164总结,总计60页。 一、技术总结 1.文章标签功能 Django自带django-taggit。 2.自定义template tags 3.roadmap功能 4.RSS功能 5.full-text搜索功能 这里使用的是Postgresql,使用pip install psycopg安装后,执行“python manage.py…

11/15

好讨厌现在的自己 我的能量太低了 需要不断的慰藉 我喜欢逃避 野心家,思想家,我真的sb 没有成就感 绝望绝望绝望绝望绝望今天很drama,不想说什么了,难受,以后再写 明天计划C语言5题【今天少了一道】 下午去比赛 前端考核作业【1/2】可能睡觉睡少了,不开心?洗洗睡了

团队项目4——项目冲刺-4

每日站立式会议昨天已完成的工作: 杨睿:完善社区活动模块接口 个人中心模块接口木萨江:投诉反馈页面开发 管理员管理用户相关接口巴音才次克:物业报修相关接口李佳聪:检查车位信息的删查改接口是否符合需求今天计划完成的工作: 杨睿:完善管理页面 对接个人中心接口木萨江…