servlet的請求包含(request.getRequestDispatcher().include())

請求包含:

1)通過request實現,與轉發一樣是通過RequestDispatcher,只是前者是rd.forward(req,resp),後者是rd.include(req,resp); 包含之後可以再包含其它servlet即1個servlet可同時包含多個servlet。

      2)在第1個servlet中out.flush(),對兩個servlet的輸出都沒有影響。但如果在第1個servlet中out.close(),則第1個之後的輸出以及第2個servlet中的輸出都無效(不會輸出),注意,後面的rd.include()仍然有效即第2個servlet雖然不能輸出但仍會執行,且沒有異常報出!
      3)頁面內容輸出順序: 
         servlet1..包含之前的輸出...
         servlet2.....(被包含的servlet輸出)
         servlet1..包含之後的輸出...
      4)由於該方式和轉發一樣是共享同一個request和response,因此有關頁面參數讀取和兩個servlet之間的傳參特性,同轉發!

      5)訪問順序(同轉發): 第1個GET方式,第2個走的是doGet()。 第1個POST方式,第2個走的是doPost()。

package cn.hncu.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 IncludeOneServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		System.out.println("IncludeOneServlet--Get...");
		//請求包含--也是用到request.getRequestDispatcher()分發器
		//請求包含這種方式--共享request和response
		
		PrintWriter out=response.getWriter();
		out.println("請求包含之前的輸出。。");
		out.flush();			//3.刷緩存後,後面的response的out流輸出都是有效的.
//		out.close();			//4.關流後,關流之後的out輸出無效,關流之前的輸出有效---也沒有異常拋出,異常在內部處理
		
		String name=request.getParameter("name");
		String age=request.getParameter("age");
		response.getWriter().println("IncludeOneServlet:"+name+","+age+"<br>");
		//與轉發不同的是
		request.getRequestDispatcher("/IncludeTwoServlet").include(request, response);
		
		//1.包含一次之後,還可以包含另外一個(可以包含多個)
		request.getRequestDispatcher("/aa").include(request, response);
		
		//2.請求包含執行之後,一定會回來繼續執行
		out.println("請求包含之後的輸出。。");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("IncludeOneServlet--Post...");
		//請求包含--也是用到request.getRequestDispatcher()分發器
		
		String name=request.getParameter("name");
		String age=request.getParameter("age");
		response.getWriter().println("IncludeOneServlet:"+name+","+age+"<br>");
		
		request.getRequestDispatcher("/IncludeTwoServlet").include(request, response);
		
	}

}


package cn.hncu.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class IncludeTwoServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("IncludeTwoServlet--Get...");
		
		response.getWriter().println("請求包含的輸出");
		//請求包含這種方式--共享request和response
		String name=request.getParameter("name");
		String age=request.getParameter("age");
		response.getWriter().println("IncludeTwoServlet"+name+","+age+"<br>");
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("IncludeTwoServlet--Post...");
		response.getWriter().println("請求包含的輸出");
		
		String name=request.getParameter("name");
		String age=request.getParameter("age");
		response.getWriter().println("IncludeTwoServlet"+name+","+age+"<br>");
		
	}

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章