JavaWeb(三)——JSP入門

第三章:jsp入門

第1節:jsp概述


知識點1:動態網頁的執行原理

​ 1.容器初始化Servlet實例,根據請求方法,調用相應的doXXX方法,並初始化請求和響應對象,作爲doXXX方法的參數使用;

​ 2.執行doXXX方法後,將響應對象中的數據流寫到客戶端;

​ 3.客戶端瀏覽器將收到的數據進行解析,顯示給用戶;


知識點2: JSP的功能與特性

(一)什麼是jsp

​ **JSP(Java Server Pages)**java服務器端頁面,是JavaEE規範中的Web組件,用來編寫動態頁面.

(二)jsp的特點

​ 1.JSP運行在服務器端,本質是Servlet

​ 2.JSP文件以.jsp爲後綴,在工程目錄中存在WebContent目錄下

​ 3.JSP文件可以直接在瀏覽器中訪問

​ 4.JSP文件中的內容就是 HTML+Java代碼,靜態部分使用HTML和文本即可,動態部分使用Java代碼


知識點3: JSP的執行流程解析

(一)翻譯

​ Web服務器找到blank.jsp,對其進行翻譯,生成blank_jsp.java文件,就是Servlet;查看路徑: 工作空間E:\prj_eclipse_rs.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\0430-web\org\apache\jsp

翻譯的命名方式:

​ 單詞.jsp->單詞_jsp.vava

​ 數字.jsp->_數字_jsp.java

(二)編譯

​ 服務器將blank_jsp.java編譯成類文件blank_jsp.class,翻譯和編譯的過程遵守Servlet規範,因此說JSP的本質也是Servlet;

(三)實例化

​ 服務器實例化類blank_jsp.class

(四)提供服務:

​ 調用類中的_jspService方法提供服務

總結:

1.爲什麼要使用JSP組件?

​ Servlet生成動態頁面比較繁瑣,使用JSP生成動態頁面比較便捷,因爲其中的靜態內容可以使用HTML生成

2.JSP執行的流程是什麼?

​ JSP的執行過程是:翻譯-編譯-實例化-提供服務

3.JSP的本質

​ JSP的本質就是Servlet,不過是服務器將JSP進行了翻譯和編譯;可以說,JSP也是一個Java類;

第2節:jsp基本元素


知識點1:腳本元素

(一)什麼是腳本元素

​ 腳本元素可以用來包含任意Java代碼

(二)語法格式

​ <% Java代碼 %>

(三)特點

​ 服務器翻譯腳本元素時,將把其中Java代碼直接翻譯到_jspService方法中,如果語法錯誤,將在瀏覽器中提示錯誤

<body>
	blank.jsp<br/>
	<%
 	 System.out.println("Hello Jsp!");
	%>
</body>
out.write("blank.jsp<br/>\r\n");

System.out.println("Hello Jsp!");

out.write("\r\n");

知識點2:表達式元素

(一)什麼是表達式元素

​ 表達式元素用來向頁面輸出動態內容

(二)語法格式

​ <%= Java代碼 %>

(三)特點

​ 服務器翻譯表達式元素時,將把其中Java代碼部分的返回值使用out.write語句輸出

<body>
	<%=request.getRemoteAddr()%>
</body>
out.write("<body>\r\n");
out.print(request.getRemoteAddr());
out.write("\r\n");
out.write("</body>\r\n");

知識點3:模版元素

(一)什麼是模板元素

模板元素指JSP中靜態HTML或者XML內容

(二)模板元素
<!DOCTYPE html  PUBLIC "-//W3C//DTD  HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
	<head>  
		<meta http-equiv=*"Content-Type"* content=*"text/html;  charset=UTF-8"*>  
		<title>Insert title here</title>  
	</head>  
<body>  

知識點4:註釋元素

在JSP中可以使用註釋元素,有三種情況

(一)JSP註釋

1.語法

​ 格式爲<%–JSP註釋–%>;

2.特點

​ JSP的註釋只有在源代碼中可見,翻譯時已經忽略;

 <body>
	<%--JSP註釋 --%>
	<%=request.getRemoteAddr()%>
</body>
 out.write("</head>\r\n");
 out.write("<body>\r\n");
 out.print(request.getRemoteAddr());
 out.write("\r\n");
 out.write("</body>\r\n");
 out.write("</html>");
(二)HTML註釋

1.語法

<!--HTML註釋-->

2.特點

在JSP中,除了使用JSP註釋外,還可以使用HTML註釋,

1.HTML註釋翻譯時會被翻譯成

out.write("<!-- HTML註釋 -->\r\n"),

2.會被返回到客戶端,

3.在網頁源代碼能看見

4.但是不顯示到頁面中;

 <body>  
 	<!-- HTML註釋 -->  
 	<%=request.getRemoteAddr()%>  
 </body>  
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("<!-- HTML註釋 -->\r\n");
out.print(request.getRemoteAddr());
out.write("\r\n");
out.write("</body>\r\n");

在這裏插入圖片描述

在這裏插入圖片描述

3.Java註釋

(1)語法

​ 單行://

​ 多行:/**/

​ doc:/** */

(2)特點

​ JSP中的Java代碼部分,可以使用Java註釋;Java註釋會翻譯到.java文件中,但是編譯時忽略


知識點5:聲明元素

(一)什麼是聲明元素

​ 在JSP文件中定義類的成員變量或方法的元素叫做聲明元素

(二)語法

​ <%!聲明語句%>

(三)特點

​ 聲明元素被翻譯到Java類中,而不是_jspService方法中;

​ 實際中使用不多;


知識點6:內置對象概念

(一)什麼是內置對象

​ 內置對象指的是在JSP中可以直接使用的對象,不需要聲明,直接使用固定的名字使用即可;例如<%=request.getRemoteAddr()%>中的request就是內置對象;

在這裏插入圖片描述

(二)JSP的9大內置對象

在這裏插入圖片描述

1.分類

​ 1.與輸入/輸出有關的對象: request、response、out

​ 2.與屬性作用域有關的對象:session、application、pageContext

​ 3.與Servlet 相關對象:page、config

​ 4.與錯誤處理有關的:exception

2.4大作用域

​ 作用域範圍從小到大順序:page---->request---->session---->application

page 當前頁面有效(頁面跳轉後無效)

request 同一次請求有效(請求轉發後有效,重定向後無效)

session 同一次對話有效(同一個瀏覽器在退出關閉之前都有效)

application 全局有效(整個項目)

第3節:Servlet與JSP的作用


知識點1:Servlet與JSP的作用總結

1.JSP的作用

​ Servlet和JSP都可以生成動態頁面;然而,顯然JSP更適合生成動態頁面,因爲其中的靜態部分可以直接使用HTML即可.

2.Servlet的作用

​ 1.接收來自JSP的請求,

​ 2.處理請求,

​ 3.然後轉到JSP頁面把結果顯示給客戶端看

在這裏插入圖片描述


知識點2:Servlet與JSP之間跳轉的方式

1.響應重定向

​ 響應接口中提供了該方法

在這裏插入圖片描述

(1)使用方法

​ response.sendRedirect(request.getContextPath()+”/xxx”);

(2)特點

​ 1.實際是兩次HTTP請求,

​ 2.服務器端在響應第一次請求的時候,讓瀏覽器再向另外一個URL發出請求,從而達到轉發的目的

​ 3.瀏覽器地址欄發生變化,顯示的是第二次請求的地址

在這裏插入圖片描述

在這裏插入圖片描述

2.請求轉發

​ RequestDispatcher接口定義了請求轉發的方法

在這裏插入圖片描述

​ 要使用forward方法,需要先獲得RequestDispatcher對象;請求接口中提供了獲得該對象的方法:

在這裏插入圖片描述

(1)使用方法

​ request.getRequestDispatcher(url).forward(request,response);

(2)特點

​ 1.客戶端和瀏覽器只發出一次請求

​ 2.請求轉發是在服務器內部進行轉發,

​ 3.瀏覽器地址欄還是顯示第一次請求的URL,沒有發生變化

在這裏插入圖片描述

在這裏插入圖片描述

3.Servlet與JSP之間跳轉的方式練習

①創建登錄的login.jsp,用戶名和密碼,提交按鈕

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/0430-web/LoginServlet" method="post">
 用戶名:<input type="text" name="username"/><br/>
 密碼:<input type="password" name="password"/><br/>
 <input type="submit" name="提交"/>
</form>
</body>
</html>

②創建LoginServlet,處理登錄的請求

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//得到用戶名
		String username = request.getParameter("username");
		//得到密碼
		String password = request.getParameter("password");
		//判斷用戶名和密碼是否正確
		//正確
		if (username.equals("Tom") && password.equals("123")) {
			//請求轉發到成功頁面
			request.getRequestDispatcher("/success.jsp").forward(request, response);
			
		}else {//錯誤
			//重定向到錯誤頁面
			response.sendRedirect(request.getContextPath()+"/error.jsp");
		}
	}

③創建success.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
success!!!
</body>
</html>

④創建error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
error!!!
</body>
</html>

⑤測試

在這裏插入圖片描述

在這裏插入圖片描述


知識點3:請求屬性的使用

​ 1.如果需要在Servlet,JSP之間跳轉時,同時把一些自定義的、或者通過數據庫查詢的、或者調用其他資源獲得的數據傳遞到下一個資源時,就可以把這些數據設置爲請求的屬性即可。

​ 2.請求屬性可以是任意類型的對象,可以用setAttribute方法將對象作爲屬性存儲到請求對象中

​ 3.請求參數是用戶提交請求時,自動封裝到請求對象中的一些輸入信息,都是String類型

在這裏插入圖片描述

1.向request作用域放值,使用請求轉發後在jsp頁面取值

①Servlet調用request.setAttribute(name,value)向請求作用域裏放值

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//得到用戶名
		String username = request.getParameter("username");
		//得到密碼
		String password = request.getParameter("password");
		//判斷用戶名和密碼是否正確
		//正確
		if (username.equals("Tom") && password.equals("123")) {
			//向請求作用域放入數據,準備在頁面接收並顯示
			request.setAttribute("username", username);
			//請求轉發到成功頁面
			request.getRequestDispatcher("/success.jsp").forward(request, response);
			
		}else {//錯誤
			//重定向到錯誤頁面
			response.sendRedirect(request.getContextPath()+"/error.jsp");
		}
	}

②jsp使用request.getAttribute(name)取得值

<body>
success!!!
<%
String username=(String)request.getAttribute("username");
%>
<%=username%>
</body>

③測試

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章