重定向與轉發,絕對路徑
/** 1. 請求和響應 * 請求:客戶端向伺服器 * 型別:HttpServletRequest request * 定義:代表了客戶端向伺服器傳送的請求報文,該物件由伺服器(web容器|Servlet容器)建立, 同時傳送給Service(),Service()傳送給doGet()或doPost()。 * 作用 1. 獲取請求引數 * request.getParameter("username"); * request.getParameterValues(name) 2. 獲取專案的虛擬路徑 * request.getContextPath(); 3. 轉發(路徑跳轉) * request.getRequestDispatcher("").forward(request, response); 4. 域物件(哥四個) * 響應:伺服器向客戶端 * 型別: HttpServletResponse response * 定義:代表了伺服器向客戶端傳送的響應報文,該物件由伺服器(web容器|Servlet容器)建立, 同時傳送給Service(),Service()傳送給doGet()或doPost()。 * 作用 1. 伺服器向客戶端做出響應(文字|html) * response.getWriter(); * write();|print(); 2. 重定向(路徑跳轉) * response.sendRedirect(); 2. 轉發與重定向區別 * 轉發位址列不變,重定向位址列改變。 * 轉發客戶端傳送一次請求,重定向客戶端傳送兩次請求。 * 轉發可以訪問WEB-INF下資源,重定向不能。 * 因為WEB-INF目錄屬於Web應用的私有目錄(客戶端無法直接訪問) * 轉發可以攜帶request物件,重定向不能。 3. Servlet練習(偽登入|偽註冊)User:admin2,admin2 4. Web應用中路徑問題 * 在web應用中,由於使用轉發跳轉路徑時,位址列不變。此時使用相對路徑(../)存在404現象。 固使用絕對路徑,解決web應用中的路徑問題 * 什麼是絕對路徑,以“/”開頭的路徑,稱之為絕對路徑。 * “/”代表意思 * 由伺服器解析,代表著當前專案路徑:http://localhost:8080/day06_servletdemo2 * 以下兩種情況由伺服器解析 1. web.xml中的url 2. 轉發 * 由瀏覽器解析,代表著當前伺服器路徑:http://localhost:8080 * 以下兩種情況由瀏覽器解析 1. html中的路徑,eg:src:script|img href:link|a action:form 2. 重定向 5. Web應用中亂碼問題 * 亂碼:編碼與解碼不一致時,出現亂碼現在 * 請求亂碼:客戶端編碼與伺服器解碼不一致 * 響應亂碼:伺服器編碼與客戶端解碼不一致 * 編碼:將字元轉換為二進位制的過程稱之為編碼 * 解碼:將二進位制轉換為字元的過程稱之為解碼 * 預設客戶端與伺服器端編碼與解碼請情況 * 伺服器的編碼與解碼預設一致為:ISO-8859-1 * 客戶端(瀏覽器)編碼預設為:<meta charset="UTF-8"> 解碼預設為:GBK * 解決web中亂碼問題 * 請求亂碼 * POST請求:request.setCharacterEncoding("UTF-8"); * GET請求:server.xml中修改,URIEncoding="UTF-8" * eg:<Connector port="8080" URIEncoding="UTF-8"/> * 響應亂碼 * 直接將伺服器編碼設定為GBK * response.setCharacterEncoding("GBK"); * 將伺服器編碼與瀏覽器解碼設定為UTF-8 * response.setContentType("text/html;charset=UTF-8"); * Tomcat8.0之前預設編碼為:ISO-8859-1 Tomcat8.0之後(含8.0)預設編碼為:UTF-8
package com.atguigu.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class EndServlet */ public class EndServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //測試request物件 System.out.println("doGet()"); //1.通過name, 獲取請求引數, String username = request.getParameter("username"); // request.getParameterValues(name) System.out.println("username:"+username); //2. 獲取專案的虛擬路徑 String contextPath = request.getContextPath(); System.out.println("contextPath:"+contextPath); //轉發 //獲取轉發器 RequestDispatcher requestDispatcher = request.getRequestDispatcher("login_success.html"); //執行轉發 requestDispatcher.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // response.setCharacterEncoding("GBK"); response.setContentType("text/html;charset=UTF-8"); System.out.println("doPost()"); //測試response //伺服器向客戶端做出響應(文字|html) //獲取響應流 PrintWriter writer = response.getWriter(); //響應 writer.write("登入成功login success!"); //2. 重定向(路徑跳轉) // response.sendRedirect("login_success.html"); } }
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>form空白</title> <base href="/day06_servletdemo2/"> <script type="text/javascript"> window.onload = function(){ var btnEle = document.getElementById("btnSub"); btnEle.onclick = function(){ //1.取使用者名稱值 var uname = document.getElementById("username").value; if(uname == null || "" == uname){ alert("使用者名稱不能為空,請重新輸入!"); // var yOn = confirm("確認刪除嗎?"); // alert(yOn); //取消預設行為 return false; } } } </script> </head> <body> <h1>登入</h1> <form action="LoginServlet"> <table> <tr> <td>使用者名稱:</td> <td><input type="text" name="username" id="username"></td> </tr> <tr> <td align="right">密碼:</td> <td><input type="password" name="pwd"></td> </tr> <tr> <td colspan="2" align="center"> <input type="reset"> <input id="btnSub" type="submit" value="登入"> </td> </tr> </table> </form> <a href="index.html">回首頁</a> </body> </html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<base href="/day06_servletdemo2/">
</head>
<body>
<h1>登入成功</h1>
<a href="index.html">回首頁</a>
</body>
</html>
相關推薦
重定向與轉發,絕對路徑
/** 1. 請求和響應 * 請求:客戶端向伺服器 * 型別:HttpServletRequest
JSP內建物件request,response,重定向與轉發
什麼是JSP內建物件? JSP內建物件時Web容器建立的一組物件。 JSP內建物件的名稱是JSP的保留字。 JSP內建物件時可以直接在JSP頁面使用的物件,無需使用new獲取例項。 九大內建物件: 特點: 不需要新建例項(new) 是JSP當中的關鍵字
重定向與檔案,具體原理篇
文章目錄 重定向與檔案具體原理(對具體實現中的知識點說明) 1.單字元I/O:getchar()和putchar() 2.結束鍵盤輸入 3.0 重定向與檔案 3.1 重定向輸入 3.2 重定向輸出
SpringMVC學習筆記(三、重定向與轉發)
SpringMVC中重定向與轉發通過return實現 重定向: return “redirect:/重定向頁面路徑” 轉發: return “forward:/轉發頁面路徑” 使用示例: @RequestMapping("/test2") pub
通過C#輸入輸出重定向與OutputDataReceived ,將cmd的執行程式,隱藏到後臺執行
問題: 有個exe程式,執行後會顯示cmd介面,將需要輸入兩次"K"進行確認。才會全部執行完畢。現需要將其cmd介面及輸入過程全部隱藏到後臺執行。 解法:通過C#輸入輸出重定向,並在OutputDataReceived ()中實現輸入C的動作來實現,可詳見具體程式碼如下
servlet中重定向與轉發的區別
重定向與轉發的區別: 1.重定向訪問伺服器兩次,轉發只訪問伺服器一次。 2.重定向可以看見目標頁面的URL,轉發只能看見第一次訪問的頁面URL,以後的工作都是有伺服器來做的。 3.重定向跳轉後必須加上return,要不然頁面雖然跳轉了,但是還會執行跳轉後面的語句,轉發
HttpServletResponse的字元位元組輸出流、編碼、檔案下載、Captcha圖片與HttpServletRequest獲取request資料表單非表單資料、重定向與轉發
1、HttpServletResponse。 ——我們要輸出東西,也就是設定響應的response,在下面我們利用字元輸出流來向瀏覽器輸出東西。這裡利用了response的getWriter方法,這個getWriter的返回值是一個PrintWriter物件。
jsp重定向與轉發的理解和區別
回顧第一篇部落格,最近學了jsp:java server page , java伺服器頁面技術. 在伺服器執行jsp,把html返回給瀏覽器頁面,優勢jsp可以寫java程式碼。 然而,http協議是一種無狀態的協議,瀏覽器斷開與伺服器的請求後再請求時不會有瀏覽器客戶端
jsp實現分頁顯示時session區分重定向與轉發的區別
當我們使用session實現頁面分頁顯示記錄時,應當注意RequestDispatcher dispatcher=request.getRequestDispatcher("byPageShow.jsp");dispatcher.forward(request, respon
JavaWeb Filter 過濾器的機制 與使用 請求重定向與請求轉發的區別 跳轉過濾,過濾器dispatcher REQUEST與FORWARD區別
首先要清楚,過濾的是url 那麼所有頁面跳轉url都會變嗎?不會,比如請求轉發,前前後後都是一個url 首先要弄清請求重定向與請求轉發的區別; 舉例來說有兩個網頁index.jsp 然後分別通過兩種方式跳轉到main.jsp 請求轉發 伺
Python檔案&IO處理技巧(1): 讀寫、重定向、間隔符、路徑、存在性與檔案列表
1. 文字資料的讀寫 open() & write() : rt模式的重新整理模式 當我們需要讀寫各種不同編碼的文字資料(如ASCII,UTF-8或UTF-16編碼等), 可以直接使用帶rt模式的open()內建函式。如果需要將文字內容寫入到一個檔案中,就要使用帶有 w
為什麼重定向是響應,轉發和包含是請求,以及他們之間的區別
總結一: 重定向:是伺服器對客戶端做出的響應,讓客戶端重新請求request面 轉 發:轉發是伺服器去自己去請求新的頁面,而不做出響應,做出響應應該是新頁面的事情 總結二 什麼時候用重定向(sendRedirect),什麼時候用轉發(forward),什麼時候用包含(inc
Python檔案&IO處理技巧(1): 讀寫、重定向、間隔符、路徑、存在性與檔案列表
1. 文字資料的讀寫 open() & write() : rt模式的重新整理模式 當我們需要讀寫各種不同編碼的文字資料(如ASCII,UTF-8或UTF-16編碼等), 可以直接使用帶rt模式的open()內建函式。如果需要將文字內容寫入到一個檔案中,就要使用帶有
域物件 請求轉發 請求重定向與HttpServletResponse響應
域物件獲取全域性配置資訊與伺服器上檔案真實路徑 (1.域物件(在一定範圍內 儲存資訊的物件) ServletContext 範圍:整個程式中都可以訪問到 並且只有一個(單例物件) 每個servle
重定向和轉發引出的URL路徑問題
//轉發 //this.getServletContext().getRequestDispatcher("/index2.jsp").forward(req, resp); //重定向 //resp.
重定向與請求轉發的區別及什麼時候使用
重定向與請求轉發的區別 一 轉發是伺服器行為,重定向是客戶端行為。為什麼這樣說呢,這就要看兩個動作的工作流程: 轉發過程:客戶瀏覽器傳送http請求——》web伺服器接受此請求——》呼叫內部的一個方法在容器內部完成請求處理和轉發動作——》將目標資源傳送給客戶;在這裡,轉發的
請求重定向與請求轉發
相信很多剛開始接觸jsp的同學會搞不清楚請求重定向和請求轉發的區別,這裡首先舉個栗子~~ 假設你去辦理某個護照 重定向:你去了A局,A局的人說:“這個事不歸我們管,你們應該去B局”,然後,你就從A局退了出來,自己又跑了一趟B局。 請求轉發:你去了A局,A局看了以後,知道這個
【Java】Filter過濾器中,在chain.doFilter(request,response)後若有重定向或轉發語句
在chain.doFilter(request,response)後若有重定向或轉發語句,執行順序是: 1.所要訪問的資源不是轉發的目標資源: chain.doFilter(request,
Servlet應用中重定向與請求轉發的區別
首先重定向和請求轉發的區別在大多數面試題裡面會考到,這篇文章是總結一下個人的理解。本文不講程式碼 第一,我們要明白這兩個東西的作用。Servlet在對客戶端請求的資料處理完成後,會向客戶端返回相應的響應結果(Servlet辦事兒)。 關於重定向
Linux學習筆記三:管道,重定向與用戶管理
改密 postfix 不完全 進程 修改密碼 通用 bash linux學習筆記 eat 1 ---第三天:重定向,管道與用戶管理--- 2 軟連接: 3 ln -s file link_file 4 特點:支持跨設備,網絡,支持目錄。 5 相對路徑