Filter过滤器及HttpServletRequest和HttpServletResponse

拦截器(Interceptor)和过滤器(Filter)的执行顺序

  • tomcat->Filter->Interceptor->Controller

过滤器(Filter)概述?

Filter过滤器是JavaWeb的三大组件之一,三大组件分别为:Servlet程序、Listener监听器、Filter过滤器。
过滤器(Filter)可以在请求到达Servlet之前或响应离开Servlet之前对请求和响应进行过滤和修改。


Filter的生命周期

Filter的生命周期可分为初始化、请求处理、销毁三个阶段。

1.创建阶段:Web服务器启动的时候会创建Filter实例对象,并调用init()方法(只调用一次!!可以进行读取配置文件,建进行数据库连接等操作),完成对象的初始化。

2.执行阶段:当客户端请求目标资源时,服务器会筛选出符合映射条件的Filter,并按照类名的的先后顺序依次执行doFilter() 方法(可对请求进行预处理、检查请求头、修改请求参数、修改相应数据等操作)。

3.销毁阶段:服务器关闭时,Web服务器调用destroy()方法(只调用一次!!可以进行释放资源、关闭数据库连接等操作)销毁Filter对象。


使用方法

@Component
public class MyFilterOne implements Filter {/*** filter对象只创建一次,init方法只执行一次* FilterConfig对象:代表当前filter配置信息*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}/*** 完成实际过滤操作,当客户请求访问与过滤器相关联的URL的时候,Servlet过滤器将先执行doFilter方法,FilterChain参数用于访问后续过滤器*/@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {filterChain.doFilter(servletRequest,servletResponse);}/*** filter创建后会保存在内存中,当web应用移除或者服务器停止时才销毁,该方法在Filter的生命周期中仅执行一次,可释放过滤器使用的资源*/@Overridepublic void destroy() {}
}

HttpServletRequest和HttpServletResponse

HttpServletRequest

HttpServletRequest是ServletRequest的子接口,ServletRequest是通用接口,里面定义了与HTTP请求相关方法,包括获取请求参数、请求方法、请求头等。HttpServletRequest接口在ServletRequest的基础上,增加了一些专门处理HTTP请求的方法。

例如,客户端请求的地址是:http://www.xuexi.com/demo/test?name=luxifa&&age=25

HttpServletRequest对象的常用方法

  • getHeader(string name)方法:根据header参数名称获取值
  • getHeaderNames()方法:获取header里面的参数名称
  • getParameterMap()方法:获取请求参数对应的map
  • getParameter(name)方法:根据请求参数的名称获取对应的值
  • getParameterNames():获取所有请求参数的名称的枚举
  • getParameterValues(String name):获取指定名称的请求参数的所有值
  • getRemoteAddr()方法:获取客户端的IP地址
  • getScheme()方法:获取正确的协议,如http协议
  • getServerName()方法:服务器主机名
  • getServerPort()方法:服务器上web应用的访问端口
  • getContextPath()方法:获取域名后的斜杆加工程名,即/demo部分
  • getRemoteAddr()方法:发送请求的客户端主机的IP
  • getRequestURI()方法:将URL的域名和尾随的参数截取掉,剩下的那部分就是URI,即/demo/test
  • getRequestURL()方法:客户请求的url,不包括参数数据;例如http://www.xuexi.com/demo/test
  • getMethod()方法:HTTP请求的的方法名,默认是GET,也可指定PUT或POST
  • getRealPath(“/WEB-INF”)方法:获取虚拟目录的硬盘实际路径
  • getSession():获取与请求关联的会话对象
  • getCookies():获取请求中的所有Cookie
  • getInputStream():获取请求的输入流,用于读取请求体的内容

HttpServletRequest由Servlet容器在每次接收到HTTP请求时创建,开发者无需手动创建。在Servlet的doGet()、doPost()等方法中,可以通过方法的HttpServletRequest参数获取请求的相关信息


HttpServletResponse

HttpServletResponse用来封装HTTP响应的信息和操作。HttpServletResponse是ServletResponse的子接口,ServletResponse可用于处理任何类型响应,可进行获取输出流、设置相应的内容类型等操作。HttpServletResponse专门用来处理HTTP类型的响应。

一般,使用HttpServletResponse处理HTTP请求响应,使用HttpServletResponse处理其他协议的响应或自定义响应。

HttpServletResponse对象常用功能:

  • 设置响应头
  • 设置响应状态码
  • 设置响应内容类型
  • 获取写字符流
  • 获取输出流
  • 设置重定向
  • 设置响应缓存
  • 设置错误页面
  • 设置Cookie
HttpServletResponse  response;

设置响应头

  • 可使用setHeader()方法设置响应头,设置的响应头最终会发送给客户端浏览器。
  • response.setHeader(“content-type”,
    “text/html;charset=utf-8”):设置content-type响应头,告诉浏览器响应内容为html类型,编码为utf-8。
  • 还可response.setContentType(“application/json; charset=utf-8”);
  • 设置response字符流编码为utf-8:response.setCharaceterEncoding(“utf-8”);
  • addheader(name,value):添加头信息。键可以重复

设置响应状态码

  • response.setContentType(“text/html;charset=utf-8”):等同于response.setHeader(“content-type”,
    “text/html;charset=utf-8”);
  • response.setCharacterEncoding(“utf-8”):设置字符响应流的字符编码为utf-8;
  • response.setStatus(200):设置状态码;
  • response.sendError(404,“资源不存在”):当发送错误状态码时,Tomcat会跳转到固定的错误页面,但可以显示错误信息。

设置响应内容类型

  • response.setContentType(“application/json; charset=utf-8”); 响应内容类型为json数据
  • response.setContentType(“text/html; charset=utf-8”); 响应内容类型为HTML文档

获取写字符流

  • PrintWriter out = response.getWriter();调用out 的write()方法可写数据

获取输出流

  • ServletOutputStream out = response.getOutputStream()

如果响应正文内容为字符,使用response.getWriter(),如果响应内容是字节,例如下载,则使用response.getOutputStream()。
在一个请求中,不能同时使用这两个流!要么你使用repsonse.getWriter(),要么使用response.getOutputStream(),但不能同时使用,否则会抛IllegalStateException异常。

设置重定向

  • 假设访问http://www.a.com时,浏览器地址栏中的URL变成http://www.b.com,这就是重定向即重定向是服务器通知浏览器去访问另一个地址,即再发出另一个请求。
  • 使用sendRedirect()方法

设置响应缓存

  • 可用setDateHeader()、setIntHeader()和addDateHeader()等方法设置响应的缓存控制信息,如缓存验证、设置过期时间等。

设置错误页面

  • sendError()方法可将请求重定向到指定的错误页面。

设置Cookie

  • Cookie newCookie=new Cookie(String name,String value);然后调用addCookie()方法

参考博客:
https://blog.csdn.net/Go_Joe/article/details/128535136
https://blog.csdn.net/hanziang1996/article/details/78967400
https://blog.csdn.net/baidu_32935221/article/details/130160185
https://blog.csdn.net/m0_37834446/article/details/81385843
https://blog.csdn.net/u013089490/article/details/83654899

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

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

相关文章

虚拟化和容器

文章目录 1 介绍1.1 简介1.2 虚拟化工作原理1.3 两大核心组件:QEMU、KVMQEMUKVM 1.4 发展历史1.5 虚拟化类型1.6 云计算与虚拟化1.7 HypervisorHypervisor分为两大类 1.8 虚拟化 VS 容器 2 虚拟化应用dockerdocker 与虚拟机的区别 K8Swine 参考 1 介绍 1.1 简介 虚…

springBoot对接Apache POI 实现excel下载和上传

搭建springboot项目 此处可以参考 搭建最简单的SpringBoot项目_Steven-Russell的博客-CSDN博客 配置Apache POI 依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.2</version> </…

轻量高效、灵活可扩展!了解下Alibaba QLExpress规则引擎的魅力

文章首发地址 QLExpress是一个基于Java语言的轻量级、高性能的规则引擎。它提供了一种简洁、灵活的方式来编写和执行规则&#xff0c;可以用于实现复杂的业务逻辑和决策过程。以下是QLExpress的一些特性和功能&#xff1a; 简洁易用&#xff1a; QLExpress采用类似于SQL的语法…

FastChat工作原理解析

在了解FastChat如何完成大模型部署前&#xff0c;先了解下Huggingface提供的Transformer库。Hugggingface提供的Transformer库 Hugging Face 的 Transformers 库是一个用于自然语言处理&#xff08;NLP&#xff09;任务的 Python 库&#xff0c;旨在简化和加速使用预训练语言模…

手写Spring:第5章-注入属性和依赖对象

文章目录 一、目标&#xff1a;注入属性和依赖对象二、设计&#xff1a;注入属性和依赖对象三、实现&#xff1a;注入属性和依赖对象3.0 引入依赖3.1 工程结构3.2 注入属性和依赖对象类图3.3 定义属性值和属性集合3.3.1 定义属性值3.3.2 定义属性集合 3.4 Bean定义补全3.5 Bean…

android 注解详解

1&#xff0c;注解的概念 注解现在广泛的应用于android的各个开源框架中&#xff0c;不理解注解&#xff0c;我们就无法更好的提升我们的架构能力。那么什么是注解呢&#xff1f;注解&#xff08;Annotation&#xff09;&#xff0c;是JDK5.0 引入的一种注释机制。 注解是元数…

go的iris框架进行本地资源映射到服务端

我这里使用的是HandleDirapi,有其他的请补充 package mainimport ("github.com/kataras/iris/v12" )type Hello struct{Status int json:"status"Message string json:"message" }func main(){app : iris.New()//第一个api:相当于首页app.Get(&q…

飞猪店铺小管家软件需求分析说明书

飞猪店铺小管家软件 项目背景&#xff1a; 在飞猪店铺运营过程中&#xff0c;客服人数不足导致客服团队忙不过来&#xff0c;容易出现订票信息错误&#xff0c;进而客户无法顺利参观景点&#xff0c;频繁投诉。这种情况不仅影响客户体验&#xff0c;还可能导致商家因赔付而承受…

出行类APP商业化路径解决方案

当下市场主流的商业化路径和方法相比于之前区别不大&#xff0c;开发者们都是在现有商业化体系下&#xff0c;制定更加详细、优质的策略&#xff0c;以期获得更高利益。 出行类App用户结构分析 年龄层次&#xff1a;出行类App用户的年龄分布比较广泛&#xff0c;主要集中在20…

苹果电脑版虚拟机推荐 VMware Fusion Pro for mac(vm虚拟机)

VMware Fusion Pro是一款功能强大的虚拟化软件&#xff0c;专为Mac用户设计。它允许用户在Mac上创建、运行和管理虚拟机&#xff0c;以便同时运行多个操作系统和应用程序。 以下是VMware Fusion Pro的一些主要特点和功能&#xff1a; 1. 多操作系统支持&#xff1a;VMware Fu…

MySQL--数据库基础

数据库分类 数据库大体可以分为 关系型数据库 和 非关系型数据库 常用数据类型 数值类型&#xff1a; 分为整型和浮点型&#xff1a; 字符串类型 日期类型

试图替代 Python 的下一代AI编程语言:Mojo

文章目录 为什么叫 Mojo &#xff1f;Python 家族的一员&#xff0c;MojoPython 的好处&#xff1a;Python 兼容性Python 的问题移动和服务器部署&#xff1a;Python 子集和其他类似 Python 的语言&#xff1a; Mojo 是一种创新的编程语言&#xff0c;结合了 Python 的可用性和…

tomcat 安装成服务

前言 win10tomcat 9x tomcat 安装成服务 cmd> d:\apache-tomcat-9.0.68\bin\service.bat install 此时&#xff0c;服务名称为默认 cmd> d:\apache-tomcat-9.0.68\bin\service.bat install Tomcat9-ZuChe-App此时&#xff0c;服务名称为 Tomcat9-ZuChe-App tomcat 服…

组件以及组件间的通讯

组件 & 组件通讯 :::warning 注意 阅读本文章之前&#xff0c;你应该先要了解 ESM 模块化的 import export&#xff0c;如需要请查看 ESM 模块化。 ::: 上一篇有介绍到什么是组件化&#xff0c;就是把一个页面拆分成若干个小模块&#xff0c;然后重新组成一个页面。其中的…

数据库三范式

文章目录 前言一、 什么是三范式&#xff1f;1. 第一范式&#xff08;1NF&#xff09;回顾&#xff1a;2. 第二范式&#xff08;2NF&#xff09;回顾&#xff1a;3. 第三范式&#xff08;3NF&#xff09;&#xff1a; 二、为什么需要第三范式&#xff1f;1、 举例说明&#xff…

BL110设备支持Modbus TCP协议接入

随着物联网技术的不断发展&#xff0c;越来越多的工业设备被连接到云平台上&#xff0c;以实现远程监控和管理。在这篇文章中&#xff0c;我们将介绍如何方便用户快速把多种工业设备接入几个主流的云平台&#xff0c;如华为云 IoT、AWS IoT、阿里云 IoT、ThingsBoard、金鸽云等…

利用cookie实现记住密码功能

登陆界面&#xff1a;login.jsp form表单 <form action"dologin.jsp" method"post" > 用户名:<input type"text" name"uname"/> <br/> 密码&#xff1a;<input type"password&quo…

基于 Transformation-Equivariant 的自动驾驶 3D 目标检测

论文地址&#xff1a;https://arxiv.org/abs/2211.11962 论文代码&#xff1a;https://github.com/hailanyi/TED 论文背景 三维场景中的物体分布有不同的方向。普通探测器不明确地模拟旋转和反射变换的变化。需要大的网络和广泛的数据增强来进行鲁棒检测。 equivariant netw…

项目01—基于nignx+keepalived双vip的负载均衡高可用Web集群

文章目录 一.项目介绍1.拓扑图2.详细介绍 二.前期准备1.项目环境2.IP划分 三. 项目步骤1.ansible部署软件环境1.1 安装ansible环境1.2 建立免密通道1.3 批量部署nginx 2.配置NFS服务器和负载均衡器搭建keepalived2.1 修改nginx的index.html界面2.2 nginx实现七层负载均衡2.4 使…

《C++设计模式》——创建型

前言 创建型为了创建东西才是有用的&#xff0c;创建型设计模式使用的场景&#xff1a; 1、创建一个东西&#xff1b; 2、可重复利用&#xff1b; 3、灵活性高&#xff0c;代码可因地制宜。 Factory Method(工厂模式) 工厂模式将目的将创建对象的具体过程屏蔽隔离起来&#…