返回顶部
首页 > 资讯 > 后端开发 > JAVA >HttpServletRequest核心方法以及获取请求参数
  • 472
分享到

HttpServletRequest核心方法以及获取请求参数

tomcatservletjava 2023-08-21 14:08:25 472人浏览 泡泡鱼
摘要

一. 展示httpservletRequest中一些重要方法 当Tomcat 通过 Socket api 读取 Http 请求(字符串), 并且按照 HTTP 协议的格式把字符串解析成HttpServletRequest 对象. 创建一个S

一. 展示httpservletRequest中一些重要方法

Tomcat 通过 Socket api 读取 Http 请求(字符串), 并且按照 HTTP 协议的格式把字符串解析成HttpServletRequest 对象.

创建一个ShowRequest类

@WEBServlet("/ShowRequest")public class ShowRequest extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {            StringBuilder stringBuilder = new StringBuilder();        // 返回请求协议的名称和版本号        stringBuilder.append(req.getProtocol()); // 协议名称: HTTP  版本号: 1.1        stringBuilder.append("\n");//        stringBuilder.append("
");
// 放回请求的HTTP方法名称 stringBuilder.append(req.getMethod()); // GET stringBuilder.append("\n");// stringBuilder.append("
");
// 从协议名称知道HTTP请求的第一行的查询字符串中, 返回该请求的URL的一部分 stringBuilder.append(req.getRequestURI()); // /3010/ShowRequest stringBuilder.append("\n");// stringBuilder.append("
");
stringBuilder.append(req.getRequestURL()); // 返回整个地址 http://127.0.0.1:8080/0310/ShowRequest// stringBuilder.append("
");
stringBuilder.append("\n"); // 返回指示请求上下文的请求URI部分 stringBuilder.append(req.getContextPath()); // /3010 - stringBuilder.append("\n");// stringBuilder.append("
");
// 返回包含路径后的请求URL中的查询字符串 stringBuilder.append(req.getQueryString()); // null 没有QueryString stringBuilder.append("\n");// stringBuilder.append("
");
// 把请求的header 拼接 // 获取到所有的headerNames // 枚举 Enumeration<String> headerNames = req.getHeaderNames(); // has XXX 判断是否有下一个 while(headerNames.hasMoreElements()) { // 遍历获取到每一个header的name值 String name = headerNames.nextElement(); // next XXX获取下一个 // 查询header中name对应的值 String value = req.getHeader(name); stringBuilder.append(name + ", " + value); stringBuilder.append("\n"); } resp.getWriter().write(stringBuilder.toString()); }}

通过 smart Tomcat 部署程序并在浏览器中通过URL http://127.0.0.1:8080/0310/ShowRequest访问, 可以看到如下结果:

在这里插入图片描述
由于 QueryString在传入请求时, 并没有设置, 因此此处获取到的QueryString 为 null

另外需要注意的是, 此处我们设置的换行符 “\n” 并非一直都是正确生效的. 此时由于我们并没有设置准确的相应格式, 因此浏览器会在加载时"猜测"此时响应的文本是什么类型, 此处恰好认为是text/plain 可以正确读取换行.

若当设置响应格式为 text/html时, 此时 “\n” 换行符将无法正常解析

在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/6f60b9e0e02046858abc7ff58945531c.png

换成html对应的换行标签
时, 即可以正常识别换行标签

在这里插入图片描述
因此, 在通过浏览器访问时, 应当主动设置setCOntentType(“类型”, charset=“utf8”), 告诉浏览器按照什么类型, 什么编码方式解析

二. 获取GET请求中的参数

创建一个GetParameterServlet类, 假设浏览器请求如下
?studentID=10&studentName=张三

@WebServlet("/getParameter")public class GetParameterServlet extends HttpServlet {    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String studentId = req.getParameter("studentId");        // getparameter会自动针对urlencode 的结果进行处理        String studentName = req.getParameter("studentName");        System.out.println(studentId);        System.out.println(studentName);        resp.getWriter().write(studentId + ", " + studentName);}

运行smart Tomcat 通过网页访问URL路径为http://127.0.0.1:8080/0310/getParameter?studentId=10&studentName=张三

在这里插入图片描述
idea窗口中, “张三” 却没有乱码

在这里插入图片描述

说明此时浏览器对于 QueryString的解析出现了问题, 浏览器对于urlencode解析不正确, 需要手动设置响应格式告诉浏览器如何去解析

在这里插入图片描述
在这里插入图片描述当设置响应格式后, 浏览器便能正确识别了

三. 获取post请求中的参数

在刚刚创建的 GetParameter 类中, 重写 dopost 方法, 并构建请求

@Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // 通过 body 获取, 发送一个post请求        // 预期请求的 body 里为 studentId = 10&studentName = 张三        // 请求设置请求字符集 告诉 servlet(Tomcat)  该如何解析        req.setCharacterEncoding("utf8");        String studentId = req.getParameter("studentId");        String studentName = req.getParameter("studentName");        System.out.println(studentId);        System.out.println(studentName);                // 设置浏览器响应格式 告诉浏览器该如何解析        resp.setContentType("text/html; charset=utf8");        resp.getWriter().write(studentId + "," + studentName);    }

通过 postman 发送一个 post 请求观察结果
在这里插入图片描述
在idea上 返回了 结果

在这里插入图片描述

采用 fiddler 观察抓包结果

在这里插入图片描述

四. 获取post请求中 body 为 JSON 格式传递的

创建一个新类 JacksonServlet 重写 dopost 方法

在中央仓库中(中央仓库地址)引入 Jackson 依赖

在这里插入图片描述

Maven 下的内容复制到 pom.xml 文件中

<!--      引入 jackson 依赖   -->        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-databind</artifactId>            <version>2.13.4.1</version>        </dependency>

编写代码

class Student {    // 这个类里的属性必须是public 或者带有 public 的getter / setter 否则json无法访问    public int studentId;    public String studentName;    // 所构造的对象必须是 body 里构造的相同(名字与类型都应相同)    // 里面的构造方法不写即为无参版本构造器 且必须为无参版本}@WebServlet("/json")public class JacksonServlet extends HolleServlet{    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        // 从请求 body 里面获取一些参数        // 例如格式为 {"studentId": 10 , "studentName" : 张三 }        // 一个重要类        ObjectMapper objectMapper = new ObjectMapper();        // 第一个参数可以使字符串 也可以是输入流 第二个参数是一个类对象即为要解析的结果的类对象        Student s = objectMapper.readValue(req.getInputStream(), Student.class);         // 类对象可以解析到类里的属性        // 1.读取输入流, 获取到需要解析的字符串        // 2. 把字符串按照json格式解析, 得到一组键值对        // 3. 根据类对象创建一个实例        // 4. 遍历类对象中的属性的名字, 拿着名字去键值对中查询, 查到的value就赋值到对应的对象属性中        // 5. 返回这个构造完成的对象        System.out.println(s.studentId);        System.out.println(s.studentName);        // 两个重要方法 readValue方法, 把 json 格式数据转成 java 的对象        // writerValueAsString方法, 把 java 对象转为 json 格式的字符串                // 设置 响应时, 浏览器按照 json 格式解析        resp.setContentType("application/json; charset=utf8");        // 先把s对象转为json格式字符串在转为流对象        resp.getWriter().write(objectMapper.writeValueAsString(s));    }}

使用 postman 构建 body 为 json 的 post 请求

在这里插入图片描述
idea 中接受到的 响应

在这里插入图片描述

利用 fiddler 抓包如下

在这里插入图片描述

来源地址:https://blog.csdn.net/qq_68288689/article/details/129485052

--结束END--

本文标题: HttpServletRequest核心方法以及获取请求参数

本文链接: https://lsjlt.com/news/376992.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • HttpServletRequest核心方法以及获取请求参数
    一. 展示HttpServletRequest中一些重要方法 当Tomcat 通过 Socket API 读取 HTTP 请求(字符串), 并且按照 HTTP 协议的格式把字符串解析成HttpServletRequest 对象. 创建一个S...
    99+
    2023-08-21
    tomcat servlet java
  • java中springMVC获取请求参数的方法
    目录原生方式获取请求参数控制器方法形参获取请求参数@RequestParam注解@RequestHeader注解@CookieValue注解通过POJO获取请求参数原生方式获取请求参...
    99+
    2023-05-18
    springMVC 请求参数 springMVC 请求
  • javascript获取请求参数的方法是什么
    这篇文章主要讲解了“javascript获取请求参数的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript获取请求参数的方法是什么”...
    99+
    2024-04-02
  • SpringMVC获取请求参数实现方法介绍
    目录一、通过ServletAPI获取二、通过控制器方法的形参获取请求参数三、@RequestParam四、@RequestHeader五、@CookieValue六、通过POJO获取...
    99+
    2022-11-13
    SpringMVC获取请求参数 SpringMVC请求参数
  • SpringMVC实现获取请求参数方法详解
    目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@RequestHeader5、@CookieValue6、通过POJO获取...
    99+
    2024-04-02
  • SpringMVC中请求参数的获取方式
    目录SpringMVC请求参数获取方式一、通过 ServletAPI 获取二、通过控制器方法的形参获取处理多个同名的请求参数三、通过 @RequestParam 注解四、@Reque...
    99+
    2024-04-02
  • php怎么获取请求参数
    在PHP中,有多种方法可以获取请求参数。以下是几种常见的方法:1. 使用`$_GET`和`$_POST`全局变量来获取GET和POS...
    99+
    2023-10-09
    php
  • php 获取请求参数的函数
    在 PHP 中,可以使用 $_GET、$_POST 和 $_REQUEST 来获取请求参数。以下是介绍它们的一些细节: $_GET 用于获取通过 URL 传递的参数,一般用于获取请求方式为 GET ...
    99+
    2023-09-01
    php 开发语言
  • 二、Gin 路由(Route)和获取请求参数的方法
    路由(Route)方法 支持方法 路由方法有 GET, POST, PUT, PATCH, DELETE 和 OPTIONS,当然匹配所有类型的请求方法是 Any package main import ( "githu...
    99+
    2024-04-02
  • django如何获取get请求参数
    在Django中,可以通过`request.GET`来获取GET请求的参数。`request.GET`是一个类字典的对象,你可以通过...
    99+
    2023-09-26
    django
  • django怎么获取get请求参数
    在Django中,可以通过`request.GET`属性来获取GET请求参数。`request.GET`是一个类似字典的对象,可以使...
    99+
    2023-10-10
    django
  • java如何获取get请求参数
    在Java中,可以使用HttpServletRequest对象来获取GET请求参数。HttpServletRequest类是Java...
    99+
    2023-10-21
    java
  • php如何获取post请求参数
    在PHP中,可以使用`$_POST`全局变量来获取POST请求中的参数。`$_POST`是一个关联数组,其中键是表单中的输入字段的名...
    99+
    2023-08-11
    php
  • php如何获取get请求参数
    在PHP中,可以通过超全局数组$_GET来获取GET请求参数。以下是一些示例:1. 获取单个GET请求参数:```php$id = ...
    99+
    2023-08-15
    php
  • php怎么获取get请求参数
    在PHP中,可以通过`$_GET`超全局数组来获取GET请求参数。下面是一个示例代码:```php<phpif(isset($...
    99+
    2023-08-16
    php
  • java怎么获取请求头参数
    在Java中,可以通过HttpServletRequest对象的getHeader方法来获取请求头参数。具体代码如下: import...
    99+
    2023-10-28
    java
  • springMVC获取请求参数的方式有哪些
    这篇文章主要讲解了“springMVC获取请求参数的方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springMVC获取请求参数的方式有哪些”吧!初步认识可以直接在请求地址中给于请...
    99+
    2023-06-29
  • Express之get,pos请求参数的获取
    Express的版本4.X Get query参数的获取 url假设:http://localhost:3000/users/zqzjs?name=zhaoqize&word=cool&job[st...
    99+
    2022-06-04
    参数 Express pos
  • SpringMVC获取请求参数笔记整理
    目录前言一、使用ServletAPI获取参数二、通过控制器方法的形参获取请求参数三、@RequestParam四、@RequestHeader五、@CookieValue六、通过实体...
    99+
    2024-04-02
  • jquery怎么获取get请求的参数
    JQuery是一款非常流行的JavaScript库,它提供了很多方便快捷的方法来操作DOM,实现动画效果,以及处理AJAX请求等等。本文将着重讨论如何利用JQuery获取GET请求的参数。在Web开发中,GET请求是非常常见的一种HTTP请...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作