当前位置: 首页 > article >正文

JavaWeb-servlet6中request和response的使用

HttpServletRequest

HttpServletRequest 继承自 ServletRequest。客户端浏览器发出的请求被封装成为一个 HttpServletRequest对象。
对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。

获得客户机信息
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String requestUrl = request.getRequestURL().toString();// 得到请求的URL地址String requestUri = request.getRequestURI();// 得到请求的资源String queryString = request.getQueryString();// 得到请求的URL地址中附带的参数String remoteAddr = request.getRemoteAddr();// 得到来访者的IP地址int remotePort = request.getRemotePort(); // 得到来访者的端口String method = request.getMethod();// 得到请求URL地址时使用的http方式String localAddr = request.getLocalAddr();// 获取WEB服务器的IP地址String localName = request.getLocalName();// 获取WEB服务器的主机名response.setCharacterEncoding("UTF-8");// 设置将字符以"UTF-8"编码输出到客户端浏览器// 通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码response.setHeader("content-type", "text/html;charset=UTF-8");PrintWriter out = response.getWriter();out.write("获取到的客户机信息如下:");out.write("<hr/>");out.write("请求的URL地址:" + requestUrl + "<br/>");out.write("请求的资源:" + requestUri + "<br/>");out.write("请求的URL地址中附带的参数:" + queryString + "<br/>");out.write("来访者的IP地址:" + remoteAddr + "<br/>");out.write("使用的端口号:" + remotePort + "<br/>");out.write("使用的http方式:" + method + "<br/>");out.write("localAddr:" + localAddr + "<br/>");out.write("localName:" + localName + "<br/>");out.close();}
获得客户机请求头
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setCharacterEncoding("UTF-8");// 设置将字符以"UTF-8"编码输出到客户端浏览器// 通过设置响应头控制浏览器以UTF-8的编码显示数据response.setHeader("content-type", "text/html;charset=UTF-8");PrintWriter out = response.getWriter();Enumeration<String> reqHeadInfos = request.getHeaderNames();// 获取所有的请求头out.write("获取到的客户端所有的请求头信息如下:");out.write("<hr/>");while (reqHeadInfos.hasMoreElements()) {String headName = (String) reqHeadInfos.nextElement();// 根据请求头的名字获取对应的请求头的值String headValue = request.getHeader(headName);out.write(headName + ":" + headValue);out.write("<br/>");}out.write("<br/>");out.write("获取到的客户端Accept-Encoding请求头的值:");out.write("<hr/>");String value = request.getHeader("Accept-Encoding");// 获取Accept-Encoding请求头对应的值out.write(value);Enumeration<String> e = request.getHeaders("Accept-Encoding");while (e.hasMoreElements()) {String string = (String) e.nextElement();System.out.println(string);}}
使用 getParameter() 和 getParameterValues() 接收表单参数
@WebServlet(name = "save", urlPatterns = "/save")
public class FormServlet extends HttpServlet {@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 客户端是以UTF-8编码提交表单数据的,所以需要设置服务器端以UTF-8的编码进行接收,否则对于中文数据就会产生乱码request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");String password = request.getParameter("password");String[] insts = request.getParameterValues("inst");String instStr = Arrays.toString(insts);String htmlStr = "<p>用户名:" + username + "</p>"+ "<p>密码:" + password + "</p>"+ "<p>爱好:" + instStr + "</p>";// 设置服务器端以UTF-8编码输出数据到客户端response.setCharacterEncoding("UTF-8");// 设置客户端浏览器以UTF-8编码解析数据response.setContentType("text/html;charset=UTF-8");// 输出htmlStr里面的内容到客户端浏览器显示response.getWriter().write(htmlStr);}
}
request中文参数乱码

以POST方式提交表单中文参数的乱码问题
客户端是以UTF-8编码传输数据到服务器端的,所以需要设置服务器端以UTF-8的编码进行接收,否则对于中文数据就会产生乱码。具体如下:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{request.setCharacterEncoding(UTF-8); //解决post提交服务端乱码String userName = request.getParameter("userName");}

以GET方式提交表单中文参数的乱码问题
对于以get方式传输的数据,request即使设置了以指定的编码接收数据也是无效的,默认的还是使用ISO8859-1这个字符编码来接收数据

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{String name = request.getParameter("name");//接收数据name =new String(name.getBytes(), "UTF-8") ;
}
HttpServletResponse

HttpServletResponse 接口继承自 ServletResponse 接口,主要用于封装 HTTP 响应消息。由于 HTTP 响应消息分为状态行、响应消息头、消息体三部分。因此,在 HttpServletResponse 接口中定义了向客户端发送响应状态码、响应消息头、响应消息体的方法。

Response主要的作用有以下几点:
负责向客户端(浏览器)发送数据
负责向客户端(浏览器)发送响应头
负责向客户端(浏览器)发送响应状态码
封装响应状态码的常量

使用OutputStream流向客户端浏览器输出"中国"这两个汉字
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String data = "中国";// 获取OutputStream输出流OutputStream outputStream = response.getOutputStream();// 通过设置响应头控制浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码response.setHeader("content-type", "text/html;charset=UTF-8");// 将字符转换成字节数组,指定以UTF-8编码进行转换byte[] array = data.getBytes("UTF-8");// 使用OutputStream流向客户端输出字节数组outputStream.write(array);}
使用PrintWriter流向客户端浏览器输出"中国"这两个汉字
@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String data = "中国";response.setCharacterEncoding("UTF-8");// 设置将字符以"UTF-8"编码输出到客户端浏览器PrintWriter out = response.getWriter();// 获取PrintWriter输出流out.write(data);// 使用PrintWriter流向客户端输出字符out.close();}
ServletContext对象

ServletContext 又叫做 Servlet 上下文。

当Web服务器启动时,容器会为每一个Web应用程序创建一块共享的存储区域。ServletContext也叫做“公共区域”,也就是同一个WEB应用程序中,所有的Servlet和JSP都可以共享同一个区域。

ServletContext在WEB服务器启动时创建,服务器关闭时销毁。

Servlet对象中维护了 ServletContext 对象的引用,开发人员在编写servlet时,可以通过this.getServletContext() 方法获得 ServletContext 对象。

由于一个 Web 应用中的所有 Servlet 共享同一个 ServletContext 对象,因此 Servlet 对象之间可以通过ServletContext 对象来实现通讯。ServletContext 对象通常也被称之为 context 域对象。

ServletContext 数据共享

创建两个servlet类Servlet1.java和Servlet2.java。Servlet1将数据存储到ServletContext对象中,Servlet2从ServletContext对象中取出数据,从而实现数据共享。

@WebServlet(name = "servlet1", urlPatterns = "/servlet1")
public class Servlet1 extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {String company = "isoftstone";ServletContext context = this.getServletConfig().getServletContext();// 获得ServletContext对象context.setAttribute("company", company); // 将data存储到ServletContext对象中}
}
@WebServlet(name = "servlet2", urlPatterns = "/servlet2")
public class Servlet2 extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {ServletContext context = this.getServletContext();String company = (String) context.getAttribute("company");// 从ServletContext对象中取出数据response.getWriter().print("company = " + company);}
}
ServletContext 初始化参数

1、在web.xml中加入初始化参数:

<context-param><param-name>url</param-name><param-value>jdbc:mysql://localhost:3306/test</param-value>
</context-param>

2、在Servlet类中调用该参数:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {ServletContext context = this.getServletContext();// 获取整个web站点的初始化参数String contextInitParam = context.getInitParameter("url");response.getWriter().print(contextInitParam);
}

相关文章:

JavaWeb-servlet6中request和response的使用

HttpServletRequest HttpServletRequest 继承自 ServletRequest。客户端浏览器发出的请求被封装成为一个 HttpServletRequest对象。 对象包含了客户端请求信息包括请求的地址&#xff0c;请求的参数&#xff0c;提交的数据&#xff0c;上传的文件客户端的ip甚至客户端操作系统…...

Django与视图

我叫补三补四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲视图 在web应用的MVC结构中&#xff0c;视图一般包含模板和表单&#xff0c;用来给浏览器生成响应。在实际处理过程当中&#xff0c;视图会根据请求的参数从数据源当中找到数据&#xf…...

RabbitMQ从入门到实战-2

文章目录 Java客户端快速入门WorkQueue(多消费)能者多劳配置 交换机fanout交换机案例 Direct交换机Topic交互机 声明队列和交互机&#xff08;IDEA中&#xff09;基于Bean声明队列和交换机基于注解声明&#xff08;推&#xff09; 消息转换器配置Json消息转换器 业务改造&#…...

【每日八股】计算机网络篇(四):HTTP

目录 HTTP 与 HTTPS 的区别&#xff1f;HTTPS 加密与认证的过程&#xff1f;ClientHelloServerHello客户端回应服务端回应 HTTPS 一定安全可靠吗&#xff1f;HTTPS 状态码的含义&#xff1f;HTTP 缓存有哪些实现方式&#xff1f;HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的区…...

Mac 配置 Maven JDK

不使用 Homebrew&#xff0c;创建指定版本 JDK 1、官网下载指定版本并安装……省略 2、vi &#xff5e;/.zshrc 同时要检查 bash_profile 是否存在。 if [ -f ~/.bash_profile ] ; thensource ~/.bash_profile fiJAVA_HOME_11/Library/Java/JavaVirtualMachines/jdk-11.0.1…...

测试大语言模型在嵌入式设备部署的可能性-ollama本地部署测试

前言 当今各种大语言模型百花齐放&#xff0c;为了方便使用者更加自由的使用大模型&#xff0c;将大模型变成如同棒球棍一样每个人都能用&#xff0c;并且顺手方便的工具&#xff0c;本地私有化具有重要意义。 本次测试使用ollama完成模型下载&#xff0c;过程简单快捷。 1、进…...

Ubuntu通过Ollama部署deepseek和千问

一、准备文件 本地服务器是Ubuntu20.04&#xff0c;输入命令uname -a即可查看 部署方式有多样&#xff0c;点击Ollama访问官网 可复制命令直接粘贴下载&#xff0c;但是过程比较慢&#xff0c;所以我推荐下面这种方式 从githubReleases ollama/ollama GitHub上下载ollama的…...

责任链模式的C++实现示例

核心思想 责任链模式是一种行为设计模式&#xff0c;允许多个对象都有机会处理请求&#xff0c;从而避免请求的发送者与接收者之间的耦合。请求沿着处理链传递&#xff0c;直到某个对象处理它为止。 解决的问题 ​解耦请求发送者与处理者&#xff1a;请求的发送者无需知道具…...

微服务新手入门

一、微服务概念 微服务是一种软件架构风格&#xff0c;ta是以专注于单一职责的很多小型项目为基础&#xff0c;组合出复杂的大型应用。 微服务 - 服务拆分 - 远程调用 - 服务治理 - 请求路由 - 身份认证 - 配置管理 - 服务保护 - 分布式事务 - 异步通信 - 消息可靠性 - 延迟消…...

第十一届蓝桥杯单片机国赛

什么&#xff1f;4T模拟赛和省赛做起来轻轻松松&#xff1f;不妨来挑战一下第十一届国赛&#xff0c;这一届的国赛居然没考超声波、串口通信&#xff01;只要你正确地理解了题目的意思&#xff0c;规避出题人挖的坑&#xff0c;拿个国一轻轻松松。 附件&#xff1a;第十一届蓝桥…...

【eNSP实战】MSTP与VRRP配合使用

拓扑图 要求&#xff1a; PC1划分在vlan10&#xff1b;PC2划分在vlan20&#xff1b;主机IP和网关如图所示&#xff0c;这里不做展示LSW1配置vlan10的根交换机&#xff0c;vlan20的备根交换机&#xff1b;LSW2配置vlan20的根交换机&#xff0c;vlan10的备根交换机LSW1配置vlan…...

【每日学点HarmonyOS Next知识】tab拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换

1、HarmonyOS Tab组件里的tabBar点击如何拦截&#xff0c;根据情况判断是否允许切换tab&#xff1f; Tab组件里的tabBar点击如何拦截&#xff0c;根据情况判断是否允许切换tab 暂时没有tabBar点击拦截功能实现&#xff0c;可以使用TabsController自定义页签以及并在其中添加事…...

UVC摄像头命令推流,推到rv1126里面去

ffmpeg命令查询UVC设备 .\ffmpeg.exe -list_devices true -f dshow -i dummy 上图是查询UVC设备的效果图&#xff0c;画红框的部分是UVC设备的设备名称"USB2.0 PC CAMERA"和设备号 "device_pnp_\\?\usb#vid_1908&pid_2310&mi_00#8&39abfe5&0&a…...

2025年主流原型工具测评:墨刀、Axure、Figma、Sketch

2025年主流原型工具测评&#xff1a;墨刀、Axure、Figma、Sketch 要说2025年国内产品经理使用的主流原型设计工具&#xff0c;当然是墨刀、Axure、Figma和Sketch了&#xff0c;但是很多刚入行的产品经理不了解自己适合哪些工具&#xff0c;本文将从核心优势、局限短板、协作能…...

es-索引详解

在 Elasticsearch 中&#xff0c;**索引&#xff08;Index&#xff09;**是核心概念之一&#xff0c;类似于关系型数据库中的“表”。索引用于存储、组织和检索文档&#xff08;Document&#xff09;。以下是关于 Elasticsearch 索引的详细解析&#xff1a; 1. 索引的基本概念 …...

SAP接口方式之HTTP请求发布Restful服务

SAP restful http 接口集中管理发布(SICF) 项目上有很多restful接口的需求&#xff0c;其中涉及到多个外围系统&#xff0c;就想着如何通过只发布一个服务&#xff0c;而不用通过Webservice&#xff0c;也不通过RFC方式&#xff0c;让个外围系统传入不同的报文&#xff0c;来决…...

Spark-TTS:基于大模型的文本语音合成工具

GitHub&#xff1a;https://github.com/SparkAudio/Spark-TTS Spark-TTS是一个先进的文本到语音系统&#xff0c;它利用大型语言模型&#xff08;LLM&#xff09;的强大功能进行高度准确和自然的语音合成&#xff1b;旨在高效、灵活、强大地用于研究和生产用途。 一、介绍 Sp…...

Netty基础—3.基础网络协议一

大纲 1.网络基础的相关问题总结 2.七层模型和四层模型 3.物理层(网线 光缆 01电信号) 4.数据链路层(以太网协议 网卡mac地址) 5.网络层(IP协议 子网划分 路由器) 6.传输层(TCP和UDP协议 Socket 端口) 7.应用层(HTTP协议 SMTP协议) 8.浏览器请求一个域名会发生什…...

【mysql】centOS7安装mysql详细操作步骤!

【mysql】centOS7安装mysql详细操作步骤&#xff01;—通过tar包方式 需要 root 权限&#xff0c;使用 root 用户进行命令操作。 1. 查看 CentOS 版本 cat /etc/redhat-release2. 安装rpm包&#xff0c;以8为例 打开 MySQL 官方 yum 仓库网站&#xff0c;获取与当前 CentOS …...

大白话 Vue 中的keep - alive组件,它的作用是什么?在什么场景下使用?

大白话 Vue 中的keep - alive组件&#xff0c;它的作用是什么&#xff1f;在什么场景下使用&#xff1f; 什么是 keep-alive 组件 在 Vue 里&#xff0c;keep-alive 是一个内置组件&#xff0c;它就像是一个“保存盒”&#xff0c;能把组件实例保存起来&#xff0c;而不是每次…...

当量子计算遇上互联网安全:挑战与革新之路

当量子计算遇上互联网安全&#xff1a;挑战与革新之路 量子计算&#xff0c;一个被誉为下一次科技革命的前沿技术&#xff0c;正在以惊人的速度发展。这项技术以其超越经典计算机的计算能力&#xff0c;为科学、医药和物流等领域带来了颠覆性变革。然而&#xff0c;对于互联网…...

Unity 封装一个依赖于MonoBehaviour的计时器(上) 基本功能

灵感来自下面这本书的协程部分,因此我就自己尝试写了一个 我的新书Unity3D游戏开发&#xff08;第3版&#xff09; | 雨松MOMO程序研究院 如果你不知道什么是协程:unity保姆级教程之协同程序_unity协同-CSDN博客 一句话概括:协程就是单线程的异步操作,其作用于Unity的主线程 1…...

使用Nodejs基于DeepSeek加chromadb实现RAG检索增强生成 本地知识库

定义 检索增强生成&#xff08;RAG&#xff09;的基本定义 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;简称RAG&#xff09;是一种结合了信息检索技术与语言生成模型的人工智能技术。RAG通过从外部知识库中检索相关信息&#xff0c;并将其作为提示&…...

笔试刷题专题(一)

文章目录 最小花费爬楼梯&#xff08;动态规划&#xff09;题解代码 数组中两个字符串的最小距离&#xff08;贪心&#xff08;dp&#xff09;&#xff09;题解代码 点击消除题解代码 最小花费爬楼梯&#xff08;动态规划&#xff09; 题目链接 题解 1. 状态表示&#xff1…...

LeetCode977有序数组的平方

思路①&#xff1a;先平方&#xff0c;后快排&#xff0c;输出&#xff08;基准元素&#xff0c;左小右大&#xff09; 时间复杂度&#xff1a;O&#xff08;nlogn&#xff09; 思路②&#xff1a;双指针左右开弓&#xff0c;首先原数组已经是按照非递减顺序排序&#xff0c;那…...

React.js 基础与进阶教程

React.js 基础与进阶教程 React.js 是由 Facebook 开发的流行前端 JavaScript 库&#xff0c;专为构建用户界面&#xff08;UI&#xff09;设计&#xff0c;尤其适用于单页面应用&#xff08;SPA&#xff09;。它采用组件化开发模式&#xff0c;使 UI 结构更加清晰、可维护性更…...

网络变压器的主要电性参数与测试方法(4)

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;网络变压器的主要电性参数与测试方法&#xff08;4&#xff09;.. 今天我们继续来看看网络变压器的2个重要电性参数与它的测试方法&#xff1a; 1.反射损耗&#xff08;Return loss&…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-8.1.1基于ES的语义搜索(BERT嵌入向量)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 基于Elasticsearch与BERT的语义搜索架构设计与实战1. 传统搜索的局限性与语义搜索的崛起1.1 关键词搜索 vs 语义搜索1.2 Elasticsearch向量检索演进历程关键版本特性对比 2.…...

Windows10 WSL又又又一次崩了 Docker Desktop - Unexpected WSL error

问题&#xff1a;Windows10 WSL又又又一次崩了 这回报错&#xff1a; 然后再打开WSL Ubuntu就卡住了&#xff0c;等很长时间没反应&#xff0c;就关掉了。 手动启动Docker Desktop&#xff0c;报错&#xff1a; An unexpected error occurred while executing a WSL comman…...

XMI(XML Metadata Interchange)和XML之间的关系

XMI&#xff08;XML Metadata Interchange&#xff09;和XML之间的关系可以从以下几个方面进行阐述&#xff1a; 一、定义与背景 XML&#xff1a; XML&#xff08;eXtensible Markup Language&#xff09;是一种标记语言&#xff0c;被设计用来传输和存储数据。它是一种自描述…...