java创建request_java ->HttpServletRequest

HttpServletRequest

HttpServletRequest概述

我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和代表响应response。

service方法中的request的类型是ServletRequest,而doGet/doPost方法的request的类型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加强大,今天我们学习HttpServletRequest。

request的运行流程

f0e66e96e877eca51069fb4a91102a3a.png

通过抓包工具抓取Http请求

f3ddc0cceb0391f77bd7d2f5c090a113.png

因为request代表请求,所以我们可以通过该对象分别获得Http请求的请求行,请求头和请求体

通过request获得请求行

获得请求的资源:

---- get提交url地址后的参数字符串

username=zhangsan&password=123

注意:request获得客户机(客户端)的一些信息

request.getRemoteAddr() --- 获得访问的客户端IP地址

通过request获得请求头

referer头的作用:执行该此访问的的来源做防盗链

通过request获得请求体

请求体中的内容是通过post提交的请求参数,格式是:

username=zhangsan&password=123&hobby=football&hobby=basketball

key ---------------------- value

username                                   [zhangsan]

password                                   [123]

hobby                                         [football,basketball]

以上面参数为例,通过一下方法获得请求参数:

Map()

注意:get请求方式的请求参数 上述的方法一样可以获得

解决post提交方式的乱码:request.setCharacterEncoding("UTF-8");

解决get提交的方式的乱码:

parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");

request的其他功能

request是一个域对象

request对象也是一个存储数据的区域对象,所以也具有如下方法:

注意:request域的作用范围:一次请求中request完成请求转发

获得请求转发器----path是转发的地址

通过转发器对象转发

requestDispathcer.(ServletRequestrequest,ServletResponseresponse)

注意:ServletContext域与Request域的生命周期比较?

ServletContext:

创建:服务器启动

销毁:服务器关闭

域的作用范围:整个web应用

request:

创建:访问时创建request

销毁:响应结束request销毁

域的作用范围:一次请求中

注意:转发与重定向的区别?

1)重定向两次请求,转发一次请求

2)重定向地址栏的地址变化,转发地址不变

3)重新定向可以访问外部网站转发只能访问内部资源

4)转发的性能要优于重定向快

注意:客户端地址与服务器端地址的写法?

客户端地址:是客户端去访问服务器的地址,服务器外部的地址,特点:写上web应用名称

直接输入地址:重定向

服务器端地址:服务器内部资源的跳转的地址,特点:不需要写web应用的名称

总结:

request获得行的内容

request.getMethod()

request.getRequestURI()

request.getRequestURL()

request.getContextPath()

request.getRemoteAddr()

request获得头的内容

request.getHeader(name)

request获得体(请求参数)

String request.getParameter(name)

Map 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)

抱歉,我是一个基于文本的 AI 模型,无法提供实际的编程功能。但是,我可以给你一些提示来创建 HttpServletRequest 对象的方法。 要创建 HttpServletRequest 对象,需要使用 Servlet API。通常情况下,HttpServletRequest 对象是由 Servlet 容器(如Tomcat)在接收到 HTTP 请求时自动创建的。但是,如果你想以编程方式创建一个模拟的 HttpServletRequest 对象,可以使用 MockHttpServletRequest 类。 MockHttpServletRequest 类是 Spring 框架提供的一个测试工具,在测试 Servlet 或 Filter 时非常有用。它允许你以编程方式创建 HttpServletRequest 对象,并设置请求的各种属性、参数和头部信息。 下面是一个使用 MockHttpServletRequest 创建 HttpServletRequest 对象的示例代码: ```java import org.springframework.mock.web.MockHttpServletRequest; // 创建 MockHttpServletRequest 对象 MockHttpServletRequest request = new MockHttpServletRequest(); // 设置请求的方法、URL 和协议 request.setMethod("GET"); request.setRequestURI("/example");request.setProtocol("HTTP/1.1"); // 设置请求参数 request.setParameter("param1", "value1"); request.setParameter("param2", "value2"); // 设置请求头部信息 request.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"); // 其他设置... // 可以使用创建好的 HttpServletRequest 对象进行相关操作 // ... // 相关问题:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值