日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python做请求转发_RequestDispatcher实现请求转发

發布時間:2023/12/19 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python做请求转发_RequestDispatcher实现请求转发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當一個 Web 資源收到客戶端的請求后,如果希望服務器通知另外一個資源處理請求,那么這時可以通過 RequestDispatcher 接口的實例對象實現。ServletRequest 接口中定義了一個獲取 RequestDispatcher 對象的方法,如表 1 所示。

表 1 獲取 RequestDispatcher 對象的方法

方法聲明

功能描述

RequestDispatcher getRequestDispatcher (String path)

返回封裝了某條路徑所指定資源的 RequestDispatcher 對象。其中,參數 path 必須以“/”開頭,用于表示當前 Web 應用的根目錄。需要注意的是,WEB-INF 目錄中的內容對 RequestDispatcher 對象也是可見的。因此,傳遞給 getRequestDispatcher(String path) 方法的資源可以是 WEB-INF 目錄中的文件

獲取到 RequestDispatcher 對象后,最重要的工作就是通知其他 Web 資源處理當前的 Servlet 請求,為此,RequestDispatcher 接口定義了兩個相關方法,如表 2 所示。

表 2 RequestDispatcher 接口的方法

方法聲明

功能描述

forward(ServletRequest request,ServletResponse response)

該方法用于將請求從一個 Servlet 傳遞給另一個 Web 資源。在 Servlet 中,可以對請求做一個初步處理,然后通過調用這個方法,將請求傳遞給其他資源進行響應。需要注意的是,該方法必須在響應提交給客戶端之前被調用,否則將拋出 IllegalStateException 異常

include(ServletRequest request,ServletResponse response)

該方法用于將其他的資源作為當前響應內容包含進來

請求轉發

在 RequestDispatcher 接口中,forward() 方法可以實現請求轉發,include() 方法可以實現請求包含,本節將以請求轉發為例,講解 forward() 方法的使用。

在 Servlet 中,如果當前 Web 資源不想處理請求,則可以通過 forward() 方法將當前請求傳遞給其他的 Web 資源進行處理,這種方式稱為請求轉發。請求轉發的工作原理如圖 1 所示。

從圖 1 中可以看出,當客戶端訪問 Servlet1 時,可以通過 forward() 方法將請求轉發給其他 Web 資源,其他 Web 資源處理完請求后,直接將響應結果返回到客戶端。

了解了 forward() 方法的工作原理后,下面通過案例演示 forward() 方法的使用。在 servletDemo02 項目的 com.mengma.request 包中創建一個名為 RequestForwardServlet 的 Servlet 類,該類使用 forword() 方法將請求轉發到一個新的 Servlet 頁面,如下所示。

圖 1??forward() 方法的工作原理

package com.mengma.servlet;

import java.io.IOException;

import javax.servlet.*;

import javax.servlet.http.*;

public class RequestForwardServlet extends HttpServlet {

public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

request.setAttribute("username", "張三"); // 將數據存儲到request對象中

RequestDispatcher dispatcher = request.getRequestDispatcher("/ResultServlet");

dispatcher.forward(request,response);

}

public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException {

doGet(request,response);

}

}

在 RequestForwardServlet 中,通過使用 forward() 方法,將當前 Servlet 的請求轉發到 ResultServlet 頁面,在 com.mengma.request 包中編寫一個名為 ResultServlet 的 Servlet 類,該類用于獲取 RequestForwardServlet 類中存儲在 request 對象中的數據并輸出,ResultServlet 類的代碼實現如下所示。

package com.mengma.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 ResultServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

PrintWriter out = response.getWriter();

String username = (String) request.getAttribute("username");

if (username != null) {

out.println("用戶名:" + username + "
");

}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

啟動 Tomcat 服務器,在瀏覽器的地址欄中輸入地址 http://localhost:8080/servletDemo02/RequestForwardServlet 訪問 RequestForwardServlet,瀏覽器的顯示結果如圖 2 所示。

圖 2? 運行結果

從圖 2 中可以看出,地址欄中顯示的仍然是 RequestForwardServlet 的請求路徑,但是瀏覽器卻顯示出了 ResultServlet 中要輸出的內容。這是因為請求轉發是發生在服務器內部的行為,從 RequestForwardServlet 到 ResultServlet 屬于一次請求,在一次請求中是可以使用 request 屬性進行數據共享的。

總結

以上是生活随笔為你收集整理的python做请求转发_RequestDispatcher实现请求转发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。