首页 > 代码库 > Java Web中请求转发和请求包含

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的数据,而重定向不行。

Java Web中请求转发和请求包含