HttpRequest(http 请求类)

HttpServlet类的请求处理方法(doGetdoPost …)有2个参数。

  • javax.servlet.http.HttpRequest
  • javax.servlet.http.HttpResponse

例如,下面是HttpServlet.doGet()方法的声明,可以看到有上面提到的2个参数

protected void doGet(
    HttpServletRequest request,
    HttpServletResponse response)
      throws ServletException, IOException {

}

本文将学习HttpRequest类。

HttpRequest类表示浏览器向web服务端发送的HTTP请求,浏览器发送的任何内容都可以通过HttpRequest访问。

HttpRequest类有很多方法,我们只关注最常用的方法,其他内容可参考java官方文档。

参数

请求参数通常作为URL的一部分(在query string中),或者请求体的一部分发送,例如:

http://qikegu.com/some-page.html?param1=hello&param2=world

URL中的:param1=hello&param2=world这部分包含2个参数:

param1=hello
param2=world

可以从HttpRequest中访问这些参数:

protected void doGet(
    HttpServletRequest request,
    HttpServletResponse response) throws ServletException, IOException {

    // 读取参数
    String param1 = request.getParameter("param1");
    String param2 = request.getParameter("param2");

}

如果在HTTP请求体中发送了请求参数(如POST请求),可使用与上面相同的代码获取参数。如果给定名称的参数不存在,则返回null

通常如果浏览器发送GET请求,参数会放在URL中;发送POST请求,参数包含在请求体中。

Headers

请求头是浏览器发送请求时的头部信息,包含了一组名/值对,向服务端提供了诸如浏览器软件版本,接受文件类型等信息。

可以从HttpRequest中访问请求头:

String contentLength = request.getHeader("Content-Length");  

上面示例从请求头中读取浏览器发送的内容长度。

通常给定名称的值不存在,则返回null。

InputStream

如果浏览器发送一个HTTP POST请求,请求参数可放在请求体中。实际上请求体中可以放任何数据,如JSON数据。

要访问HTTP POST的请求体,可通过从HttpRequest中获得InputStream,从中读取请求体数据:

InputStream requestBodyInput = request.getInputStream();  

注意: 此方法必须在调用getParameter()之前调用。原因是调用getParameter()方法将导致servlet引擎解析请求体以获取参数,一旦被解析,就不能以原始字节流的形式访问请求体了。

InputStream中读取的数据是原始数据,你需要解析这些数据。

Session(会话)

可以从HttpRequest对象获得session(会话)对象。

session对象中保存了当前用户的会话信息。如果在某次请求期间将一些信息保存到session对象中,那么在session有效期内,任何后续请求都可以从session对象中读取信息。

下面示例是从HttpRequest访问session对象:

HttpSession session = request.getSession();

关于session对象,后续有更详细的介绍。

ServletContext

可以从HttpRequest中访问ServletContext对象。ServletContext包含关于web应用程序的元信息。例如,可以从中存取web.xml文件中设置的参数,可以将请求转发给其他servlet,还可以在ServletContext中存储作用范围是整个web应用的参数。

下面示例是从HttpRequest中访问ServletContext对象:

ServletContext context = request.getSession().getServletContext(); 

必须首先获得session对象,然后再访问ServletContext对象。

关于ServletContext对象,后续有更详细的介绍。



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载