HttpRequest

时间:2020-01-09 10:36:21  来源:igfitidea点击:

HttpServlet类请求处理方法采用两个参数。

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

例如,这是HttpServlet.doGet()方法的签名:

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

}

在本文中,我将看看HttpRequest对象。

HttpRequest对象的目的是代表浏览器发送到Web应用程序的HTTP请求。因此,浏览器可以发送的任何内容都可以通过HttpRequest访问。

HttpRequest对象有很多方法,因此这里只介绍最常用的方法。如果我们有兴趣,可以在JavaDoc中阅读其余内容。

参数

请求参数是与请求一起从浏览器发送的参数。请求参数通常作为URL的一部分(在"查询字符串"中)或者HTTP请求的正文的一部分发送。例如:

http://Hyman.com/somePage.html?param1=hello&param2=world

注意URL的"查询字符串"部分:?param1 = hello&param2 = world这部分包含两个带有参数值的参数:

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请求的正文部分中发送的,则我们将使用相同的代码。如果没有给定名称的参数,则返回null。

通常,如果浏览器发送HTTP GET请求,则参数将包含在URL的查询字符串中。如果浏览器发送HTTP POST请求,则这些参数将包含在HTTP请求的主体部分中。

标头

请求标头是浏览器与HTTP请求一起发送的名称,值对。请求标头包含有关所使用的浏览器软件是什么,浏览器能够接收什么文件类型,等等。总之,HTTP请求中包含许多元数据。

我们可以像这样从HttpRequest对象访问请求标头:

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

本示例读取浏览器发送的Content-Length标头。

"内容长度"标头包含HTTP请求正文中发送的字节数,以防浏览器发送HTTP POST请求。如果浏览器发送HTTP GET请求,则不会使用Content-Length标头,并且上面的代码将返回null。

通常,如果不存在传递给getHeader()的名称的标头,则返回null。

输入流

如果浏览器发送HTTP POST请求,则请求参数和其他潜在数据将发送到HTTP请求正文中的服务器。不必一定是在HTTP请求正文中发送的请求参数。它几乎可以是任何数据,例如文件或者SOAP请求(Web服务请求)。

为了使我们能够访问HTTP POST请求的请求主体,可以获取指向HTTP请求主体的InputStream。这是完成的过程:

InputStream requestBodyInput = request.getInputStream();

注意:我们必须在调用任何getParameter()方法之前调用此方法,因为在HTTP POST请求上调用getParameter()方法将导致Servlet引擎解析HTTP请求主体以获取参数。解析后,我们将无法再作为原始字节流访问正文。

我们可以根据自己的意愿来处理从InputStream读取的数据。 Servlet引擎无法解析或者解释该数据。我们只是生而已。

会议

也可以从HttpRequest对象中获取session对象。

会话对象可以在请求之间保存有关给定用户的信息。因此,如果我们在一个请求期间将一个对象设置为会话对象,则可以在同一会话时间范围内的任何后续请求期间读取该对象。

这是从" HttpRequest"对象访问" session"对象的方式:

HttpSession session = request.getSession();

在这里,我将不对" session"对象做更多的详细介绍。它在其自己的文本中进行了更详细的介绍。

ServletContext

我们也可以从HttpRequest对象访问ServletContext对象。 ServletContext包含有关Web应用程序的元信息。例如,我们可以访问在web.xml文件中设置的上下文参数,可以将请求转发到其他servlet,也可以在ServletContext中存储应用程序范围的参数。

这是从HttpRequest对象访问ServletContext对象的方式:

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

如我们所见,我们必须首先获取会话对象,才能访问ServletContext对象。