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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM