1. 程式人生 > >重定向與轉發,絕對路徑

重定向與轉發,絕對路徑

/**
	 	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 REQUESTFORWARD區別

首先要清楚,過濾的是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 相對路徑