HttpRequest
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¶m2=world
注意URL的"查询字符串"部分:?param1 = hello¶m2 = 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对象。