【JSP】JSP基本語法

 

儘管JSP的本質是Java Servlet,但是它的表層依然有自己的一套成文語法。學習JSP的語法,更有利於開發出簡介、易維護(隨時變化的需求)的代碼!

目錄

JSP基礎語法

JSP變量或方法的申明

JSP表達式

JSP表達式的本質

JSP模版元素

JSP腳本片斷

JSP三大指令

page指令

include指令

taglib指令

JSP動作標籤

jsp:include標籤

jsp:forward標籤

jsp:parm標籤


 

 

JSP基礎語法

 

核心與概覽:

 

  1. JSP聲明: <%! 變量或方法 %> 聲明JSP的成員變量或成員方法
  2. JSP表達式:<%=變量或表達式%> 向瀏覽器輸出變量或表達式計算的結果
  3. JSP註釋: <%!-- JSP註釋 --%> 用於註釋JSP代碼,不會翻譯到java文件中,也不會執行。
  4. JSP腳本: <% java代碼 %> 執行java代碼  原理:翻譯到_JSPService()方法中

 

 

JSP變量或方法的申明

 

語法:<%! 定義:變量或方法或類 %>

 

作用:聲明JSP的變量或方法

JSP申明
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>KYLE</title>
</head>
<body>
	<%-- 申明變量 --%>
	<%!
		String name = "kyle";
		int age = 22;
		double sa = 100000;
	%>
	
	<%-- 申明方法 --%>
	<%!
		public String getName() {
			return name;
		}
		public double addSa(double add) {
			return sa + add;
		}
	%>
	
	<%-- 申明類 --%>
	<%!
		class Person {
			private String pname;
			private int page;
			Person(String name, int age) { //構造
				this.pname = name;
				this.page = age;
			}
			public String getInfo() {
				return "name: " + pname + ", age: " + age;
			}
		}
	%>
</body>
</html>

 

JSP表達式

 

語法:<%=變量或表達式%>

作用:向瀏覽器輸出某變量的值或表達式計算的結果

注意:

  1. 表達式的原理就是翻譯成out.print(“變量”); 通過該方法可以把JSP中的HTML標籤寫到瀏覽器;
  2. 表達式後面不需要帶分號結束,不能有分號(;)。
快速理解JSP表達式的用法
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.Date"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>KYLE</title>
</head>
<body>
	<%!
		String name = "kyle";
		int age = 22;
		double sa = 100000;
	%>
	
	姓名:<%=name %><br/>
	年齡:<%=age %><br/>
	薪水:<%=sa %><br/>
	
	當前時間:<%=new Date() %>
</body>
</html>

 

 

 

 

JSP表達式的本質

 

 

左邊是MyJSP代碼;右邊是經過Tomcat翻譯、編譯存於”Tomcat安裝目錄/work/Catalina/localhost/項目名/org/apache/JSP/MyJSP_JSP.java” 的JavaServlet代碼

 

 

JSP模版元素

 

JSP頁面中的HTML代碼就是JSP模版元素。

 

 

左邊是MyJSP.JSP代碼;右邊是經過Tomcat翻譯、編譯存於”Tomcat安裝目錄/work/Catalina/localhost/項目名/org/apache/JSP/MyJSP_JSP.java” 的JavaServlet代碼

 

JSP腳本片斷

 

定義:就是在JSP中寫Java代碼!

 

語法:<%java代碼 %>

 

作用:執行java代碼  

 

注意:原理是把腳本中java代碼原封不動拷貝到_JSPService方法中執行。

快速理解JSP腳本片段
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.Random"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>KYLE</title>
</head>
<body>
	<!-- 腳本片段:可以寫Java代碼 -->
	<%
		Random rand = new Random();
		int num = rand.nextInt(100);
		if(num>50) {
	%>
	牛逼!大於50!
	<%
		} else {
	%>
	垃圾!小於50!
	<%
		}
	%>
	
</body>
</html>

 

JSP三大指令

 

指令格式:<%@ 指令名字 鍵=“值” %>

 

功能:表名這是一個JSP文件。

 

page指令

 

語法格式:<%@ page 鍵=“值” %>

 

鍵有以下選項:

 

language:表明jsp頁面中可以寫什麼編程語言的代碼,目前只能寫java代碼;

 

contentType、charset:指明這個文件是什麼類型,說明服務器發送瀏覽器的數據類型和內容編碼

 

  1. 如果要從JSP輸出爲XML,請使用以下page指令:<%@ page contentType = "text/xml" %>
  2. 以下語句指示向瀏覽器生成的頁面呈現爲HTML:<%@ page contentType = "text/html" %>
  3. 以下指令將內容類型設置爲:Microsoft Word文檔:<%@ page contentType = "application/msword" %>
  4. 還可以指定響應的字符編碼。 例如,如果要指定返回瀏覽器的結果頁面使用:UTF-8,則可以使用以下page指令:<%@ page contentType = "text/html:charset=UTF-8" %>

 

pageEncoding:指定jsp內容編碼

 

extends:用於指定jsp翻譯成java文件後,繼承的父類是誰,一般不用改。

 

import:導包使用的,如果導入多個包,多個包之間用逗號分割

 

JSP引擎自動導入的包:

 

  • java.lang.*
  • javax.servlet.*
  • javax.servlet.JSP.*
  • javax.servlet.http.*

 

session

 

  1. 值可選的有true or false。
  2. 用於控制在這個jsp頁面裏面,能夠直接使用session對象。
  3. 具體的區別是,請看翻譯後的java文件。如果該值是true , 那麼在代碼裏面會有getSession()的調用,如果是false :  那麼就不會有該方法調用,也就是沒有session對象了。在頁面上自然也就不能使用session了。

 

errorPage:指的是錯誤的頁面, 值需要給錯誤的頁面路徑URL

 

isErrorPage:上面的errorPage 用於指定錯誤的時候跑到哪一個頁面去。那麼這個isErroPage , 就是聲明某一個頁面到底是不是錯誤的頁面。

 

buffer指定out對象輸出緩衝區的大小

 

include指令

 

指令語法:<%@ include file=”靜態包含JSP文件的URL” %>

 

指令功能:

 

包含另外一個jsp的內容進來。

 

本質:

 

  1. 原理是把被包含的頁面(header.jsp)的內容翻譯到包含頁面(index.jsp)中,即把被包含的頁面代碼複製到包含頁面中, 合併成翻譯成一個Java源文件,再編譯運行!!這種包含叫靜態包含(源碼包含)
  2. 如果使用靜態包含,被包含頁面中不需要出現全局的html標籤了!!!(如html、head、body)
  3. 如果使用include指令引入了其它JSP頁面,那麼JSP引擎將把這兩個JSP翻譯成一個servlet。所以include指令引入通常也稱之爲靜態引入。
  4. 其中的file屬性用於指定被引入文件的相對路徑。file屬性的設置值必須使用相對路徑,如果以“/”開頭,表示相對於當前WEB應用程序的根目錄(注意不是站點根目錄),否則,表示相對於當前文件。

 

特性:

 

  • 被引入的文件必須遵循JSP語法。
  • 被引入的文件可以使用任意的擴展名,即使其擴展名是html,JSP引擎也會按照處理JSP頁面的方式處理它裏面的內容,爲了見明知意,JSP規範建議使用.JSPf(JSP fragments)作爲靜態引入文件的擴展名。
  • 由於使用include指令將會涉及到2個JSP頁面,並會把2個JSP翻譯成一個servlet,所以這2個JSP頁面的指令不能衝突(除了pageEncoding和導包除外)。

 

實例:在mainbody.jsp中引入head.jsp和footer.jsp

mainbody.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>KYLE</title>
</head>
<body>
	<%@include file="head.jsp" %>
	
	<br/>
	<div style="text-align:center">
		我是mainbody.jsp
	</div>
	<br/>
	
	<%@include file="footer.jsp" %>
	
</body>
</html>

head.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<div style="text-align:center">
	我是head.jsp,引入成功!
</div>

footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<div style="text-align:center">
	我是footer.jsp,引入成功!
</div>

 

taglib指令

 

指令功能:

 

用來在當前jsp頁面中導入第三方的標籤庫

 

指令格式:

 

<%@ taglib prefix="標籤庫的別名" uri="標籤庫路徑"%>

 

解析:

 

  1. prefix:指定標籤前綴,這個東西可以隨意起名
  2. uri:指定第三方標籤庫的uri(唯一標識)
  3. 當然,需要先把第三方標籤庫所需jar包放到類路徑中。

 

有關該指令的詳細用法,要等待學習JSTL時再做講解!

 

JSP動作標籤

 

jsp:include標籤

 

功能:

 

  • 包含指定的頁面, 這裏是動態包含。
  • 也就是不把包含的頁面所有元素標籤全部拿過來輸出,而是把它的運行結果拿過來。

 

語法:<jsp:include page="other02.jsp"></jsp:include>

 

  • 指令@include(靜態包含):
    • 在編譯時期就包含進來,合併成一個Servlet,並編譯好
    • 因爲預先包含入了,併合並編譯好了,所以速度較快
  • 動態jsp:include(動態包含):
    • 在頁面被訪問是才包含進來
    • 因爲在訪問時才包含入,所以速度較慢

 

 

jsp:forward標籤

 

功能:前往一個頁面

 

語法:<jsp:forward page="other02.jsp"></jsp:forward>

 

等同於以下代碼:

 

request.getRequestDispatcher("other02.jsp").forward(request, response); //Servlet請求轉發

 

jsp:parm標籤

 

功能:在包含某個頁面的時候,或者在跳轉某個頁面的時候,加入這個參數。

 

語法:
<jsp:forward page="other02.jsp">
	<jsp:param value="beijing" name="address"/>
</jsp:forward>

重定向接收頁面代碼:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<br>收到的參數是:<br>
	<%= request.getParameter("address")%>
</body>
</html>

 

 

 

 

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