request

1.HttpServletRequest

我们在创建servlet时会覆盖service()方法,并且还会使用到doGet()和doPost()方法,在这些方法中都有一个代表请求的request和一个代表响应的response

service中的response类型是ServletRequest,doGet/doPost中的类型是HttpServletRequest

HttpServletRequest是ServletRequest的子接口,功能和方法更加强大,我们学习的就是HttpServletRequest

 

request的运行流程

tomcat内核解析请求资源 >>> 将请求资源封装到request >>> 创建servlet对象,并将request传入

 

2.request的作用

获得请求行,获得请求头,获得请求体(post/get)

 

2.1)获得请求行

获得客户端的请求方式:String getMethod();

获得web应用名称:String getContextPath();(划重点)

 

2.2)获得请求头

String getHeader(String name);请求头中都是键值对形式存在,通过指定name(即key)即可获得指定值(value)

 

2.3)获得请求体

a.请求体中有两种提交方式get/post

get方式的数据格式:直接嵌套在http访问地址后面(http://localhost:8080/WEB15_request/head?username=admin

post方式的数据格式:储存在请求体内部,以键值对形式(key:value)

 

b.获得数据的三种方式(划重点),三种方式都能获得get或post数据

String getParameter(String name);通过指定name(key)来获取指定单个表单值

		String username = request.getParameter("username");

String[] getParameterValues(String name);获得多个表单值,例如获取爱好

		String[] hobbys = request.getParameterValues("hobby");
		for(String hobby:hobbys){
			System.out.println(hobby);

Map<String , String[]> getParameterMap();获得所有参数,将参数封装到Map<String , String[]>(必须是String,String[])

Map<String, String[]> map = request.getParameterMap();
		for (Map.Entry<String, String[]> entry : map.entrySet()) {
			System.out.println(entry.getKey());
			for (String str : entry.getValue()) {
				System.out.println(str);
			}
			System.out.println("-------------------------");
		}

 

得到数据乱码问题

post方式数据乱码:request.setCharacterEncoding("UTF-8");

get方式数据乱码:String username = new String(username.getBytes("iso8859-1"),"UTF-8");先转iso8859-1编码 在转utf-8解码

 

3.request内部转发和request(划重点)

request内部转发

直接从一个servlet转到另一个servlet,地址栏不变,还能携带request域数据(重定向不能)

request.getRequestDispatcher("/login.jsp").forward(request, response);

 

 

request域

request对象也是一个存储数据的区域对象,数据的生命存在周期为一次请求,三个域的通用方法

setAttribute(String name, Object o);存入数据

getAttribute(String name);取出数据

removeAttribute(String name);删除数据

 

 

总结

request获得行的内容
	request.getMethod()
	request.getRequestURI()
	request.getRequestURL()
	request.getContextPath()
	request.getRemoteAddr()
request获得头的内容
	request.getHeader(name)
request获得体(请求参数)
	String request.getParameter(name)
	Map<String,String[]> request.getParameterMap();
	String[] request.getParameterValues(name);
	注意:客户端发送的参数 到服务器端都是字符串

	获得中文乱码的解决:
		post:request.setCharacterEncoding(“UTF-8”);
		get:parameter = new String(parameter.getBytes(“iso8859-1”),”UTF-8”);

request转发和域
	request.getRequestDispatcher(转发的地址).forward(req,resp);
	request.setAttribute(name,value)
	request.getAttribute(name)

 

### 关于 Request 在 IT 领域的具体含义与用法 在 IT 领域中,`Request` 是一个核心概念,主要用于描述客户端向服务器发送的请求信息。以下从多个角度详细解析 `Request` 的具体含义和用法。 #### 1. **HTTP 请求的基本概念** 在 Web 开发中,`Request` 通常指的是 HTTP 请求。HTTP 请求由客户端发起,包含请求方法(如 GET、POST 等)、URL、请求头(Headers)和请求体(Body)。这些信息共同决定了服务器如何响应请求[^1]。例如,在 Spring MVC 中,`@RequestParam` 和 `@RequestBody` 分别用于处理 URL 参数或表单数据以及 JSON 或 XML 格式的请求体数据。 #### 2. **获取请求协议** 在 Java 的 Servlet API 中,`Request` 对象提供了多种方法来获取请求的相关信息。例如,`request.getScheme()` 方法可以用来判断请求是通过 HTTP 还是 HTTPS 协议传输的。这在构建安全性检查或动态配置时尤为重要[^2]。 #### 3. **拦截器中的 Request 处理** 在 Spring 框架中,拦截器(Interceptor)可以用来统一处理请求逻辑。尽管拦截器能够轻松获取请求头和 URL 参数,但如果需要获取请求体中的 JSON 数据并将其转换为 Java 对象,则需要额外的处理逻辑。通过自定义拦截器,可以实现对请求体的解析和转换[^3]。 #### 4. **性能指标中的 Request 含义** 在系统性能评估中,`Request` 通常指代一次用户请求。吞吐量(Throughput)是衡量系统性能的重要指标之一,表示单位时间内处理的请求数量。吞吐量可以通过公式计算:QPS(TPS)= 并发数 / 平均响应时间。这说明了系统在高负载情况下的承压能力[^4]。 #### 5. **代码示例:处理 Request** 以下是一个简单的 Spring MVC 示例,展示了如何使用 `@RequestParam` 和 `@RequestBody` 处理请求参数: ```java @RestController @RequestMapping("/api") public class ExampleController { @GetMapping("/greet") public String greet(@RequestParam("name") String name) { return "Hello, " + name; } @PostMapping("/data") public String postData(@RequestBody User user) { return "Received user: " + user.getName(); } } ``` 在此示例中: - `@RequestParam` 绑定了 URL 参数 `name`。 - `@RequestBody` 将请求体中的 JSON 数据映射为 `User` 对象。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值