更新時(shí)間:2023年01月10日12時(shí)03分 來(lái)源:傳智教育 瀏覽次數(shù):
在RequestDispatcher接口中,forward()方法可以實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā),include()方法可以實(shí)現(xiàn)請(qǐng)求包含,本節(jié)將以請(qǐng)求轉(zhuǎn)發(fā)為例,講解forward()方法的使用。
在Servlet中,如果當(dāng)前Web資源不想處理請(qǐng)求,則可以通過(guò)forward()方法將當(dāng)前請(qǐng)求傳遞給其他的Web資源進(jìn)行處理,這種方式稱為請(qǐng)求轉(zhuǎn)發(fā)。請(qǐng)求轉(zhuǎn)發(fā)的工作原理如圖10-8所示。
從圖10-8中可以看出,當(dāng)客戶端訪問(wèn)Servlet1時(shí),可以通過(guò)forward()方法將請(qǐng)求轉(zhuǎn)發(fā)給其他Web資源,其他Web資源處理完請(qǐng)求后,直接將響應(yīng)結(jié)果返回到客戶端。
了解了forward()方法的工作原理后,下面通過(guò)案例演示forward()方法的使用。在chapter10項(xiàng)目的com.itheima.request包中創(chuàng)建一個(gè)名為RequestForwardServlet的Servlet類,該類使用forward()方法將請(qǐng)求轉(zhuǎn)發(fā)到一個(gè)新的Servlet頁(yè)面,如文件10-5所示。
圖10-8 forward()方法的工作原理
文件10-5 RequestForwardServlet.java
package com.itheima.request; 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","張三"); //將數(shù)據(jù)存儲(chǔ)到request對(duì)象中 RequestDispatcher dispatcher=request .getRequestDispatcher("/ResultServlet"); dispatcher.forward(request, response); } public void daPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { doGet(request, response); } }
在文件10-5中,通過(guò)使用forward()方法,將當(dāng)前Servlet的請(qǐng)求轉(zhuǎn)發(fā)到ResultServlet頁(yè)面,在com.itheima.request包中編寫一個(gè)名為ResultServlet的Servlet類,該類用于獲取RequestForwardServlet類中存儲(chǔ)在request對(duì)象中的數(shù)據(jù)并輸出,ResultServlet類的代碼實(shí)現(xiàn)如文件10-6所示。
北京校區(qū)