Request

一、Request介绍

       在计算机网络中,"Request"(请求)通常指的是客户端向服务器发送的请求消息,用于获取特定资源或执行特定操作。在Web开发中,"Request"通常指的是HTTP请求,用于客户端与服务器之间的通信。

        1、以下是HTTP请求的一般结构:

                1、请求行:包括请求方法(GET、POST、PUT、DELETE等)、请求的URL路径和协议版本。

                2、请求头部:包括关于请求的附加信息,如Host(主机名)、User-Agent(用户代理,浏览器信息)、Accept(可接受的内容类型)、Cookie等。

                3、请求体:对于POST请求,请求体中包含了向服务器提交的数据,比如表单数据、JSON数据等。GET请求通常不包含请求体。

       2、 常见的HTTP请求方法有:

                GET:用于请求获取特定资源的信息。

                POST:用于向服务器提交数据。

                PUT:用于更新或创建资源。

                DELETE:用于删除指定的资源。

        在Web开发中,服务器接收到请求后会根据请求中的信息进行处理,并返回相应的响应(Response)给客户端。请求和响应是Web开发中基本的通信方式,通过请求和响应可以实现网页的动态加载、数据的传输等功能。

        总之,"Request"是指客户端向服务器发送的请求消息,其中包含了客户端想要执行的操作以及相关的信息,用于与服务器进行通信和交互。

        3、Request对象继承体系结构

二、Request常用方法

        1、请求对象常用方法-获取请求行及各种路径

返回值

方法名

说明

String

getMethod()

获得请求方式

String

getContextPath()

获取虚拟目录名称

String

getServletPath()

获取Servlet映射路径

String

getRemoteAddr()

获取访问者ip地址

String

getRequestURI()

获取统一资源标识符

StringBuffer

getRequestURL()

获取统一资源定位符

String

getProtocol()

获取协议及版本

         2、代码实现方法

package com;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author 86136*/
@WebServlet("/aa")
public class MyWeb01  extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求方式String method = req.getMethod();System.out.println("method = " + method);//method = POST//获取虚拟目录名称String contextPath = req.getContextPath();System.out.println("contextPath = " + contextPath); //contextPath =  (这里什么都没有是因为我没有设置虚拟目录名称)//获取Servlet映射目录String servletPath = req.getServletPath();System.out.println("servletPath = " + servletPath);//servletPath = /aa//获取访问者ip地址String remoteAddr = req.getRemoteAddr();System.out.println("remoteAddr = " + remoteAddr);//remoteAddr = 127.0.0.1//获取统一资源标识符String requestURI = req.getRequestURI();System.out.println("requestURI = " + requestURI);//requestURI = /aa//获取统一资源定位符StringBuffer requestURL = req.getRequestURL();System.out.println("requestURL = " + requestURL);//requestURL = http://localhost:8080/aa//获取协议及版本String protocol = req.getProtocol();System.out.println("protocol = " + protocol);//protocol = HTTP/1.1}
}

         3、获取请求头信息

返回值

方法名

说明

String

getHeader(String name)

根据请求头名称获取一个值

Enumeration<String>

getHeaderNames()

获取所有请求头名称

        4、代码实现

package com;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;
/*** @author 86136*/
@WebServlet("/aa")
public class MyWeb01  extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求头信息//根据请求头名称获取一个值String host = req.getHeader("Host");System.out.println("host = " + host);//host = localhost:8080//获取所有请求头名称Enumeration<String> headerNames = req.getHeaderNames();//headerNames = org.apache.tomcat.util.http.NamesEnumerator@727fdf5cSystem.out.println("headerNames = " + headerNames);//遍历while (headerNames.hasMoreElements()){//得到当前遍历出来的请求头名称String name = headerNames.nextElement();//根据名称获取请求头的值String value = req.getHeader(name);System.out.println(name + "== " + value);}}
}

         5、获取请求参数信息

返回值

方法名

说明

String

getParameter(String name)

根据名称获取数据

String[]

getParameterValues(String name)

根据名称获取所有数据

Enumeration<String>

getParameterNames()

获取所有名称

Map<String,String[]>

getParameterMap()

获取所有参数的键值对

        6、代码实现

package com;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;/*** @author 86136*/
@WebServlet("/aa")
public class MyWeb01  extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//中文乱码req.setCharacterEncoding("utf-8");//获取请求参数信息//根据名称获取数据String name = req.getParameter("name");System.out.println("name = " + name);//name = 九亿少女梦//根据名称获取所有数据String[] yxs = req.getParameterValues("yx");System.out.println("yxs = " + yxs);//获取所有名称Enumeration<String> parameterNames = req.getParameterNames();//遍历while (parameterNames.hasMoreElements()){//得到当前遍历出来的参数名String s = parameterNames.nextElement();System.out.println("s = " + s); //s = name s = pass s = yxString parameter = req.getParameter(s);System.out.println("parameter = " + parameter); //parameter = 九亿少女梦 parameter = 1314520 parameter = 打游戏}//获取所有参数的键值对(map集合)Map<String, String[]> parameterMap = req.getParameterMap();Set<String> strings = parameterMap.keySet();for (String names : strings) {//获取键值对String[] values = parameterMap.get(names);System.out.println(names);System.out.println("values = " + Arrays.toString(values));}}
}

         7、中文乱码问题

                1、get方式

                        没有乱码问题,再Tomcat8.5版本后已经解决

                2、post方式

                        有乱码问题,再获取参数前,设置request的编码req.setCharacterEncoding("utf-8")

三、Request转发

        1、请求转发

                1、请求转发:一种在服务器内部的资源跳转方式客户端的一次请求到达后,发现需要借助其他 Servlet 来实现功能。

特点:
浏览器地址栏不变
只能转发到当前服务器内部资源中
转发是一次请求

        2、请求转发函数

返回值

方法名

说明

RequestDispatcher

getRequestDispatcher(String name)

获取请求调度对象

返回值

方法名

说明

void

forward(ServletRequest req,ServletResponse resp)

实现转发

        3、代码实现

package com;import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;/*** @author 86136*/
@WebServlet("/bb")
public class MyWeb02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//中文乱码req.setCharacterEncoding("utf-8");//第一种方式//RequestDispatcher dispatcher = req.getRequestDispatcher("/aa");//dispatcher.forward(req,resp);//第二种req.getRequestDispatcher("/aa").forward(req,resp);}
}

 

package com;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;/*** @author 86136*/
@WebServlet("/aa")
public class MyWeb01  extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//中文乱码req.setCharacterEncoding("utf-8");System.out.println("喜欢你");}
}

        我访问http://localhost:8080/bb 跳转到 http://localhost:8080/aa浏览器还是显示的/bb却执行了/aa下面的

四、Request数据共享

        1、共享数据

                1、域对象:

                        一个有作用范围的对象,可以在范围内共享数据

                     request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据  

                2、方法:

1. void setAttribute(String name,Object obj):存储数据

2. Object getAttitude(String name):通过键获取值

3. void removeAttribute(String name):通过键移除键值对

                 3、代码实现

//往request中存数据
req.setAttribute("name","hello");
//从request中根据key获取数据
Object name = req.getAttribute("name");
System.out.println("name = " + name);
//从request中根据key生成数据
req.removeAttribute("name");

 

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

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

相关文章

速盾:香港服务器可以用cdn吗?

香港是一个互联网发达的地区&#xff0c;拥有优质的网络基础设施和大量的服务器机房。对于网站和应用开发者来说&#xff0c;选择一个合适的服务器位置是十分重要的。CDN&#xff08;内容分发网络&#xff09;是一种能够通过分布在全球各地的服务器节点来加速访问速度的技术&am…

信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!

作者介绍 礁鲨系列天线&#xff0c;以其独特的外观设计和强大的性能&#xff0c;成为德思特Panorama智能天线家族的最新成员。这款天线不仅稳定提供5G、WIFI和GNSS信号&#xff0c;更能在各类复杂环境中展现出卓越的性能。它的设计灵感来源于海洋中的礁鲨&#xff0c;象征着力量…

内存管理【C++】

内存分布 C中的内存区域主要有以下5种 栈&#xff08;堆栈&#xff09;&#xff1a;存放非静态局部变量/函数参数/函数返回值等等&#xff0c;栈是向下增长的【地址越高越先被使用】。栈区内存的开辟和销毁由系统自动执行 堆&#xff1a;用于程序运行时动态内存分配&#xff…

电脑丢失api-ms-win-crt-runtime-l1-1-0.dll的多种修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“api-ms-win-crt-runtime-l1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中&#xff0c;它表示一个动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常运行&#xf…

前端面试题:var const let的区别

1 作用域 var声明的变量具有函数级作用域&#xff0c;这意味着它们在全局作用域或函数内部都有效&#xff0c;且可以被全局访问。 let和const声明的变量具有块级作用域&#xff0c;这意味着它们只在声明它们的代码块内有效&#xff0c;不能跨块或跨函数访问。 2 变量提升 va…

大型企业用什么文件加密软件,五款适合企业的文件加密软件

大型企业在选择文件加密软件时&#xff0c;通常会倾向于那些能够提供全面数据保护、具有高度可定制性、易于管理且能适应复杂组织结构的解决方案。以下是一些适合大型企业使用的文件加密软件&#xff1a; 1.域智盾软件&#xff1a; 作为一款企业级文件加密软件&#xff0c;支持…

曲面细分技术在AI去衣中的创新应用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理领域的应用日益广泛。其中&#xff0c;AI去衣技术因其独特的应用场景而备受瞩目。在这一技术的发展过程中&#xff0c;曲面细分技术发挥了至关重要的作用。本文将深入探讨曲面细分技术在AI去衣中的作用及其…

C语言-单精度和双精度浮点型

文章目录 一、遇到的问题二、解决方案三、问题根因float和double的区别&#xff1a; 总结-浮点数 一、遇到的问题 将NXP项目的代码移植到RH850F1K的项目上时&#xff0c;程序运行异常&#xff1a; u16Volt (uint16)((double)u16ADVal * (double)6.3) 执行到这一行程序就跑飞了…

vue3可以快速简单的操作dom元素了

再也不需要用document.getElementById("myElement")的这种方式来对dom元素进行操作了 我们需要使用模板引用——也就是指向模板中一个 DOM 元素的 ref。我们需要通过这个特殊的 ref attribute 来实现模板引用&#xff1a; <script setup> import { ref, onMo…

wafw00f一键检测目标防火墙信息(KALI工具系列十五)

目录 1、KALI LINUX简介 2、wafw00f工具简介 3、在KALI中使用lbd 3.1 查看可检测的防火墙对象 3.2 目标防火墙种类检测 3.3 目标防火墙详细信息检测 3.4 将检查结果输出 4、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版&#xff0c;广…

最好的电脑数据恢复软件是什么

由于硬件故障、恶意软件攻击或意外删除而丢失文件可能会造成巨大压力。数据丢失会扰乱日常运营&#xff0c;造成宝贵的业务时间和资源损失。在这些情况下&#xff0c;数据恢复软件是检索丢失或损坏数据的最简单方法。 数据恢复软件何时起作用&#xff1f; 对于 Windows 数据恢…

vue3组件传值---vue组件通过属性,事件和provide,inject进行传值

通过属性传值&#xff08;父传子&#xff09; vue的组件具有props自建属性&#xff08;自定义名称&#xff0c;类似于class&#xff0c;id的属性&#xff09;&#xff0c;通过这个属性&#xff0c;父组件可以向子组件传递参数&#xff0c;从而实现组件之间的信息传递&#xff0…

Django模块连接redis

1 安装django-redis pip3 install django-redis 2、配置settings.py CACHES{"default":{"BACKEND":"django_redis.cache.RedisCache","LOCATION":"redis://"redis_host":"redis_port, #redis主机…

CSDN UI 2024.06.01

当我们的栏目很多的时候&#xff0c;通过【置顶】来排列顺序是很麻烦的&#xff0c;应该加一列&#xff0c;设置优先级别。太难用了 或者加两个按钮【上移】 【下移】

Spring Boot(七十六):集成Redisson实现布隆过滤器(Bloom Filter)

之前在redis(17):什么是布隆过滤器?如何实现布隆过滤器?中介绍了布隆过滤器,以及原理,布隆过滤器有很多实现和优化。之前我们讲解了由 Google 开发著名的 Guava 库实现布隆过滤器(Bloom Filter)。下面我们讲解基于Redisson实现布隆过滤器。 1 Redisson简介 Redisson…

正缘画像 api数据接口

测测正缘画像&#xff0c;相貌特征&#xff0c;高矮胖瘦&#xff0c;黑白美丑&#xff0c;对方何许人也&#xff0c;远嫁近娶&#xff0c;何方定居&#xff0c;家庭观&#xff0c;持家爱家&#xff0c;生活质量&#xff0c;富裕贫穷&#xff0c;健康情况&#xff0c;测算结果仅…

极验4点选逆向 JS逆向分析 最新版验证码

目录 声明&#xff01; 一、请求流程分析 二、加密参数w与payload 三、参数w生成位置 四、结果展示&#xff1a; 原创文章&#xff0c;请勿转载&#xff01; 本文内容仅限于安全研究&#xff0c;不公开具体源码。维护网络安全&#xff0c;人人有责。 声明&#xff01; 本文章…

代码随想录算法训练营第四十五天|1049. 最后一块石头的重量 II、494. 目标和、474.一和零

代码随想录算法训练营第四十五天 1049. 最后一块石头的重量 II 题目链接&#xff1a;1049. 最后一块石头的重量 II 将所有石头分成2组&#xff0c;两组的重量尽可能相等&#xff0c;差值最小。 计算石头总重&#xff0c;再除以2就是目标重量&#xff0c;求要达到该重量能装的…

java —— Comparable 接口和 Comparator 比较器

一、Comparable 接口 当一个自定义的类&#xff0c;比如 Student 需要存储在 TreeSet 集合当中&#xff0c;可以为 Student 实现 Comparable 接口。因为 TreeSet 集合内部的元素是自然排序&#xff0c;而系统根本不知道自定义的类如何排序&#xff0c;所以需要我们人为地定义排…

升级笔记本

笔记本型号参数&#xff1a;Acer V5-573G CPU:I5 4200U 1.6GHz 最高2.6GHz 双核四线程 内存&#xff1a;4G 1600M DDR3L SO-DIMM 显卡&#xff1a;独立显卡NVIDIA GeForce GT 750M 硬盘&#xff1a;1T 5400转 屏幕&#xff1a;15.6英寸 1920*1080 【Acer V5-573G-54204G1…