HttpServletRequest工具代表客户真个要求,当客户端通过HTTP协议访问做事器时,HTTP要求头中的所有信息都封装在这个工具中,通过这个工具供应的方法,可以得到客户端要求的所有信息。

二、Request常用方法

2.1、得到客户机信息

jsp获取来访者ip地址的方法HttpServletRequest用法详解 jQuery

getRequestURL方法返回客户端发出要求时的完全URL。

getRequestURI方法返回要求行中的资源名部分。

getQueryString 方法返回要求行中的参数部分。

getPathInfo方法返回要求URL中的额外路径信息。
额外路径信息是要求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。

getRemoteAddr方法返回发出要求的客户机的IP地址。

getRemoteHost方法返回发出要求的客户机的完全主机名。

getRemotePort方法返回客户机所利用的网络端口号。

getLocalAddr方法返回WEB做事器的IP地址。

getLocalName方法返回WEB做事器的主机名。

范例:通过request工具获取客户端要求信息

1 package gacl.request.study;

2 import java.io.IOException;

3 import java.io.PrintWriter;

4 import javax.servlet.ServletException;

5 import javax.servlet.http.HttpServlet;

6 import javax.servlet.http.HttpServletRequest;

7 import javax.servlet.http.HttpServletResponse;

8 /

9 @author gacl

10 通过request工具获取客户端要求信息

11 /

12 public class RequestDemo01 extends HttpServlet {

13

14public void doGet(HttpServletRequest request, HttpServletResponse response)

15 throws ServletException, IOException {

16 /

17 1.得到客户机信息

18 /

19 String requestUrl = request.getRequestURL().toString();//得到要求的URL地址

20 String requestUri = request.getRequestURI();//得到要求的资源

21 String queryString = request.getQueryString();//得到要求的URL地址中附带的参数

22 String remoteAddr = request.getRemoteAddr();//得到来访者的IP地址

23 String remoteHost = request.getRemoteHost();

24 int remotePort = request.getRemotePort();

25 String remoteUser = request.getRemoteUser();

26 String method = request.getMethod();//得到要求URL地址时利用的方法

27 String pathInfo = request.getPathInfo();

28 String localAddr = request.getLocalAddr();//获取WEB做事器的IP地址

29 String localName = request.getLocalName();//获取WEB做事器的主机名

30 response.setCharacterEncoding(\公众UTF-8\"大众);//设置将字符以\"大众UTF-8\"大众编码输出到客户端浏览器

31 //通过设置相应头掌握浏览器以UTF-8的编码显示数据,如果不加这句话,那么浏览器显示的将是乱码

32 response.setHeader(\公众content-type\"大众, \公众text/html;charset=UTF-8\"大众);

33 PrintWriter out = response.getWriter();

34 out.write(\"大众获取到的客户机信息如下:\公众);

35 out.write(\"大众<hr/>\"大众);

6 out.write(\"大众要求的URL地址:\"大众+requestUrl);3

7 out.write(\"大众<br/>\公众);

38 out.write(\公众要求的资源:\"大众+requestUri);

39 out.write(\"大众<br/>\"大众);

40 out.write(\"大众要求的URL地址中附带的参数:\"大众+queryString);

41 out.write(\"大众<br/>\"大众);

42 out.write(\"大众来访者的IP地址:\"大众+remoteAddr);

43 out.write(\"大众<br/>\"大众);

44 out.write(\"大众来访者的主机名:\公众+remoteHost);

45 out.write(\公众<br/>\"大众);

46 out.write(\"大众利用的端口号:\公众+remotePort);

47 out.write(\"大众<br/>\公众);

48 out.write(\公众remoteUser:\公众+remoteUser);

49 out.write(\"大众<br/>\"大众);

50 out.write(\"大众要求利用的方法:\"大众+method);

51 out.write(\公众<br/>\"大众);

52 out.write(\"大众pathInfo:\"大众+pathInfo);

53 out.write(\"大众<br/>\"大众);

54 out.write(\"大众localAddr:\"大众+localAddr);55 out.write(\"大众<br/>\公众);

56 out.write(\"大众localName:\公众+localName);

57 }

59 public void doPost(HttpServletRequest request, HttpServletResponse response)

60 throws ServletException, IOException {

61 doGet(request, response);

62 }63 64 }

运行结果:

2.2、得到客户机要求头

getHeader(string name)方法:String

getHeaders(String name)方法:Enumeration

getHeaderNames()方法

1packagegacl.request.study;2importjava.io.IOException;3importjava.io.PrintWriter;4importjava.util.Enumeration;5importjavax.servlet.ServletException;6importjavax.servlet.http.HttpServlet;7importjavax.servlet.http.HttpServletRequest;8importjavax.servlet.http.HttpServletResponse;9/10@authorgacl11获取客户端要求头信息12客户端要求头:1314/15publicclassRequestDemo02extendsHttpServlet{17publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)18throwsServletException,IOException{19response.setCharacterEncoding(\公众UTF-8\"大众);//设置将字符以\"大众UTF-8\"大众编码输出到客户端浏览器20//通过设置相应头掌握浏览器以UTF-8的编码显示数据21response.setHeader(\"大众content-type\"大众,\"大众text/html;charset=UTF-8\"大众);22PrintWriterout=response.getWriter();23Enumeration<String>reqHeadInfos=request.getHeaderNames();//获取所有的要求头24out.write(\公众获取到的客户端所有的要求头信息如下:\"大众);25out.write(\公众<hr/>\"大众);26while(reqHeadInfos.hasMoreElements()){27StringheadName=(String)reqHeadInfos.nextElement();28StringheadValue=request.getHeader(headName);//根据要求头的名字获取对应的要求头的值29out.write(headName+\"大众:\"大众+headValue);30out.write(\"大众<br/>\公众);31}32out.write(\"大众<br/>\"大众);33out.write(\"大众获取到的客户端Accept-Encoding要求头的值:\公众);34out.write(\"大众<hr/>\"大众);35Stringvalue=request.getHeader(\公众Accept-Encoding\"大众);//获取Accept-Encoding要求头对应的值36out.write(value);38Enumeration<String>e=request.getHeaders(\公众Accept-Encoding\公众);39while(e.hasMoreElements()){40Stringstring=(String)e.nextElement();41System.out.println(string);42}43}45publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)46throwsServletException,IOException{47doGet(request,response);48}50}

通过request工具获取客户端要求头信息

运行结果如下:

2.3、得到客户机要求参数(客户端提交的数据)

getParameter(String)方法(常用)

getParameterValues(String name)方法(常用)

getParameterNames()方法(不常用)

getParameterMap()方法(编写框架时常用)

比如现在有如下的form表单

1<%@pagelanguage=\公众java\"大众import=\公众java.util.\"大众pageEncoding=\公众UTF-8\"大众%>2<!DOCTYPEHTMLPUBLIC\"大众-//W3C//DTDHTML4.01Transitional//EN\公众>3<html>4<head>5<title>Html的Form表单元素</title>6</head>7<fieldsetstyle=\公众width:500px;\"大众>8<legend>Html的Form表单元素</legend>9<!--form表单的action属性规定当提交表单时,向何处发送表单数据,method属性指明表单的提交办法,分为get和post,默认为get-->10<formaction=\"大众${pageContext.request.contextPath}/servlet/RequestDemo03\"大众method=\公众post\"大众>11<!--输入文本框,SIZE表示显示长度,maxlength表示最多输入长度-->12编&nbsp;&nbsp;号(文本框):13<inputtype=\公众text\"大众name=\公众userid\"大众value=\公众NO.\公众size=\"大众2\公众maxlength=\公众2\"大众><br>14<!--输入文本框,通过value指定其显示的默认值-->15用户名(文本框):<inputtype=\"大众text\"大众name=\公众username\"大众value=\"大众请输入用户名\公众><br>16<!--密码框,个中所有输入的内容都以密文的形式显示-->17密&nbsp;&nbsp;码(密码框):18<!--&nbsp;表示的是一个空格-->19<inputtype=\公众password\公众name=\"大众userpass\公众value=\"大众请输入密码\"大众><br>20<!--单选按钮,通过checked指定默认选中,名称必须一样,个中value为真正须要的内容-->21性&nbsp;&nbsp;别(单选框):22<inputtype=\"大众radio\"大众name=\"大众sex\"大众value=\"大众男\公众checked>男23<inputtype=\"大众radio\"大众name=\"大众sex\"大众value=\公众女\公众>女<br>24<!--下拉列表框,通过<option>元素指定下拉的选项-->25部&nbsp;&nbsp;门(下拉框):26<selectname=\公众dept\公众>27<optionvalue=\公众技能部\"大众>技能部</option>28<optionvalue=\"大众发卖部\"大众SELECTED>发卖部</option>29<optionvalue=\公众财务部\"大众>财务部</option>30</select><br>31<!--复选框,可以同时选择多个选项,名称必须一样,个中value为真正须要的内容-->32兴&nbsp;&nbsp;趣(复选框):33<inputtype=\公众checkbox\公众name=\"大众inst\"大众value=\公众唱歌\"大众>唱歌34<inputtype=\"大众checkbox\公众name=\"大众inst\"大众value=\"大众拍浮\"大众>拍浮35<inputtype=\"大众checkbox\"大众name=\"大众inst\"大众value=\公众舞蹈\"大众>舞蹈36<inputtype=\"大众checkbox\公众name=\"大众inst\"大众value=\"大众编程\"大众checked>编程37<inputtype=\"大众checkbox\"大众name=\"大众inst\"大众value=\"大众上网\"大众>上网38<br>39<!--大文本输入框,宽度为34列,高度为5行-->40说&nbsp;&nbsp;明(文本域):41<textareaname=\公众note\"大众cols=\"大众34\"大众rows=\公众5\公众>42</textarea>43<br>44<!--隐蔽域,在页面上无法看到,专门用来通报参数或者保存参数-->45<inputtype=\公众hidden\"大众name=\公众hiddenField\公众value=\"大众hiddenvalue\公众/>46<!--提交表单按钮,当点击提交后,所有填写的表单内容都会被传输到做事器端-->47<inputtype=\公众submit\公众value=\"大众提交(提交按钮)\公众>48<!--重置表单按钮,当点击重置后,所有表单恢复原始显示内容-->49<inputtype=\"大众reset\"大众value=\公众重置(重置按钮)\"大众>50</form>51<!--表单结束-->52</fieldset>53</body>54<!--完结标记-->55</html>56<!--完结标记-->

在Form表单中填写数据,然后提交到RequestDemo03这个Servlet进行处理,填写的表单数据如下:

在做事器端利用getParameter方法和getParameterValues方法吸收表单参数,代码如下:

1packagegacl.request.study;2importjava.io.IOException;3importjava.text.MessageFormat;4importjavax.servlet.ServletException;5importjavax.servlet.http.HttpServlet;6importjavax.servlet.http.HttpServletRequest;7importjavax.servlet.http.HttpServletResponse;8/9@authorgacl10获取客户端通过Form表单提交上来的参数11/12publicclassRequestDemo03extendsHttpServlet{1314publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)15throwsServletException,IOException{16//客户端因此UTF-8编码提交表单数据的,以是须要设置做事器端以UTF-8的编码进行吸收,否则对付中文数据就会产生乱码17request.setCharacterEncoding(\"大众UTF-8\"大众);18/19编&nbsp;&nbsp;号(文本框):20<inputtype=\"大众text\"大众name=\"大众userid\"大众value=\"大众NO.\公众size=\"大众2\"大众maxlength=\"大众2\"大众>21/22Stringuserid=request.getParameter(\"大众userid\"大众);//获取填写的编号,userid是文本框的名字,<inputtype=\"大众text\"大众name=\公众userid\公众>23/24用户名(文本框):<inputtype=\"大众text\公众name=\"大众username\"大众value=\"大众请输入用户名\"大众>25/26Stringusername=request.getParameter(\公众username\"大众);//获取填写的用户名27/28密&nbsp;&nbsp;码(密码框):<inputtype=\公众password\"大众name=\"大众userpass\"大众value=\公众请输入密码\"大众>29/30Stringuserpass=request.getParameter(\"大众userpass\"大众);//获取填写的密码31Stringsex=request.getParameter(\公众sex\"大众);//获取选中的性别32Stringdept=request.getParameter(\公众dept\"大众);//获取选中的部门33//获取选中的兴趣,由于可以选中多个值,以是获取到的值是一个字符串数组,因此须要利用getParameterValues方法来获取34String[]insts=request.getParameterValues(\"大众inst\公众);35Stringnote=request.getParameter(\公众note\公众);//获取填写的解释信息36StringhiddenField=request.getParameter(\公众hiddenField\"大众);//获取隐蔽域的内容3738StringinstStr=\"大众\"大众;39/40获取数组数据的技巧,可以避免insts数组为null时引发的空指针非常缺点!
41/42for(inti=0;insts!=null&&i<insts.length;i++){43if(i==insts.length-1){44instStr+=insts[i];45}else{46instStr+=insts[i]+\"大众,\"大众;47}48}4950StringhtmlStr=\公众<table>\公众+51\"大众<tr><td>填写的编号:</td><td>{0}</td></tr>\"大众+52\公众<tr><td>填写的用户名:</td><td>{1}</td></tr>\公众+53\"大众<tr><td>填写的密码:</td><td>{2}</td></tr>\"大众+54\"大众<tr><td>选中的性别:</td><td>{3}</td></tr>\"大众+55\公众<tr><td>选中的部门:</td><td>{4}</td></tr>\公众+56\"大众<tr><td>选中的兴趣:</td><td>{5}</td></tr>\"大众+57\公众<tr><td>填写的解释:</td><td>{6}</td></tr>\"大众+58\公众<tr><td>隐蔽域的内容:</td><td>{7}</td></tr>\"大众+59\"大众</table>\"大众;60htmlStr=MessageFormat.format(htmlStr,userid,username,userpass,sex,dept,instStr,note,hiddenField);6162response.setCharacterEncoding(\"大众UTF-8\公众);//设置做事器端以UTF-8编码输出数据到客户端63response.setContentType(\"大众text/html;charset=UTF-8\公众);//设置客户端浏览器以UTF-8编码解析数据64response.getWriter().write(htmlStr);//输出htmlStr里面的内容到客户端浏览器显示65}6667publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)68throwsServletException,IOException{69doGet(request,response);70}71}

运行结果如下:

在做事器端利用getParameterNames方法吸收表单参数,代码如下:

1Enumeration<String>paramNames=request.getParameterNames();//获取所有的参数名2while(paramNames.hasMoreElements()){3Stringname=paramNames.nextElement();//得到参数名4Stringvalue=request.getParameter(name);//通过参数名获取对应的值5System.out.println(MessageFormat.format(\"大众{0}={1}\"大众,name,value));6}

运行结果如下:

在做事器端利用getParameterMap方法吸收表单参数,代码如下:

1//request工具封装的参数因此Map的形式存储的2Map<String,String[]>paramMap=request.getParameterMap();3for(Map.Entry<String,String[]>entry:paramMap.entrySet()){4StringparamName=entry.getKey();5StringparamValue=\"大众\公众;6String[]paramValueArr=entry.getValue();7for(inti=0;paramValueArr!=null&&i<paramValueArr.length;i++){8if(i==paramValueArr.length-1){9paramValue+=paramValueArr[i];10}else{11paramValue+=paramValueArr[i]+\"大众,\"大众;12}13}14System.out.println(MessageFormat.format(\公众{0}={1}\公众,paramName,paramValue));15}

运行结果如下:

三、request吸收表单提交中文参数乱码问题

3.1、以POST办法提交表单中文参数的乱码问题

例如有如下的form表单页面:

1<%@pagelanguage=\公众java\"大众import=\公众java.util.\"大众pageEncoding=\"大众UTF-8\"大众%>23<!DOCTYPEHTMLPUBLIC\"大众-//W3C//DTDHTML4.01Transitional//EN\公众>4<html>5<head>6<title>request吸收中文参数乱码问题</title>7</head>9<body>10<formaction=\"大众<%=request.getContextPath()%>/servlet/RequestDemo04\"大众method=\"大众post\"大众>11用户名:<inputtype=\"大众text\"大众name=\公众userName\公众/>12<inputtype=\"大众submit\"大众value=\"大众post办法提交表单\"大众>13</form>14</body>15</html>

此时在做事器端吸收中文参数时就会涌现中文乱码,如下所示:

3.2、post办法提交中文数据乱码产生的缘故原由和解决办法

可以看到,之以是会产生乱码,便是由于做事器和客户端沟通的编码不一致造成的,因此办理的办法是:在客户端和做事器之间设置一个统一的编码,之后就按照此编码进行数据的传输和吸收。

由于客户端因此UTF-8字符编码将表单数据传输到做事器真个,因此做事器也须要设置以UTF-8字符编码进行吸收,要想完成此操作,做事器可以直策应用从ServletRequest接口继续而来的\"大众setCharacterEncoding(charset)\"大众方法进行统一的编码设置。
修正后的代码如下:

1publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)2throwsServletException,IOException{3/4客户端因此UTF-8编码传输数据到做事器真个,以是须要设置做事器端以UTF-8的编码进行吸收,否则对付中文数据就会产生乱码5/6request.setCharacterEncoding(\"大众UTF-8\"大众);7StringuserName=request.getParameter(\"大众userName\"大众);8System.out.println(\公众userName:\"大众+userName);9}

利用request.setCharacterEncoding(\"大众UTF-8\公众);设置做事器以UTF-8的编码吸收数据后,此时就不会产生中文乱码问题了,如下所示:

3.3、以GET办法提交表单中文参数的乱码问题

例如有如下的form表单页面:

1<%@pagelanguage=\"大众java\"大众import=\"大众java.util.\"大众pageEncoding=\公众UTF-8\"大众%>23<!DOCTYPEHTMLPUBLIC\公众-//W3C//DTDHTML4.01Transitional//EN\"大众>4<html>5<head>6<title>request吸收中文参数乱码问题</title>7</head>89<body>10<formaction=\"大众${pageContext.request.contextPath}/servlet/RequestDemo04\公众method=\公众get\公众>11姓名:<inputtype=\公众text\"大众name=\"大众name\公众/>12<inputtype=\"大众submit\"大众value=\"大众get办法提交表单\"大众>13</form>14</body>15</html>

此时在做事器端吸收中文参数时就会涌现中文乱码,如下所示:

那么这个中文乱码问题又该如何办理呢,是否可以通过request.setCharacterEncoding(\"大众UTF-8\"大众);设置做事器以UTF-8的编码进行吸收这种办法来办理中文乱码问题呢,把稳,对付以get办法传输的中文数据,通过request.setCharacterEncoding(\"大众UTF-8\"大众);这种办法是办理不了中文乱码问题,如下所示:

3.4、get办法提交中文数据乱码产生的缘故原由和解决办法

对付以get办法传输的数据,request纵然设置了以指定的编码吸收数据也是无效的(至于为什么无效我也没有弄明白),默认的还是利用ISO8859-1这个字符编码来吸收数据,客户端以UTF-8的编码传输数据到做事器端,而做事器真个request工具利用的是ISO8859-1这个字符编码来吸收数据,做事器和客户端沟通的编码不一致因此才会产生中文乱码的。
办理办法:在吸收到数据后,先获取request工具以ISO8859-1字符编码吸收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,办理乱码问题。
代码如下:

1publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)2throwsServletException,IOException{3/45对付以get办法传输的数据,request纵然设置了以指定的编码吸收数据也是无效的,默认的还是利用ISO8859-1这个字符编码来吸收数据6/7Stringname=request.getParameter(\"大众name\"大众);//吸收数据8name=newString(name.getBytes(\"大众ISO8859-1\"大众),\"大众UTF-8\公众);//获取request工具以ISO8859-1字符编码吸收到的原始数据的字节数组,然后通过字节数组以指定的编码构建字符串,办理乱码问题9System.out.println(\公众name:\"大众+name);10}

运行结果如下:

3.5、以超链接形式通报中文参数的乱码问题

客户端想传输数据到做事器,可以通过表单提交的形式,也可以通过超链接后面加参数的形式,例如:

1<ahref=\"大众${pageContext.request.contextPath}/servlet/RequestDemo05?userName=gacl&name=徐达沛\"大众>点击</a>

点击超链接,数据因此get的办法传输到做事器的,以是吸收中文数据时也会产生中文乱码问题,而办理中文乱码问题的办法与上述的以get办法提交表单中文数据乱码处理问题的办法同等,如下所示:

1Stringname=request.getParameter(\公众name\公众);2name=newString(name.getBytes(\"大众ISO8859-1\公众),\公众UTF-8\"大众);

其余,须要提的一点便是URL地址后面如果跟了中文数据,那么中文参数最好利用URL编码进行处理,如下所示:

1<ahref=\"大众${pageContext.request.contextPath}/servlet/RequestDemo05?userName=gacl&name=<%=URLEncoder.encode(\"大众徐达沛\公众,\"大众UTF-8\"大众)%>\公众>点击</a>

3.6、提交中文数据乱码问题总结

1、如果提交办法为post,想不乱码,只须要在做事器端设置request工具的编码即可,客户端以哪种编码提交的,做事器真个request工具就以对应的编码吸收,比如客户端因此UTF-8编码提交的,那么做事器端request工具就以UTF-8编码吸收(request.setCharacterEncoding(\"大众UTF-8\"大众))

2、如果提交办法为get,设置request工具的编码是无效的,request工具还是以默认的ISO8859-1编码吸收数据,因此要想不乱码,只能在吸收到数据后再手工转换,步骤如下:

1).获取获取客户端提交上来的数据,得到的是乱码字符串,data=\"大众???è?????\"大众

String data = request.getParameter(\"大众paramName\"大众);

2).查找ISO8859-1码表,得到客户机提交的原始数据的字节数组

byte[] source = data.getBytes(\"大众ISO8859-1\"大众);

3).通过字节数组以指定的编码构建字符串,办理乱码

data = new String(source, \"大众UTF-8\"大众);

通过字节数组以指定的编码构建字符串,这里指定的编码是根据客户端那边提交数据时利用的字符编码来定的,如果是GB2312,那么就设置成data = new String(source, \"大众GB2312\公众),如果是UTF-8,那么就设置成data = new String(source, \"大众UTF-8\"大众)

四、Request工具实现要求转发

4.1、要求转发的基本观点

要求转发:指一个web资源收到客户端要求后,关照做事器去调用其余一个web资源进行处理。

要求转发的运用处景:MVC设计模式

在Servlet中实现要求转发的两种办法:

1、通过ServletContext的getRequestDispatcher(String path)方法,该方法返回一个RequestDispatcher工具,调用这个工具的forward方法可以实现要求转发。

例如:将要求转发的test.jsp页面

1RequestDispatcherreqDispatcher=this.getServletContext().getRequestDispatcher(\公众/test.jsp\"大众);2reqDispatcher.forward(request,response);

2、通过request工具供应的getRequestDispatche(String path)方法,该方法返回一个RequestDispatcher工具,调用这个工具的forward方法可以实现要求转发。

例如:将要求转发的test.jsp页面

1request.getRequestDispatcher(\"大众/test.jsp\"大众).forward(request,response);

request工具同时也是一个域工具(Map容器),开拓职员通过request工具在实现转发时,把数据通过request工具带给其它web资源处理。

例如:要求RequestDemo06 Servlet,RequestDemo06将要求转发到test.jsp页面

1packagegacl.request.study;23importjava.io.IOException;4importjavax.servlet.ServletException;5importjavax.servlet.http.HttpServlet;6importjavax.servlet.http.HttpServletRequest;7importjavax.servlet.http.HttpServletResponse;89publicclassRequestDemo06extendsHttpServlet{1011publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)12throwsServletException,IOException{1314Stringdata=\"大众大家好,我是孤傲苍狼,我正在总结JavaWeb\"大众;15/16将数据存放到request工具中,此时把request工具当作一个Map容器来利用17/18request.setAttribute(\"大众data\"大众,data);19//客户端访问RequestDemo06这个Servlet后,RequestDemo06关照做事器将要求转发(forward)到test.jsp页面进行处理20request.getRequestDispatcher(\"大众/test.jsp\公众).forward(request,response);21}2223publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)24throwsServletException,IOException{25doGet(request,response);26}27}

test.jsp页面代码如下:

1<%@pagelanguage=\公众java\"大众import=\"大众java.util.\公众pageEncoding=\"大众UTF-8\"大众%>3<!DOCTYPEHTMLPUBLIC\公众-//W3C//DTDHTML4.01Transitional//EN\公众>4<html>5<head>6<title>Request工具实现要求转发</title>7</head>89<body>10利用普通办法取出存储在request工具中的数据:11<h3style=\"大众color:red;\"大众><%=(String)request.getAttribute(\"大众data\"大众)%></h3>12利用EL表达式取出存储在request工具中的数据:13<h3style=\"大众color:red;\公众>${data}</h3>14</body>15</html>

运行结果如下:

request工具作为一个域工具(Map容器)利用时,紧张是通过以下的四个方法来操作

setAttribute(String name,Object o)方法,将数据作为request工具的一个属性存放到request工具中,例如:request.setAttribute(\"大众data\"大众, data);

getAttribute(String name)方法,获取request工具的name属性的属性值,例如:request.getAttribute(\公众data\"大众)

removeAttribute(String name)方法,移除request工具的name属性,例如:request.removeAttribute(\"大众data\"大众)

getAttributeNames方法,获取request工具的所有属性名,返回的是一个,例如:Enumeration<String> attrNames = request.getAttributeNames();

4.2、要求重定向和要求转发的差异

一个web资源收到客户端要求后,关照做事器去调用其余一个web资源进行处理,称之为要求转发/307。

一个web资源收到客户端要求后,关照浏览器去访问其余一个web资源进行处理,称之为要求重定向/302。