实验2HTTP请求对象一、实验目的1.掌握如何获得请求参数;2.掌握如何检索请求头;3.了解如何通过请求对象获得客户信息;4.重点掌握使用请求对象存储数据和请求转发。二、实验原理对客户的请求,容器根据请求调用Servlet的相应doXxx()方法,该方法带有两个参数,一个是HttpServletRequest,一个是HttpServletResponse,它们分别表示请求对象和响应对象,它们是容器自动创建的两个对象。可以使用这两个接口定义的若干方法完成有关操作。三、实验内容与步骤(一)通过查询串传递请求参数,并在Servlet中检索请求参数【步骤1】编写下面的Servlet。packagecn.edu.servlet.request;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassHelloUserServletextendsHttpServlet{publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{StringuserName=request.getParameter(userName);PrintWriterpw=response.getWriter();pw.println(html);pw.println(head);pw.println(/head);pw.println(body);pw.println(h3Hello,+userName+/h3);pw.println(/body);pw.println(/html);}}【步骤2】在MyEcipse下查看web.xml文件,关键代码如下:servletservlet-nameHelloUserServlet/servlet-nameservlet-classcn.edu.servlet.request.HelloUserServle/servlet-class/servletservlet-mappingservlet-nameHelloUserServlet/servlet-nameurl-pattern/myHelloUserServlet/url-pattern/servlet-mapping【步骤3】使用下面的URL访问之。=tom效果:将userName的值改为你自己的名字(不要使用汉字),看输出结果。若不给出查询字符串,结果如何?参数值使用汉字如何?将userName的值改为自己的名字(不使用汉字)结果如下:若不给出查询字符串结果如下:参数值使用汉字结果如下:从该实验可知尽管未对response对象进行转码操作,但还是可以正确显示中文。(二)通过表单传递请求参数,使用HttpServletRequest对象获得请求参数【步骤1】首先编写一个input.html文件,存放在helloapp目录中。该页面在屏幕上显示一个表单,其中包括姓名和年龄域,点击“确定”按钮后,将表单参数传递给ParamServlet并显示出来。input.html代码如下:htmlheadtitle参数传递/titlemetahttp-equiv=Content-Typecontent=text/html;charset=UTF-8/headbodyh3从表单向Servlet传递参数/h3formmethod=GETaction=paramtest姓名:inputtype=textname=namebr年龄:inputtype=textname=agebrinputtype=submitvalue=确定inputtype=resetvalue=重置/form/body/html【步骤2】编写ParamServlet.java,其代码如下:packagecn.edu.servlet.request;importjava.io.*;importjava.util.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassParamServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setCharacterEncoding(UTF-8);response.setContentType(text/html;charset=UTF-8);Stringname=request.getParameter(name);name=newString(name.getBytes(iso8859-1),UTF-8);Stringage=request.getParameter(age);PrintWriterpw=response.getWriter();pw.println(html);pw.println(head);pw.println(/head);pw.println(body);pw.println(h3姓名:+name+/h3p);pw.println(h3年龄:+age+/h3p);pw.println(/body);pw.println(/html);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}【步骤3】查看web.xml文件,关键代码如下:servletservlet-nameParamServlet/servlet-nameservlet-classcn.edu.servlet.request.ParamServlet/servlet-class/servletservlet-mappingservlet-nameParamServlet/servlet-nameurl-pattern/myParamServlet/url-pattern/servlet-mapping【步骤4】测试参数传递。在浏览器的地址栏中输入:。输入数据,点击“确定”按钮,体会表单参数的传递。测试过程如下:测试结果:问题1:如何通过超链接的锚标签(ahref)传递请求参数?用get方式提交表单,形式如下ahref='oneGetAllCultivateEndCertificateServlet?page=1&hiddenA=A'(三)编写一个Servlet,显示所有请求头【步骤1】ShowHeadersServlet.java的Servlet能够检索所有的请求头,代码如下:packagecn.edu.servlet.request;importjava.io.*;importjava.util.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassShowHeadersServletextendsHttpServlet{publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setContentType(text/html;charset=gb2312);PrintWriterout=response.getWriter();out.println(html);out.println(headtitleAllHeaders/title);out.println(/head);out.println(bodybgcolor=\#fdf5e6\);out.println(h1align=\center\AllRequestHeaders/h1);out.println(tableborder=1align=\center\\n+trbgcolor=\#ffad00\\n+thHeaderNamethHeaderValue);EnumerationheaderNames=request.getHeaderNames();while(headerNames.hasMoreElements()){StringheaderName=(String)headerNames.nextElement();out.println(trtd+headerName);out.println(td+request.getHeader(headerName));}out.println(/table\n/body/html);}publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}【步骤2】修改web.xml,加入下面内容:servletservlet-nameShowHeadersServlet/servlet-nameservlet-classcn.edu.ShowHeadersServlet/servlet-class/servletservlet-mappingservlet-nameShowHeadersServlet/servlet-nameurl-pattern/myShowHeadersServlet/url-pattern/servlet-mapping【步骤3】在浏览器地址栏中输入下面URL访问该Servlet实验效果如下:(四)简单的综合应用【步骤1】创建一个名为input.html的HTML页面,其中包括一个表单,表单中包含两个文本域,分别供用户输入学号和姓名,该页面也包含提交和重置按钮。【步骤2】定义一个名为com.demo.Student类,其中包括学号sno和姓名name两个private的成员变量,定义访问和修改sno和name的方法。【步骤3】编写名为FirstServlet的Servlet,要求当用户在input.html中输入信息后点击“提交”按钮,请求FirstServlet对其处理。在FirstServlet中使用表单传递的参数(学号和姓名)创建一个Student对象并将其作为属性存储在请求对象中,然后获得通过请求对象的getRequestDispatcher()方法获得RequestDispatcher()对象,将请求转发到SecondServlet。【步骤4】在SecondServlet中取出请求对象上存储的Student对象,并显示输出该学生的学号和姓名。在Secon