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对象。 对象包含了客户端请求信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统…...
Django与视图
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲视图 在web应用的MVC结构中,视图一般包含模板和表单,用来给浏览器生成响应。在实际处理过程当中,视图会根据请求的参数从数据源当中找到数据…...
RabbitMQ从入门到实战-2
文章目录 Java客户端快速入门WorkQueue(多消费)能者多劳配置 交换机fanout交换机案例 Direct交换机Topic交互机 声明队列和交互机(IDEA中)基于Bean声明队列和交换机基于注解声明(推) 消息转换器配置Json消息转换器 业务改造&#…...
【每日八股】计算机网络篇(四):HTTP
目录 HTTP 与 HTTPS 的区别?HTTPS 加密与认证的过程?ClientHelloServerHello客户端回应服务端回应 HTTPS 一定安全可靠吗?HTTPS 状态码的含义?HTTP 缓存有哪些实现方式?HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的区…...
Mac 配置 Maven JDK
不使用 Homebrew,创建指定版本 JDK 1、官网下载指定版本并安装……省略 2、vi ~/.zshrc 同时要检查 bash_profile 是否存在。 if [ -f ~/.bash_profile ] ; thensource ~/.bash_profile fiJAVA_HOME_11/Library/Java/JavaVirtualMachines/jdk-11.0.1…...
测试大语言模型在嵌入式设备部署的可能性-ollama本地部署测试
前言 当今各种大语言模型百花齐放,为了方便使用者更加自由的使用大模型,将大模型变成如同棒球棍一样每个人都能用,并且顺手方便的工具,本地私有化具有重要意义。 本次测试使用ollama完成模型下载,过程简单快捷。 1、进…...
Ubuntu通过Ollama部署deepseek和千问
一、准备文件 本地服务器是Ubuntu20.04,输入命令uname -a即可查看 部署方式有多样,点击Ollama访问官网 可复制命令直接粘贴下载,但是过程比较慢,所以我推荐下面这种方式 从githubReleases ollama/ollama GitHub上下载ollama的…...
责任链模式的C++实现示例
核心思想 责任链模式是一种行为设计模式,允许多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合。请求沿着处理链传递,直到某个对象处理它为止。 解决的问题 解耦请求发送者与处理者:请求的发送者无需知道具…...
微服务新手入门
一、微服务概念 微服务是一种软件架构风格,ta是以专注于单一职责的很多小型项目为基础,组合出复杂的大型应用。 微服务 - 服务拆分 - 远程调用 - 服务治理 - 请求路由 - 身份认证 - 配置管理 - 服务保护 - 分布式事务 - 异步通信 - 消息可靠性 - 延迟消…...
第十一届蓝桥杯单片机国赛
什么?4T模拟赛和省赛做起来轻轻松松?不妨来挑战一下第十一届国赛,这一届的国赛居然没考超声波、串口通信!只要你正确地理解了题目的意思,规避出题人挖的坑,拿个国一轻轻松松。 附件:第十一届蓝桥…...
【eNSP实战】MSTP与VRRP配合使用
拓扑图 要求: PC1划分在vlan10;PC2划分在vlan20;主机IP和网关如图所示,这里不做展示LSW1配置vlan10的根交换机,vlan20的备根交换机;LSW2配置vlan20的根交换机,vlan10的备根交换机LSW1配置vlan…...
【每日学点HarmonyOS Next知识】tab拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换
1、HarmonyOS Tab组件里的tabBar点击如何拦截,根据情况判断是否允许切换tab? Tab组件里的tabBar点击如何拦截,根据情况判断是否允许切换tab 暂时没有tabBar点击拦截功能实现,可以使用TabsController自定义页签以及并在其中添加事…...
UVC摄像头命令推流,推到rv1126里面去
ffmpeg命令查询UVC设备 .\ffmpeg.exe -list_devices true -f dshow -i dummy 上图是查询UVC设备的效果图,画红框的部分是UVC设备的设备名称"USB2.0 PC CAMERA"和设备号 "device_pnp_\\?\usb#vid_1908&pid_2310&mi_00#8&39abfe5&0&a…...
2025年主流原型工具测评:墨刀、Axure、Figma、Sketch
2025年主流原型工具测评:墨刀、Axure、Figma、Sketch 要说2025年国内产品经理使用的主流原型设计工具,当然是墨刀、Axure、Figma和Sketch了,但是很多刚入行的产品经理不了解自己适合哪些工具,本文将从核心优势、局限短板、协作能…...
es-索引详解
在 Elasticsearch 中,**索引(Index)**是核心概念之一,类似于关系型数据库中的“表”。索引用于存储、组织和检索文档(Document)。以下是关于 Elasticsearch 索引的详细解析: 1. 索引的基本概念 …...
SAP接口方式之HTTP请求发布Restful服务
SAP restful http 接口集中管理发布(SICF) 项目上有很多restful接口的需求,其中涉及到多个外围系统,就想着如何通过只发布一个服务,而不用通过Webservice,也不通过RFC方式,让个外围系统传入不同的报文,来决…...
Spark-TTS:基于大模型的文本语音合成工具
GitHub:https://github.com/SparkAudio/Spark-TTS Spark-TTS是一个先进的文本到语音系统,它利用大型语言模型(LLM)的强大功能进行高度准确和自然的语音合成;旨在高效、灵活、强大地用于研究和生产用途。 一、介绍 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详细操作步骤!—通过tar包方式 需要 root 权限,使用 root 用户进行命令操作。 1. 查看 CentOS 版本 cat /etc/redhat-release2. 安装rpm包,以8为例 打开 MySQL 官方 yum 仓库网站,获取与当前 CentOS …...
大白话 Vue 中的keep - alive组件,它的作用是什么?在什么场景下使用?
大白话 Vue 中的keep - alive组件,它的作用是什么?在什么场景下使用? 什么是 keep-alive 组件 在 Vue 里,keep-alive 是一个内置组件,它就像是一个“保存盒”,能把组件实例保存起来,而不是每次…...
当量子计算遇上互联网安全:挑战与革新之路
当量子计算遇上互联网安全:挑战与革新之路 量子计算,一个被誉为下一次科技革命的前沿技术,正在以惊人的速度发展。这项技术以其超越经典计算机的计算能力,为科学、医药和物流等领域带来了颠覆性变革。然而,对于互联网…...
Unity 封装一个依赖于MonoBehaviour的计时器(上) 基本功能
灵感来自下面这本书的协程部分,因此我就自己尝试写了一个 我的新书Unity3D游戏开发(第3版) | 雨松MOMO程序研究院 如果你不知道什么是协程:unity保姆级教程之协同程序_unity协同-CSDN博客 一句话概括:协程就是单线程的异步操作,其作用于Unity的主线程 1…...
使用Nodejs基于DeepSeek加chromadb实现RAG检索增强生成 本地知识库
定义 检索增强生成(RAG)的基本定义 检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种结合了信息检索技术与语言生成模型的人工智能技术。RAG通过从外部知识库中检索相关信息,并将其作为提示&…...
笔试刷题专题(一)
文章目录 最小花费爬楼梯(动态规划)题解代码 数组中两个字符串的最小距离(贪心(dp))题解代码 点击消除题解代码 最小花费爬楼梯(动态规划) 题目链接 题解 1. 状态表示࿱…...
LeetCode977有序数组的平方
思路①:先平方,后快排,输出(基准元素,左小右大) 时间复杂度:O(nlogn) 思路②:双指针左右开弓,首先原数组已经是按照非递减顺序排序,那…...
React.js 基础与进阶教程
React.js 基础与进阶教程 React.js 是由 Facebook 开发的流行前端 JavaScript 库,专为构建用户界面(UI)设计,尤其适用于单页面应用(SPA)。它采用组件化开发模式,使 UI 结构更加清晰、可维护性更…...
网络变压器的主要电性参数与测试方法(4)
Hqst盈盛(华强盛)电子导读:网络变压器的主要电性参数与测试方法(4).. 今天我们继续来看看网络变压器的2个重要电性参数与它的测试方法: 1.反射损耗(Return loss&…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-8.1.1基于ES的语义搜索(BERT嵌入向量)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 基于Elasticsearch与BERT的语义搜索架构设计与实战1. 传统搜索的局限性与语义搜索的崛起1.1 关键词搜索 vs 语义搜索1.2 Elasticsearch向量检索演进历程关键版本特性对比 2.…...
Windows10 WSL又又又一次崩了 Docker Desktop - Unexpected WSL error
问题:Windows10 WSL又又又一次崩了 这回报错: 然后再打开WSL Ubuntu就卡住了,等很长时间没反应,就关掉了。 手动启动Docker Desktop,报错: An unexpected error occurred while executing a WSL comman…...
XMI(XML Metadata Interchange)和XML之间的关系
XMI(XML Metadata Interchange)和XML之间的关系可以从以下几个方面进行阐述: 一、定义与背景 XML: XML(eXtensible Markup Language)是一种标记语言,被设计用来传输和存储数据。它是一种自描述…...
