HttpServletRequest、HttpServletResponse、请求转发与重定向

HttpServletRequest、HttpServletResponse、请求转发与重定向由Servlet容器创建其实现类对象并传入service方法中。请求参数就是浏览器向服务器提交的数据2)浏览器向服务器如何发送数据a)附在url

欢迎大家来到IT世界,在知识的湖畔探索吧!

HttpServletRequest 接口

该接口是 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>

欢迎大家来到IT世界,在知识的湖畔探索吧!

3)使用HttpServletRequest对象获取请求参数

欢迎大家来到IT世界,在知识的湖畔探索吧!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 对象向浏览器输出数据

欢迎大家来到IT世界,在知识的湖畔探索吧!//通过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);
 }
}

转发与重定向的区别:

HttpServletRequest、HttpServletResponse、请求转发与重定向

图解转发和重定向

HttpServletRequest、HttpServletResponse、请求转发与重定向

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/36853.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信