Java Web中请求转发和请求包含
1、都是在一个请求中跨越多个Servlet
2、多个Servlet在一个请求中,他们共享request对象。就是在AServle中setAttribute()保存数据在BServlet中由getAttribute()取出数据
3、在AServlet转发到BServlet,那么整个请求都是由BServlet来完成,AServlet不再插手
4、AServlet 包含BServlet,那么两个Servlet共同完成请求
5、请求转发和请求包含都需要使用一个对象RequestDispatcher。
AServlet.java
package cn.edu.aynu.rjxy.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class AServlet extends HttpServlet { /* * 请求转发 * */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应头 response.setContentType("text/html;charset=utf-8"); response.getWriter().print("AServlet..."); request.setAttribute("name", "张三"); //获得RequestDispatcher对象 RequestDispatcher rd = request.getRequestDispatcher("/BServlet"); //将request对象和response对象传递给BServlet rd.forward(request, response); } }
BServlet.java
package cn.edu.aynu.rjxy.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class BServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name = (String) request.getAttribute("name"); response.getWriter().print("BServlet为您服务..."); response.getWriter().print("name="+name); } }
CServlet.java
package cn.edu.aynu.rjxy.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CServlet extends HttpServlet { /* * 请求包含 * */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置响应头 response.setContentType("text/html;charset=utf-8"); response.getWriter().print("AServlet为您服务..."); RequestDispatcher rd = request.getRequestDispatcher("/DServlet"); rd.include(request, response); } }
DSevler.java
package cn.edu.aynu.rjxy.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class DServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.getWriter().print("DServlet为您服务..."); } }
1、请求转发是一个请求,而重定向是两个请求
2、请求转发后浏览器地址栏不会发生变化重定向会发生变化
3、请求转发的目标只能在本项目中的资源,重定向的目标可以是其他应用
4、请求转发对Aservlet和Bservlet的请求方法是相同的,就是要么都是get,要么都是post。因为他们是同一个请求
5、请求转发可以在多个Servlet中共享request的数据,而重定向不行。
posted on 2016-09-28 07:58 kang_ya_ping 阅读(3903) 评论(0) 编辑 收藏 举报