JavaWeb-servlet6中request和response的使用

news2025/3/13 18:24:15
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 {
    @Override
    public 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流向客户端浏览器输出"中国"这两个汉字
@Override
    public 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 {
    @Override
    public 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 {
    @Override
    public 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);
}

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

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

相关文章

Django与视图

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

RabbitMQ从入门到实战-2

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

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的…

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

什么&#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…

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 …

使用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;那…

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

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

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…

【前端基础】:HTML

超链接标签: a href: 必须具备, 表示点击后会跳转到哪个页面. target: 打开方式. 默认是 _self. 如果是 _blank 则用新的标签页打开 <a href"http://www.baidu.com">百度</a>链接的几种形式: 外部链接: href 引用其他网站的地址 <a href"http…