更新時(shí)間:2022-01-04 10:34:25 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1489次
Servlet Redirect, HttpServletResponse是一個(gè)由SendRedirect()組成的接口,該方法的功能是將響應(yīng)重定向到其他頁(yè)面,例如JSP,HTML。它在瀏覽器端工作,因?yàn)樗褂?URL 欄并且它總是發(fā)送一個(gè)新請(qǐng)求。它將在服務(wù)器內(nèi)部和外部使用。以下是聲明SendRedirect()的語(yǔ)法。
response.sendRedirect("URL")
Servlet Redirect,下圖演示了web應(yīng)用中的Servlet Redirect方法
HTML servlet1(Servlet程序)的輸出將被丟棄,并且僅servlet2的HTML輸出將瀏覽器窗口作為響應(yīng)上顯示。
瀏覽器窗口向 servlet1 程序發(fā)出初始請(qǐng)求。
servlet1 程序的所有語(yǔ)句都執(zhí)行,包括res.sendRedirect方法。
Servlet1 根據(jù)作為參數(shù)值放置在sendRedirect()方法中的 URI 生成對(duì)瀏覽器窗口的隱式響應(yīng)。隱式響應(yīng)狀態(tài)碼為300-399,該碼表示重定向。
瀏覽器窗口使用來(lái)自隱式響應(yīng)代碼的 URL 向 servlet2 程序生成一個(gè)隱式請(qǐng)求,servlet2 程序的所有語(yǔ)句都會(huì)執(zhí)行。
servlet1 的輸出被丟棄,只有 servlet2 程序的 HTML 輸出顯示為最終響應(yīng)。
向前() | 發(fā)送重定向() |
---|---|
執(zhí)行 servlet 鏈接的 forward() 模式 | 執(zhí)行 sendRedirect() 通信模式 |
servlet 程序直接與目標(biāo) Web 資源程序通信。 | servlet 程序通過(guò)與瀏覽器窗口的網(wǎng)絡(luò)往返來(lái)與目標(biāo) servlet 程序通信 |
servlet 程序和目標(biāo) Web 資源程序使用相同的請(qǐng)求和響應(yīng)對(duì)象,因此請(qǐng)求在目標(biāo) Web 資源程序中是可見(jiàn)和可訪(fǎng)問(wèn)的。 | servlet 程序和目標(biāo) Web 資源程序不會(huì)使用相同的請(qǐng)求和響應(yīng)對(duì)象。所以請(qǐng)求數(shù)據(jù)在目標(biāo)程序中是不可見(jiàn)和不可訪(fǎng)問(wèn)的。然后sendRedirect 發(fā)送新請(qǐng)求。 |
在轉(zhuǎn)發(fā)請(qǐng)求期間 URL 顯示在瀏覽器窗口中并且不會(huì)更改。 | 在 sendRedirect 操作期間,瀏覽器窗口中的 URL 將被更改。 |
索引.html
<html>
<form action="./welcome">
<input type="submit" value="click here for splessons">
</form>
</html>
這里剛剛創(chuàng)建了“點(diǎn)擊這里查看 splessons”的提交按鈕,給定的 URL 是“./welcome”,確保這個(gè) URL 應(yīng)該與web.xml文件 URL匹配。
網(wǎng)頁(yè).xml
<web-app>
<servlet>
<servlet-name>DemoSendRedirect</servlet-name>
<servlet-class>sendredirect.SimpleSendRedirect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DemoSendRedirect</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>welcome.html</welcome-file>
</welcome-file-list>
</web-app>
如前所述,即DemoSendRedirect在兩個(gè)servlet和servlet-mapping中都應(yīng)該相同。
SimpleSendRedirect.java
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 SimpleSendRedirect extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String tutorialName = request.getParameter("name");
response.sendRedirect("https://www.splessons.com");
out.flush();
out.close();
}
}
Servlet 重定向,這里 setContentType(“text/html”) 的目的是,它基本上告訴客戶(hù)端它是什么內(nèi)容類(lèi)型,以便它知道如何處理它。將對(duì)象的格式化表示打印到文本輸出流。HttpServletResponse 接口的sendRedirect()方法可用于將響應(yīng)重定向到另一個(gè)資源,它可能是 servlet、jsp 或 html 文件。
輸出:
通過(guò)編譯程序,將顯示以下輸出。
當(dāng)單擊搜索按鈕時(shí),所需頁(yè)面將顯示如下。
歡迎.html
<html>
<form action="./welcome">
<h2>Enter your tutorial name<input type="text"name="name/">
<input type="submit"value="search">
</form>
</html>
這里創(chuàng)建了一個(gè)文本框來(lái)搜索所需的頁(yè)面,并創(chuàng)建了提交按鈕以將輸入提供給服務(wù)器。
網(wǎng)頁(yè).xml
<servlet>
<servlet-name>DemoSendRedirect</servlet-name>
<servlet-class>sendredirect.SimpleSendRedirect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DemoSendRedirect</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>welcome.html</welcome-file>
</welcome-file-list>
</web-app>
正如所討論的servlet 名稱(chēng)應(yīng)該相同并且URL應(yīng)該與 HTML 表單匹配。
DemoSendRedirect.java
package sendredirect;
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 SimpleSendRedirect extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String tutorialName = request.getParameter("name");
response.sendRedirect("https://www.splessons.com/lesson/"+tutorialName+"+tutorial/");
out.flush();
out.close();
}
}
所述的doGet()方法被用于參數(shù)與所述報(bào)頭信息一起發(fā)送到一個(gè)URL。HttpServletResponse 接口的sendRedirect()方法可用于將響應(yīng)重定向到另一個(gè)資源,它可能是 servlet、jsp 或 html 文件。
輸出:
編譯后,將顯示以下輸出程序。
單擊搜索按鈕時(shí),將顯示所需頁(yè)面。
在doGet() 中,參數(shù)與標(biāo)頭信息一起發(fā)送,而在doPost() 中,參數(shù)在正文中發(fā)送。
doGet() 將有發(fā)送數(shù)據(jù)的限制,而 doPost() 沒(méi)有限制。
doGet() 中的參數(shù)未加密,而 doPost() 中的參數(shù)已加密。
doGet() 方法用于從服務(wù)器獲取一些信息,doPost() 用于將一些信息發(fā)布到服務(wù)器。
所述的doGet()方法被用于參數(shù)與所述報(bào)頭信息一起發(fā)送到一個(gè)URL。
所述的doPost()方法被用于龐大的信息發(fā)送到一個(gè)URL。
這里的代碼應(yīng)該從 HTML 頁(yè)面調(diào)用。
以上就是關(guān)于“Servlet重定向詳解”的介紹,大家如果想了解更多相關(guān)知識(shí),可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Servlet教程,教程內(nèi)容由淺到深,通俗易懂,即使沒(méi)有基礎(chǔ)也很容易理解,希望對(duì)大家能夠有所幫助。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話(huà)與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743