HttpServletRequest对象⽅法的⽤法⼩结
深⼊体验JavaWeb开发内幕——关于HttpServletRequestRequest对象
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发⼈员通过这个对象的相关⽅法,即可以获得客户的这些信息。
⼀、通过request常⽤⽅法获得相关信息:
1、通过request常⽤⽅法获得客户机信息
getRequestURL⽅法返回客户端发出请求时的完整URL。
getRequestURI⽅法返回请求⾏中的资源名部分。
getQueryString ⽅法返回请求⾏中的参数部分。
getRemoteAddr⽅法返回发出请求的客户机的IP地址
getRemoteHost⽅法返回发出请求的客户机的完整主机名
getRemotePort⽅法返回客户机所使⽤的⽹络端⼝号
getLocalAddr⽅法返回WEB服务器的IP地址。
getLocalName⽅法返回WEB服务器的主机名
getMethod得到客户机请求⽅式
例如在Request.Java中加⼊如下代码:
//返回相关请求的信息
String RequestURI();
Stringrad = RemoteAddr();
Stringrh = RemoteHost();
Stringru = RemoteUser();
intrp = RemotePort();
Stringcp = ContextPath();
Stringla = LocalAddr();
Stringce = CharacterEncoding();
Stringgm = Method();
Stringqs = QueryString();
System.out.println(uri);
System.out.println(rad);
System.out.println(rh);
System.out.println(ru);
System.out.println(rp);
System.out.println(cp);
System.out.println(la);
System.out.println(ce);
System.out.println(gm);
System.out.println(qs);
即可获取相关信息。
2、通过request常⽤⽅法获得客户机请求头信息
getHead(name)⽅法
getHeaders(String name)⽅法
getHeaderNames⽅法
如:
private void getRequestValue(HttpServletRequest request) {
//获得客户机请求头及请求头的值
System.out.Header("method"));
Enumeration e = HeaderNames();
while(e.hasMoreElements()){
String name = (Element();
String value = Header(name);
System.out.println(name+":"+value);
}
}
3.获得客户机请求参数(客户端提交的数据)
getParameter(name):获取指定名称的参数值。这是最为常⽤的⽅法之⼀。
getParameterValues(String name):获取指定名称参数的所有值数组。它适⽤于⼀个参数名对应多个值的情况。如页⾯表单中的复选框,多选列表提交的值。
getParameterNames():返回⼀个包含请求消息中的所有参数名的Enumeration对象。通过遍历这个Enumeration对象,就可以获取请求消息中所有的参数名
getParameterMap():返回⼀个保存了请求消息中的所有参数名和值的Map对象。Map对象的key是字符串类型的参数名,value 是这个参数所对应的Object类型的值数组。
⼆、request的常见应⽤
1、各种表单输⼊项数据的获取
如可以获取form表单中的text、password、radio、checkbox、 file、select、textarea、 hidden、image、button等组件的值进⾏数据库操作或其他处理操作。
来看⼀个具体应⽤:
界⾯代码主体部分如下:
Register.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
<head>
<title>Register.html</title>
<metahttp-equivmetahttp-equiv="keywords"content="keyword1,keyword2,keyword3">
<metahttp-equivmetahttp-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
<!--<link rel="stylesheet" type="text/css"href="./styles.css" rel="external nofollow" >-->
</head>
<body>
<form action ="RequestLogin" method ="post">
⽤户名:<input type="text"name = "username" ><br/>
密码: <inputtypeinputtype="password" name = "password"><br/>
性别:<input type="radio"name = "sex" value ="male">男
<input type="radio" name = "sex" value="female">⼥<br/>
籍贯: <select name="city">
<option value ="HeBei">河北</option>
<opton value ="HuBei">湖北</opton>
<option value ="ShanXi">⼭西</option>
</select><br/>
简历:<br/>
&nsp;<textarea rows="5" cols="20" name="intro"></textarea>
<br/>
爱好:<br/>
<input type="checkbox" name="hobbies" value ="sing"/>唱歌
<input type="checkbox" name="hobbies" value ="dance"/>跳舞
<input type="checkbox" name="hobbies" value ="readbook"/>读书
<input type="checkbox" name="hobbies" value ="readnewspaper"/>看报<br/>
上传头像:<br/>
<input type="file" value="image" name ="browser"><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
然后,定义⼀个RequestLogin.java类通过request对象获取表单中组件的值:
如调⽤⾃定义⽅法:
private void getInformation(HttpServletRequest request)
throws UnsupportedEncodingException {
//取出参数值
String name = Parameter("username");
String pass = Parameter("password");
String sex = Parameter("sex");
String city = Parameter("city");
String intro = Parameter("intro");
String [] hobbies = ParameterValues("hobbies");
String hobby ="";
//hobbies!=null对所取值为空时进⾏设置
for(int i=0;hobbies!=null&&i<hobbies.length;i++)
{ String hovalue = hobbies[i]; hobby += hovalue; }
//获取头像信息 // String image = Parameter("image");
System.out.println("username:"+name);
System.out.println("password:"+pass);
System.out.println("sex:"+sex); System.out.println("city:"+city);
System.out.println("intro:"+intro); System.out.println("hobby:"+hobby);}
即可获取表单中组件的值。
2、请求参数的中⽂乱码问题
前⾯我们提到了Response对象中出现乱码问题及相应的解决措施,那么在Request中如何解决编码问题呢?
下⾯来看具体的例⼦:
例如我想将⼀个form表单中的信息提取到并在控制台输出如图:
假设在服务端并未Request对象给指定编码时即服务器端接收请求的字符编码为ISO8859-1,这时你在客户端添加信息如:
当填⼊的信息有中⽂时,假设设置表单的提交⽅式为post⽅式提交则在服务端输出如下:
此时输出结果出现乱码。
客户端主体代码同上:
Register.html
<body>
<form action ="RequestLogin" method ="post">
⽤户名:<input type="text" name = "username" ><br/>
密码: <input type="password" name = "password"><br/>
性别:<input type="radio" name = "sex" value ="male">男
<input type="radio" name = "sex" value ="female">⼥<br/>
籍贯: <select name ="city">
<option value ="HeBei">河北</option>
<opton value ="HuBei">湖北</opton>
<option value ="ShanXi">⼭西</option>
</select><br/>
简历:<br/>
&nsp;<textarea rows="5" cols="20" name ="intro"></textarea>
<br/>
爱好:<br/>
<input type="checkbox" name ="hobbies" value ="sing"/>唱歌
<input type="checkbox" name ="hobbies" value ="dance"/>跳舞
<input type="checkbox" name ="hobbies" value ="readbook"/>读书
<input type="checkbox" name ="hobbies" value ="readnewspaper"/>看报<br/> 上传头像:<br/>
<input type="file" value ="image" name ="browser"><br/>
<input type="submit" value ="提交"/>
</form>
</body>
服务端主体代码如下:
RequestLogin.java
package quest;
import java.io.IOException;
import java.io.PrintWriter;
importjava.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
htmlradio多选怎么用import javax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
public class RequestLogin extendsHttpServlet
{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
getInformation(request);
}
private voidgetParameter(HttpServletRequest request)
throws UnsupportedEncodingException
{
private voidgetInformation(HttpServletRequest request)
throws UnsupportedEncodingException {
//取出参数值
String name =Parameter("username");
String pass =Parameter("password");
String sex =Parameter("sex");
String city =Parameter("city");
String intro = Parameter("intro");
String [] hobbies =ParameterValues("hobbies");
String hobby ="";
//hobbies!=null对所取值为空时进⾏设置
for(inti=0;hobbies!=null&&i<hobbies.length;i++)
{ String hovalue = hobbies[i]; hobby +=hovalue; }
//获取头像信息 // String image = Parameter("image");
System.out.println("username:"+name);
System.out.println("password:"+pass);
System.out.println("sex:"+sex);System.out.println("city:"+city);
System.out.println("intro:"+intro);System.out.println("hobby:"+hobby);}
public void doPost(HttpServletRequestrequest, HttpServletResponse response)
throws ServletException, IOException{doGet(request, response);}}
这⾥会出现乱码问题,是因为你在RegisterLogin.java中并没有给Request对象设置编码集,⽽Request对象的默认编码集是ISO8859-1是不⽀持汉字的,所以你只需要在此类中为其指明相应的编码即可:
改正:在doGet⽅法中加⼊如下代码指明接收请求的编码⽅式:
request.setCharacterEncoding("utf-8");
即可输出:
但是这种修改⽅式只在提交⽅式为post时才有效。当提交⽅式为get时是不起作⽤的。
即;
<form action ="RequestLogin" method ="get">
时即便在
RequestLogin.java
中再设置
request.setCharacterEncoding("utf-8");
也不会起任何作⽤了程序还会输出如图所⽰信息:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。