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()方法的上述对象的定义。