servlet重定向詳解(八)
本文實例為大家分享了servlet重定向的具體內(nèi)容,供大家參考,具體內(nèi)容如下
1.重定向是什么?
這里說的重定向是由http協(xié)議規(guī)定的一種機制。其工作流程如下所述。
(1)客戶端發(fā)起http請求,訪問服務(wù)器端組件。
(2)服務(wù)器端返回一個狀態(tài)代碼為302的響應(yīng)結(jié)果。該代碼的意思是讓瀏覽器再訪問另一個組件,響應(yīng)結(jié)果中包含著訪問新組件的url地址。新的訪問組件可能在同一個應(yīng)用中也可能不在同一個應(yīng)用中。
(3)當瀏覽器接受到這種結(jié)果,會自動訪問新的url.
(4)瀏覽器端接受新的url返回結(jié)果。
2.實現(xiàn)
重定向通過Servlet API 中HttpServletReponse接口提供的 sendRedirect(String location)方法完成。
3.重定向特點
3.1 servlet源組件的響應(yīng)結(jié)果不會返回到客戶端。
3.2 servlet源組件和目標組件不會共享同一個ServletRequest對象。
3.3 如果源組件在進行重定向前提前提交響應(yīng)結(jié)果,會報異常。
3.4 重定向的地址不必是同一個服務(wù)器的應(yīng)用。
4.案例
Check1Servlet 第一次請求的類
package com.learn;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Created by Administrator on 2017/09/28.
*/
public class Check1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String userName = req.getParameter("name");
String message = "";
if(userName == null){
message = "please input your name";
} else {
message = userName;
}
req.setAttribute("mess",message);
PrintWriter out = resp.getWriter();
out.print("before redirect ");
System.out.println("before redirect");
resp.sendRedirect("out1?mess="+message);
out.print("after redirect");
System.out.println("after redirect");
out.close();
}
}
Out1Servlet 重定向的類
package com.learn;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Created by Administrator on 2017/09/28.
*/
public class Out1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String mess = (String) req.getAttribute("mess");
System.out.println("請求范圍內(nèi)的數(shù)據(jù):"+mess);
mess = req.getParameter("mess");
System.out.println("請求參數(shù)中的:"+mess);
PrintWriter out = resp.getWriter();
out.write(mess);
out.close();
}
}

控制臺輸出結(jié)果:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot多數(shù)據(jù)源配置的全過程記錄
在用SpringBoot開發(fā)項目時,隨著業(yè)務(wù)量的擴大,我們通常會進行數(shù)據(jù)庫拆分或是引入其他數(shù)據(jù)庫,從而我們需要配置多個數(shù)據(jù)源,下面這篇文章主要給大家介紹了關(guān)于SpringBoot多數(shù)據(jù)源配置的相關(guān)資料,需要的朋友可以參考下2021-11-11
SpringBoot使用TraceId進行日志鏈路追蹤的實現(xiàn)步驟
有時候一個業(yè)務(wù)調(diào)用鏈場景,很長,調(diào)了各種各樣的方法,看日志的時候,各個接口的日志穿插,確實讓人頭大,所以為了解決這個問題,本文給大家介紹了SpringBoot使用TraceId進行日志鏈路追蹤的實現(xiàn)步驟,需要的朋友可以參考下2024-11-11
解決SpringMvc中普通類注入Service為null的問題
這篇文章主要介紹了解決SpringMvc中普通類注入Service為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringBoot集成支付寶沙箱支付的實現(xiàn)示例
本文主要介紹了SpringBoot集成支付寶沙箱支付的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
java中hashCode方法與equals方法的用法總結(jié)
總的來說,Java中的集合(Collection)有兩類,一類是List,再有一類是Set。前者集合內(nèi)的元素是有序的,元素可以重復(fù);后者元素無序,但元素不可重復(fù)2013-10-10
利用ClasserLoader實現(xiàn)jar包加載并調(diào)用里面的方法
classloader即是類加載,虛擬機把描述類的數(shù)據(jù)從class字節(jié)碼文件加載到內(nèi)存,并對數(shù)據(jù)進行檢驗、轉(zhuǎn)換解析和初始化,了解java的類加載機制,可以快速解決運行時的各種加載問題并快速定位其背后的本質(zhì)原因,本文介紹了如何利用ClasserLoader來實現(xiàn)jar包加載并調(diào)用里面的方法2024-09-09

