JSP从入门到精通
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.1 request对象

当客户端请求一个JSP页面时,JSP引擎会将客户端的请求信息包装在request对象中,request对象就是对HTTP请求包的封装。请求信息的内容一般包括请求的标题头、信息参数名称、信息参数值和客户端的主机名等。因此,使用request对象可以获得客户端和服务器端信息,如客户端的主机名、IP地址、传递参数名、参数值、服务器主机名和相应的IP地址等。request对象代表了客户端的请求信息,主要用于接受客户端传送到服务器端的数据,如客户端一般使用HTML中的FORM表单<form method=get(post) action=“提交信息的目的页面”>中填写的信息内容向服务器的某个JSP页面提交信息是最常用的对象。它的作用域就是一次request请求。

4.1.1 常用方法

request对象是Http Servlet Request的一个子类,它提供了大量的方法帮助处理客户端的GET/POST请求传送过来的信息。它也是九个内置对象中使用最频繁的一个对象,其主要方法有:request.getParameter( )、request.getHeader( )、request.getAttribute(Stringstr)等。表4.2列举出了request对象中的各种方法及其说明。

表4.2 request对象中的各种方法及其说明

续表

4.1.2 request对象实例

下面通过一个具体的request对象中的常用方法返回相应的结果的实例,让读者更加熟悉和掌握这些方法。由于request用于客户端和服务器之间的通信,所以本实例要新建两个文件:一个作为客户端表单index.jsp;另一个作为服务器端request.jsp应用request对象的方法来接受或处理这些信息。具体的步骤如下。

●首先,打开MyEclispe,新建一个Web项目,项目名为:Request(如何新建项目,请查看第1章1.6.2常用操作小节中的相关知识)。

●然后,单击文件,在index.jsp文件中加入两个文本框用于输入姓名和年龄,再加入相应的提交按钮,为了让服务器端可以接受并处理这些信息,其代码如下。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
 <head>
  <title>Request对象</title>
 </head>
 <body>
  <center>
             用户登录<br/>
  <hr/>
  <form action="request.jsp" method="post" >
     姓名:<input type="text" name="userName"/><br/>
     年龄:<input type="text" name="userAge" /><br/>
     <input type="submit" value="登录"/>
     <input type="reset" value="重置"/>
  </form>
  </center>
 </body>
</html>

●新建一个request.jsp文件,其主要功能就是接受并处理客户端提交的信息,其代码如下。

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
  <head>
    <title>Request对象</title>
  </head>
  <body>
    <center>
  <h2>request对象应用实例</h2>
  </center>
<%
  String strMessage, strInformation, name, age;
 strMessage="表单提交来的数据:";
  name=request.getParameter("userName");
 age = request.getParameter("userAge");
  out.println("<b>"+strMessage+"</b>"+"姓名:"+name+"    年龄:"+age+"<br><br>");
 strMessage="客户端使用的协议是:";
 strInformation=request.getProtocol();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
 strMessage="客户端文件路径:";
 strInformation=request.getServletPath();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="接受客户提交信息的长度:";
strInformation=""+request.getContentLength();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="response中定义的内容类型:";
strInformation=request.getContentType();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="当前页的Locale对象:";
strInformation=request.getLocale().toString();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="客户提交信息的方式:";
strInformation=request.getMethod();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="获取HTTP头文件中User-Agent的值:";
strInformation=request.getHeader("User-Agent");
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="获取HTTP头文件中accept的值:";
strInformation=request.getHeader("accept");
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="获取HTTP头文件中Host的值:";
strInformation=request.getHeader("Host");
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="获取HTTP头文件中accept-encoding的值:";
strInformation=request.getHeader("accept-encoding");
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="获取客户端的IP地址:";
strInformation=request.getRemoteAddr();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="获取客户端的机器名:";
strInformation=request.getRemoteHost();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="获取服务器的名称:";
strInformation=request.getServerName();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="获取服务器的端口号:";
strInformation=""+request.getServerPort();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="发出请求消息的客户端地址:";
strInformation=""+request.getRequestURI();
  out.println("<b>"+strMessage+"</b>"+strInformation+"<br><br>");
strMessage="获取客户端提交的所有参数的名字:";
  out.println("<b>"+strMessage+"</b>");
Enumeration enum1=request.getParameterNames();
while(enum1.hasMoreElements())
{
  String s=(String)enum1.nextElement();
  out.println(s);
}
out.println("<br><br>");
  strMessage="获取头名字的一个枚举:";
out.println("<b>"+strMessage+"</b>");
Enumeration enum_headed=request.getHeaderNames();
while(enum_headed.hasMoreElements())
{
  String s=(String)enum_headed.nextElement();
  out.println(s);
}
out.println("<br><br>");
  strMessage="获取头文件中指定头名字的全部值的一个枚举:";
out.println("<b>"+strMessage+"</b>");
Enumeration enum_headedValues=request.getHeaders("cookie");
while(enum_headedValues.hasMoreElements())
{
  String s=(String)enum_headedValues.nextElement();
  out.println(s);
}
  out.println("<br><br>");
%>
 </body>
</html>

●最后,把Request项目进行部署发布(如何部署发布请查看第1章的相关内容),其显示效果如图4.1所示。

图4.1 客户端表单显示效果

在图4.1的界面中,输入相应的姓名和年龄并单击“登录”按钮,就把客户端的表达信息提交到服务器端了;然后服务器端接受并处理这些信息;最后,系统将JSP文件处理的结果再返回给客户端,显示如图4.2所示结果。

图4.2 显示结果

从显示的结果中,我们可以分析出,request对象包含所有请求的信息,它被封装成Http Servlet Request接口,该接口所提供的方法可以分为以下四类。

(1)存储和取得属性的方法,如getAttribute()、setAttribute()等。

(2)能够取得请求参数的方法,如getParameter()、getParameterValues()等。

(3)能够取得请求HTTP标头的方法,如getHeader()、getDateHeader()等。

(4)其他方法,如取得请求的URL、IP和session的方法,如getRequestURL()、getRemoteAddr()、getSession()等。

可以通过查看某一个JSP页面所生成的Servlet代码,了解在_jspService()方法的上述对象的定义。