该接口是 ServletRequest 接口的子接口,封装了 HTTP 要求的干系信息,由 Servlet 容器创建 实在现类工具并传入 service(ServletRequest req, ServletResponse res)方法中。我们要求的详细 信息都可以通过 HttpServletRequest 接口的实现类工具获取。这个实现类工具一样平常都是容器创建的,我们不须要管理。
HttpServletRequest 紧张功能
获取要求参数
1)什么是要求参数?
要求参数便是浏览器向做事器提交的数据
2)浏览器向做事器如何发送数据
a)附在 url 后面,如: h t t p : // l o c a l ho s t : 89 8 9 / M y S e r v l e t / M y H tt p S e r v l e t ? u s e r I d = 2 0
b)通过表单提交
<form action=\"大众MyHttpServlet\公众 method=\"大众post\公众> 你喜好的足球队<br /><br /> 巴西<input type=\公众checkbox\"大众 name=\"大众soccerTeam\公众 value=\"大众Brazil\"大众 /> 德国<input type=\"大众checkbox\公众 name=\公众soccerTeam\"大众 value=\"大众German\公众 /> 荷兰<input type=\公众checkbox\公众 name=\"大众soccerTeam\"大众 value=\"大众Holland\"大众 /> <input type=\"大众submit\公众 value=\"大众提交\"大众 /></form>
3)利用HttpServletRequest工具获取要求参数
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //一个name对应一个值 String userId = request.getParameter(\"大众userId\"大众); System.out.println(\"大众userId=\"大众+userId);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //一个name对应一组值 String[] soccerTeams = request.getParameterValues(\公众soccerTeam\公众); for(int i = 0; i < soccerTeams.length; i++){ System.out.println(\"大众team \公众+i+\"大众=\"大众+soccerTeams[i]); }}
在要求域中保存数据
数据保存在要求域中,可以转发到其他Servlet或者jsp页面,这些Servlet或者jsp 页面就会 从要求中再取出数据
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //将数据保存到request工具的属性域中request.setAttribute(\"大众attrName\"大众, \"大众attrValueInRequest\"大众); //两个Servlet要想共享request工具中的数据,必须是转发的关系 request.getRequestDispatcher(\"大众/ReceiveServlet\"大众).forward(request, response);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //从request属性域中获取数据 Object attribute = request.getAttribute(\公众attrName\"大众); System.out.println(\"大众attrValue=\"大众+attribute);}
HttpServletResponse接口
HttpServletResponse 是 ServletResponse 接口的子接口,封装了 HTTP 相应的干系信息,由
Servlet 容器创建实在现类工具并传入 service(ServletRequest req, ServletResponse res)方法中。紧张功能:
1 )利用 PrintWriter 工具向浏览器输出数据
//通过PrintWriter工具向浏览器端发送相应信息PrintWriter writer = res.getWriter();writer.write(\"大众Servlet response\"大众); writer.close();
2)实现要求重定向
要求转发与重定向
要求转发和重定向是 web 运用页面跳转的紧张手段,运用十分广泛,以是我们一定要搞清楚他们的差异。
要求转发:
1) 第一个 Servlet 吸收到了浏览器真个要求,进行了一定的处理,然后没有立即对要求进行相应,而是将要求“交给下一个 Servlet”连续处理,下一个 Servlet 处理完成之后对浏览器进行了相应。在做事器内部将要求“交给”其它组件连续处理便是要求的转发。对浏览器来说,一共只发了一次要求,做事器内部进行的“转发”浏览器觉得不到,同时浏览器地址栏中的地址不会变成“下一个 Servlet”的虚拟路径。
2 )在转发的情形下,两个 Servlet 可以共享 Request 工具中保存的数据
3 )转发的情形下,可以访问 WEB-INF 下的资源
4) 当须要将后台获取的数据传送到 JSP 上显示的时候,就可以先将数据存放到 Request 工具中,再转发到 JSP 从属性域中获取。此时由于是“转发”,以是它们二者共享 Request 工具中的数据。
public class ForwardServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(\"大众forwardServlet doGet\"大众); //要求的转发 //1.调用HTTPServletRequest 的getRequestDispatcher()方法获取RequestDispatcher工具 //调用getRequestDispatcher()方法时须要传入转发的地址 String path = \公众testServlet\公众; RequestDispatcher requestDispatcher = request.getRequestDispatcher(\公众/\"大众+path); //2.调用调用HTTPServletRequest 的forward(request,response)进行要求的转发 requestDispatcher.forward(request,response); }}
要求重定向:
1) 第一个 Servlet 吸收到了浏览器真个要求,进行了一定的处理,然后给浏览器一个分外的相应,这个分外的相应会关照浏览器去访问其余一个资源,这个动作是做事器和浏览器自动完成的,但是在浏览器地址栏里面能够看到地址的改变,会变成下一个资源的地址。
2)对浏览器来说,一共发送两个要求,以是用户是能够感知到变革的。
3 )在重定向的情形下,不能共享 Request 工具中保存的数据。
public class RedirectServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(\公众RedirectServlet doGet\公众); //实行要求的重定向,直接调用reponse.sendRedirect(path)方法 //path为重定向的地址 String path = \"大众testServlet\"大众; response.sendRedirect(path); }}
转发与重定向的差异:
图解转发和重定向