首页 > 编程语言 >Java登陆第二十九天——HttpServletRequest和HttpServletResponse

Java登陆第二十九天——HttpServletRequest和HttpServletResponse

时间:2023-12-24 17:13:10浏览次数:40  
标签:HttpServletRequest Java String req HttpServletResponse Test4 println 请求

HttpServletRequest

Tomcat会自动将客户端请求报文封装为HttpServletRequest对象。

HttpServletRequest中请求行常用方法

方法 描述
String getMethod() 获取请求方法
String getProtocol() 获取请求协议及版本号
String getRequestURI() 获取请求的具体资源
StringBuffer getRequestURL() 获取请求的URL

请求行常用方法栗子

TestServlet4

@WebServlet("/Test4")
public class TestServlet4 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //请求行相关的栗子
        System.out.println("请求方法:"+req.getMethod());
        System.out.println("请求协议及版本号:"+req.getProtocol());

        //URI是客户端请求的某具体资源的路径,URL是完整路径(包括域名、端口)
        System.out.println("URI:"+req.getRequestURI());
        System.out.println("URL:"+req.getRequestURL());
    }
}

客户端请求URL:http://localhost:8080/JavaWeb_war_exploded/Test4

//控制台输出
请求方法:GET
请求协议及版本号:HTTP/1.1
URI:/JavaWeb_war_exploded/Test4
URL:http://localhost:8080/JavaWeb_war_exploded/Test4

更换表单,使用POST的请求方式请求资源。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form method="post" action="/Test4">
        <input type="submit" value="提交">
    </form>
</body>
</html>
//控制台输出
请求方法:POST
请求协议及版本号:HTTP/1.1
URI:/JavaWeb_war_exploded/Test4
URL:http://localhost:8080/JavaWeb_war_exploded/Test4

HttpServletRequest中请求头常用方法

方法 描述
String getHeader(String var1) 获取请求头的值
Enumeration getHeaderNames() 获取所有请求头

请求头栗子

TestServlet4

@WebServlet("/Test4")
public class TestServlet4 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//请求头相关的栗子
        Enumeration<String> es = req.getHeaderNames();
        while (es.hasMoreElements()) {
            System.out.println(es.nextElement());
        }
    }
}

客户端请求URL:http://localhost:8080/JavaWeb_war_exploded/Test4

//控制台输出
host
connection
sec-ch-ua
sec-ch-ua-mobile
sec-ch-ua-platform
upgrade-insecure-requests
user-agent
accept
sec-fetch-site
sec-fetch-mode
sec-fetch-user
sec-fetch-dest
accept-encoding
accept-language
cookie

HttpServletRequest中获取参数常用方法

方法 描述
String getParameter(String var1) 获取参数值
String[] getParameterValues(String var1) 获取所有参数值
Enumeration getParameterNames() 获取所有参数与值的迭代器
Map<String, String[]> getParameterMap() 获取所有参数与值的Map

请求参数栗子

TestServlet4

@WebServlet("/Test4")
public class TestServlet4 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //请求参数相关的栗子
        System.out.println(req.getParameter("uname"));

        //某些参数不止一个值
        System.out.println(Arrays.toString(req.getParameterValues("love")));
        System.out.println("==================");

        //迭代所有参数与值
        Enumeration<String> es = req.getParameterNames();
        while (es.hasMoreElements()) {
            System.out.println(es.nextElement());
        }
        System.out.println("==============");

        //获取参数与值的map
        Map<String, String[]> map = req.getParameterMap();
        Set<Map.Entry<String, String[]>> set = map.entrySet();
        Iterator<Map.Entry<String, String[]>> iterator = set.iterator();
        while (iterator.hasNext()) {
            Map.Entry<String, String[]> entry = iterator.next();
            String[] value = entry.getValue();
            System.out.println(entry.getKey()+":"+Arrays.toString(value));
        }
    }
}

客户端请求URL:http://localhost:8080/JavaWeb_war_exploded/Test4?love=1&love=2&p=1

//控制台输出
null
[1, 2]
==================
love
p
==============
love:[1, 2]
p:[1]

因为并没有uname的参数传递,所以是null。

HttpServletResponse

Tomcat会自动将服务端响应报文封装为HttpServletResponse对象。

HttpServletResponse中常用方法

方法 描述
void setStatus(int var1) 设置状态码
void setHeader(String var1, String var2) 设置响应头和值
void setContentType(String var1) 设置响应头Content-Type的值
PrintWriter getWriter() throws IOException 获取字符打印流
ServletOutputStream getOutputStream() throws IOException 获取字节输出流

响应报文栗子

TestServlet4

@WebServlet("/Test4")
public class TestServlet4 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //响应报文常用请求方法,更多请查询相关文档!
        resp.setStatus(200);
        //默认Content-type值就是text/html
        resp.setContentType("text/html");

        resp.setHeader("a1","aaaaa");

        //向响应体内输出字符,由于默认的Content-type值就是text/html,所以可以写HTML标签
        PrintWriter writer = resp.getWriter();
        writer.write("<h1>123</h1>");

        //向响应体内输出字节
        ServletOutputStream outputStream = resp.getOutputStream();
    }
}

客户端请求URL:http://localhost:8080/JavaWeb_war_exploded/Test4

image

HttpServletRequest和HttpServletResponse的报文行区别

  • HttpServletRequest请求行

    • GET /JavaWeb_war_exploded/Test4 HTTP/1.1

    • 请求方法 URL 请求协议及版本号

  • HttpServletResponse响应行

    • HTTP/1.1 200

    • 请求协议及版本号 状态码

标签:HttpServletRequest,Java,String,req,HttpServletResponse,Test4,println,请求
From: https://www.cnblogs.com/Ocraft/p/17924606.html

相关文章

  • Java搭建检索系统
    步骤:数据预处理:首先,需要对要检索的数据进行预处理。这包括数据清洗、分词、去除停用词、词干化等操作,以便将数据转化为适合索引和搜索的形式。索引构建:接下来,需要构建索引以便进行快速的检索操作。使用Lucene、Elasticsearch或Solr等API,可以创建索引并将预处理后的数据加入到索引中......
  • 在Java开发项目中,有几个关键要点需要注意
    在Java开发项目中,有几个关键要点需要注意需求分析和设计:在项目开发之前,进行充分的需求分析,并设计清晰的系统架构和数据库结构。这有助于确保项目的顺利进行,并减少后期的修改和调整工作。编码规范:遵循统一的编码规范是项目开发中的重要方面。编写清晰、可读性强的代码,使用恰当的命名......
  • c++智能指针和java垃圾回收对比
    c++智能指针和java垃圾回收对比我们都知道C++和java语言的一个巨大差异在于垃圾回收方面,这也是C++程序开发者和java程序开发者之间经常讨论的一个话题。在C++语言中,一般栈上的内存随着函数的生命周期自动进行回收,但是堆上内存(也就是自己new/malloc出来的空间),需要自己手动进行del......
  • of type [class java.lang.String] to [class java.util.Date]
    报错:javax.el.ELException:Cannotconvert[2023-11-1422:35:34]oftype[classjava.lang.String]to[classjava.util.Date]  问题分析:相应数据的类型不正确bean层写的是: privateStringcreateDate; jsp写的是:<fmt:formatDatevalue="${file.createDate}"patte......
  • Java多线程​(三)线程安全:同步及锁
    线程安全问题考虑如下情景:某电影院目前正在上映国产大片,共有100张票,而它有3个窗口卖票,请设计一个程序模拟该电影院卖票。publicclassTicketSellerextendsThread{//定义票的数量staticintticket=0;//取值范围:0~99@Overridepublicvoidrun(){while(true){......
  • java 数组想等
    实现"Java数组相等"作为一名经验丰富的开发者,我非常乐意教你如何实现"Java数组相等"的功能。在本文中,我将向你展示整个过程,并逐步指导你完成每一步所需的代码。流程概述下面是实现"Java数组相等"功能的整体流程:创建两个数组。检查两个数组的长度是否相等。逐个比较两个数组......
  • java 判断字符串a中包好几个字符串b
    Java判断字符串a中是否包含字符串b在Java编程中,我们经常需要判断一个字符串是否包含另一个字符串。这种需求在很多实际场景中都会遇到,比如搜索功能、数据过滤等。本文将介绍如何使用Java判断一个字符串中是否包含多个子字符串,并给出相关代码示例。方案一:使用String类的contains方......
  • java 判断一个值是否为null
    Java判断一个值是否为null作为一名经验丰富的开发者,我会在本文中教你如何在Java中判断一个值是否为null。首先,我将为你展示整个流程,并使用表格形式展示每个步骤。然后,我将详细说明每个步骤需要做什么,并提供相应的代码示例,并对代码进行注释解释。流程概述以下是判断一个值是否为......
  • java 判断一个集合是否包含
    Java判断一个集合是否包含1.整体流程下面是判断一个集合是否包含某个元素的整体流程:步骤描述步骤一创建一个集合对象步骤二向集合中添加元素步骤三判断集合是否包含指定的元素步骤四根据判断结果输出对应的信息2.详细步骤2.1步骤一:创建一个集合......
  • java 判断文件是否是视频
    Java判断文件是否是视频引言在开发中,我们经常需要判断一个文件是否是视频文件,这对于文件管理和处理来说非常重要。本文将指导你如何使用Java来实现判断文件是否是视频的功能。流程概述下面是整个流程的步骤概览:pietitle文件是否是视频"1.获取文件扩展名":20......