客户端可通过 HTML 表单或在网页地址后面提供参数的方法提交数据,然后通过 request 对象的相关方法来获取这些数据。request 对象封装了客户端的请求信息,包括用户提交的信息以及客户端的一些信息,服务端通过 request 对象可以了解到客户端的需求,然后做出响应。
request 对象是 HttpServletRequest(接口)的实例。请求信息的内容包括请求的标题头(Header)信息(如浏览器的版本信息语言和编码方式等),请求的方式(如 HTTP 的 GET 方法、POST 方法等),请求的参数名称、参数值和客户端的主机名称等。
request 对象提供了一些方法,主要用来处理客户端浏览器提交的请求中的各项参数和选项。表 1 列出了 request 对象常用的方法。下面介绍 request 对象的应用。
方法 | 说明 |
---|---|
Object getAttribute(String name) | 用于返回由 name 指定的属性值,如果指定的属性值不存在, 则返回一个 null 值 |
Enumeration getAttributeNames() | 用于返回 request 对象的所有属性的名称集合 |
String getCharacterEncoding() | 用于返回一个 String,它包含请求正文中所使用的字符编码 |
int getContentLength() | 用于返回请求正文的长度(字节数),如果不确定,返回 -1 |
String getContenType() | 得到请求体的 MIME 类型 |
ServletlnputStream getInputStream() | 用于返回请求的输入流,用来显示请求中的数据 |
String getParameter(String name) | 用于获取客户端传送给服务器端的参数。主要由 name 指定, 通常是表单中的参数 |
Enumeration getParameterNames() | 用于获取客户端传送的所有参数的名字集合 |
String getParameterValues(String name) | 用于获得指定参数的所有值,由 name 指定 |
String getProtocol() | 用于返回客户端向服务器端传送数据所依据的协议名称 |
String getMethod() | 用于获得客户端向服务器端传送数据的参数方法,主要有两个, 分别是 get() 和 post() |
String getServerName() | 用于获得服务器端的主机名字 |
int getServletPath() | 用于获得 JSP 文件相对于根地址的地址 |
String getRemoteAddr() | 用于获得客户端的网络地址 |
String getRemoteHost() | 用于获取发送此请求的客户端主机名 |
String getRealPath(String path) | 用于获取一虚拟路径的真实路径 |
cookie[] get Cookie() | 用于获取所有的 Cookie 对象 |
void setAttribute(String key,Object obj) | 设置属性的属性值 |
boolean isSecure() | 返回布尔类型的值,用于确定这个请求是否使用了一个安全协 议,如 HTTP |
boolean isRequestedSessionldPromCookie() | 返回布尔类型的值,表示会话是否使用了一个 Cookie 来管理 会话 ID |
boolean isRequestedSessionIdFromURL() | 返回布尔类型的值,表示会话是否使用了一个URL来管理会话 ID |
boolean isRequestedSessionldFromVoid() | 检查请求的会话 ID 是否合法 |
获取客户信息
request 对象就是利用表 1 列举的那些 get 方法,来获取客户端的信息。
【例1】应用 request 对象获取客户信息,代码如下:
<%@ page contentType="text/html;charset=utf-8" %> <html> <head> <title> request对象获取客户信息 </title> </head> <body> 客户提交信息的方式:<%=request.getMethod() %> <br/> 使用的协议:<%=request.getProtocol() %> <br/> 获取提交数据的客户端IP地址:<%=request.getRemoteAddr() %> <br/> 获取服务器端的名称:<%=request.getServerName() %> <br/> 获取服务器端口号:<%=request.getServerPort() %> <br/> 获取客户端的机器名称:<%=request.getRemoteHost() %> <br/> </body> </html>
送行结果如图 1 所示。
图1 应用request对象获取客户信息
获取请求参数
用户借助表单向服务器提交数据,完成用户与网站之间的交互,大多数 Web 应用程序都是这样的。表单中包含文本框、列表、按钮等输入标记。当用户在表单中输入信息后,单击 Submit 按钮提交给服务器处理。
用户提交的表单数据存放在 request 对象里,通常在 JSP 代码中用 getParameter() 或者 getParameterValues() 方法来获取表单传送过来的数据,前者用于获取单值,如文本框、按钮等;后者用于获取数组,如复选框或者多选列表项。使用格式如下:
String getParameter(String name); String[] getParameterValues(String name);
以上两种方法的参数 name 与 HTML 标记的 name 属性对应,如果不存在,则返回 null。
另外要注意的是,利用 request 的方法获取表单数据时,默认情况下,字符编码为 ISO-8859-1,所以,当获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理。
首先,将获取的字符串用 ISO-8859-1 进行编码,并将编码存放到一个字节数组中,然后再将这个数组转化为字符串对象即可,这种方法仅适用于处理表单提交的单值数据或者查询字符串中所传递的参数。关键代码如下:
String s1=request.getParameter("UserName"); byte tempB[]=s1.getByte("ISO-8859-1"); String s1=new String(tempB);
在处理中文字符乱码问题时,下面设置编码格式的语句在获取表单提交的单值或者数组数据时都更为常用:
<% request.setCharacterEncoding("GBK"); //设置编码格式为中文编码,或者utf-8 %>
【例2】应用 request 对象获取请求参数。在 3-5.jsp 页面中,利用表单向 3-5-1.jsp 页面提交用户的注册信息,包括用户名、密码和爱好。
3-5.jsp 的代码如下:
<%@ page contentType="text/html;charset=utf-8" %> <html> <head> <title> request对象获取请求参数 </title> </head> <body> <h2> 个人注册 </h2> <form name="form1" method="post" action="3-5-1.jsp"> 用户名:<input name="username" type="text"/> <br> 密 码:<input name="pwd" type="text" /> <br> <input name="inst" type="checkbox" value="音乐">音乐 <input name="inst" type="checkbox" value="舞蹈">舞蹈 <input name="inst" type="checkbox" value="读书">读书 <input name="inst" type="checkbox" value="游泳">游泳 <br> <input type="submit" value="提交" /> <input type="reset" value="重置" /> </form> </body> </html>
3-5-1.jsp 的代码如下:
<%@ page contentType="text/html;charset=utf-8" %> <html> <head> <title> request对象获请求参数 </title> </head> <body> <h2> 获取到的注册信息如下:</h2> <% request.setCharacterEncoding("utf-8"); String username=request.getParameter("username"); String pwd=request.getParameter("pwd"); String inst[]=request.getParameterValues("inst"); out.println("用户名为:"+username+"<br>"); out.println("密码为:"+pwd+"<br>"); out.println("爱好为:"); for(int i=0;i<inst.length;i++) out.println(inst[i]+" "); %> </body> </html>
3-5.jsp 运行结果如图 2(a) 所示。程序 3-5.jsp 通过表单向 3-5-l.jsp 提交信息,3-5-l.jsp 通过 request 对象获取用户提交的表单数据并进行处理,运行结果如图 2(b) 所示。
a图
b图
感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程