HttpServletRequest对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,service()方法中形参接收的是HttpServletRequest接口的实例化对象,表示该对象主要应用在好TP协议上,该对象是由Tomcat封装好传递过来。
HttpServletRequest是ServletRequest的子接口,ServletRequest只有一个子接口,就是HttpServletRequest。既然只有一个子接口为什么不将两个接口合并为一个?
从长远上讲:现在主要用的协议是HTTP协议,但以后可能出现更多新的协议。若以后想要支持这种新协议,只需要直接继承ServletRequest 接口就行了。
在HttpServletRequest接口中,定义的方法很多,但都是围绕接收客户端参数的。但是怎么拿到该对象呢?不需要,直接在Service方法中由容器传入过来,而我们需要做的就是取出对象中的数据,进行分析、处理。
常用方法
运行结果:
方法
浏览器地址栏输入:
则控制台输出:
由于现在的request属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程中默认使用的编码方式为ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这种乱码问题,需要设置request 中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码格式还原。
方式一(只针对POST有效,必须在接收所有的数据之前设定):
方式二(借助了String 对象的方法,该种方式对任何请求有效,是通用的):
Tomcat8起,以后的GET方式请求是不会出现乱码的。
请求转发,是一种 服务器的行为 ,当客户端请求到达后,服务器进行转发,此时会将请求对象进行保存,地址栏中的 URL地址不会改变 ,得到响应后,服务器端再将响应发送给客户端,从始至终 只有一个请求发出 。实现方式如下,达到多个资源协同响应的效果。
通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效。
使用作用域时需要设置请求转发,否则没有效果。
request域对象中的数据在一次请求中有效,则经过请求转发,request域中的数据依然存在,则在请求转发的过程中可以通过request来传输/共享数据。
请求转发到Servlet
请求转发到jsp。 此时需要修改:
req.getRequestDispatcher("test.jsp").forward(req, resp)
怎么获取httpservletrequest
Web服务器收到客户端的http请求,会针对每一次请求,创建一个用于代表请求的HttpServletRequest类型的request对象,并将"HTTP请求协议"的完整内容封装到该对象中。开发者获拿到request对象后就可以获取客户端发送给服务器的请求数据了。
当客户端浏览器向服务器发送请求后,服务器会根据HTTP请求协议的格式对请求进行解析。同时,服务器会创建 HttpServletRequest类型的对象,即请求对象,然后将解析出的数据封装到该请求对象中。此时HttpServletRequest实例就创建并初始化完毕了,也就是说,请求对象是由服务器创建。当服务器向客户端发送响应结束后,HttpServletRequest 实例对象被服务器销毁,HttpServletRequest对象的生命周期很短暂。
一次请求对应一个请求对象, 另外一次请求对应另外一个请求对象,即每次请求都会创建一个HttpServletRequest类型的对象,这些对象之间没有关系。
Map getParameterMap()
获取包含所有请求参数及值的 Map 对象。需要注意,该 Map 的 value 为 String[],即一个参数所对应的值为一个数组。说明一个参数可以对应多个值。
Enumeration getParameterNames()
获取请求参数 Map 的所有 key,即获取所有请求参数名。
String[] getParameterValues(String name)
根据指定的请求参数名称,获取其对应的所有值。这个方法一般用于获取复选框(checkbox)数据。
String getParameter(String name)
根据指定的请求参数名称,获取其对应的值。若该参数名称对应的是多个值,则该方法获取到的是第一个值。这个方法是最常用的方法。
getRequestURL 方法返回客户端发出请求时的完整URL。
getRequestURI 方法返回请求行中的资源名部分。
getQueryString 方法返回请求行中的参数部分。
getRemoteAddr 方法返回发出请求的客户机的IP地址
getRemoteHost 方法返回发出请求的客户机的完整主机名
getRemotePort 方法返回客户机所使用的网络端口号
getLocalAddr 方法返回WEB服务器的IP地址。
getLocalName 方法返回WEB服务器的主机名
getMethod 得到客户机请求方式
创建一个html里面写一些表单信息:

创建一个servlet来接收用户提交的数据:
如何在一个类中获取HttpServletRequest 对象
1、request.getRequestURL()
返回的是完整的url,包括Http协议,端口号,servlet名字和映射路径,但它不包含请求参数。
2、request.getRequestURI()
得到的是request URL的部分值,并且web容器没有decode过的
3、request.getContextPath()
返回 the context of the request.
4、request.getServletPath()
返回调用servlet的部分url.
5、request.getQueryString()
返回url路径后面的查询字符串
示例:
当前url:http://localhost:8080/CarsiLogCenter_new/idpstat.jsp?action=idp.sptopn
request.getRequestURL() http://localhost:8080/CarsiLogCenter_new/idpstat.jsp
request.getRequestURI() /CarsiLogCenter_new/idpstat.jsp
request.getContextPath()/CarsiLogCenter_newrequest.getServletPath() /idpstat.jsp
request.getQueryString()action=idp.sptopn
HttpRequest与HttpservletRequest有什么区别
通过ServletActionContext直接获取:
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import com.opensymphony.xwork2.ActionSupport
import org.apache.struts2.ServletActionContext
import java.util.Map
public class UserAction extends ActionSupport {
private HttpServletRequest request
private HttpServletResponse response
public String addUser() throws Exception {
/*
采用ActionContext则为
<Map>request =(Map)ActionContext().getContext().get(“request”);
*/
request = ServletActionContext().getRequest()
String name = request.getParameter("name")
}
}
Java中HttpServletRequest接口是ServletRequest子接口,HttpServletRequest接口遵循http协议。 相比于HttpServletRequest接口,ServletRequest的应用范围更加广泛,HttpServletRequest只适合在web开发中的http协议的请求,而ServletRequest则没有具体要求。
以上就是关于HttpServletRequest对象全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!