標籤:發送資料 img mail jsp charset 動作 擷取對象 on() 基本文法
【聲明】
歡迎轉載,但請保留文章原始出處→_→
生命壹號:http://www.cnblogs.com/smyhvae/
文章來源:http://www.cnblogs.com/smyhvae/p/4048033.html
【本文】
我們在上一篇文章中學習到了Tomcat的使用和工程檔案部署,並明白了jsp檔案是怎樣發布到伺服器上並最終顯示出來:JavaWeb學習(一)----JSP簡介及入門(含Tomcat的使用)
如果在本文中有不明白的地方,請先回顧上一篇文章。
現在來學習一下JSP的基本文法知識。
一、JSP指令碼元素
- 1、聲明(declaration)
- 2、運算式(express)
- 3、指令碼(Scriplets)
“聲明”用的少,一般是用“運算式”和“指令碼”。
1、聲明(declaration):用於在JSP 中聲明合法的變數和方法
文法:
<%! 代碼內容 %>
舉例:
<%! //JSP聲明片段: 注意,不建議在JSP頁面上定義變數或方法,只是不建議定義 int i = 10; String name = "smyhvae"; public void printName(){ System.out.println(name); } %>
2、運算式(expression):計算該運算式,將其結果轉換成字串插入到輸出中
文法:
<%= 運算式 %>
舉例:
Current time: <%= new java.util.Date() %>
運行後,網頁顯示效果如下:
3、指令碼(Scriplets):位於<%和%>之間的代碼,它是合法的Java代碼
文法:
<% 程式碼,一行或多行 %>
舉例:
<% for (int i=0;i<10,i++) {… …}?%>
二、JSP指令元素
- 1、page 指令
- 2、include 指令
- 3、taglib 指令
1、page 指令:page 指令指明與JSP容器的溝通方式
page 指令裡的常用屬性如下:
<%@ page
language=“Java”
import=“importList” 匯入java類庫(唯一可以重複使用的屬性,其他屬性最多隻能使用一次)
contentType=“contentTyepInfo” 內容的類型
session=“true|false”
isThreadSafe=“true|false” 是否安全執行緒,預設為true
info=“infoText”
errorPage=“errorPageUrl” 指定錯誤頁面:如果發生異常,則會跳到這個錯誤頁面
isErrorPage=“true|false” 指定當前這個頁面是否為錯誤頁面。如果其他的頁面發生錯誤,就會調到這裡來。
%>
注意:只有import屬性可以重複使用,如果重複使用,則必須出現在命令的第一行。
建立的jsp檔案中,第一句話就用到了page命令:
2、include指令:
include指令是在JSP頁面被轉換成Servlet之前將指定的檔案包含進來。這種特性允許你建立可重用的導覽列、連絡人資訊部分、頁面計數等。(重複利用的理解:比如說,可能有多頁面都需要用到某個標題頁面,就可以把這個公用的標題頁面使用include指令包含進來,然後在其他的頁面中直接匯入標題頁面就行了)
格式:
<%@include file="fileURL"%>
過程:在JSP程式的轉換時期先把file屬性設定的檔案包含進來,然後開始執行轉換及編譯的工作。
舉例:
建立一個title.jsp檔案:(紅框部分是我添加的代碼)
繼續建立一個content.jsp檔案:(紅框部分是我添加的代碼)
上方的核心代碼是第10行:匯入了title.jsp這個標題檔案。運行後,效果如下:
注意:include只能是靜態包含,只能包含靜態資源,編譯後形成一個檔案。其實,title.jsp和content.jsp合起來只形成一個.java檔案,最後編譯為一個.class檔案。如所示:
3、taglib 指令:
用於匯入標籤庫,至於標籤庫的概念,後面將會講到,暫時略過。
三、JSP動作元素
主要包含以下部分:
- <jsp: include>
- <jsp: param>/<jsp: params>
- <jsp: forward>
- <jsp: useBean>
- <jsp: setProperty>和<jsp:getProperty>
1、<jsp: include>:在使用者請求時包含檔案(動態包含)
過程:包含和被包含的檔案各自編譯,當使用者請求頁面時,才動態地包含其它檔案
舉例:
建立include.jsp檔案,作為被包含的內容:(紅框部分是我添加的代碼)
建立index.jsp檔案,作為主介面:(紅框部分是我添加的代碼)
上方第12行中, flush="true"表示頁面可以即時重新整理。
運行後,效果如下:
Include指令和Include動作的比較:
- 指令執行速度相對較快,靈活性較差(只編譯一個檔案,但是一旦有一個檔案發生變化,兩個檔案都要重新編譯)
- 動作執行速度相對較慢,靈活性較高
在使用時,如果是靜態頁面,則使用Include指令;如果是動態網頁面,則使用Include動作。
2、<jsp: param>/<jsp: params> 傳遞參數
該動作元素不能單獨使用,可以配合include標籤使用。現在來看一下頁面是如何給被包含的頁面傳遞參數的。
舉例:
在上面的index.jsp代碼中進一步添加:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body>10 11 <h1>包含頁面</h1>12 <jsp:include page="include.jsp" flush="true">13 <jsp:param value="smyhvae" name="name"/>14 </jsp:include>15 </body>16 </html>
第13行是進一步添加的,意思是往其他的頁面傳遞參數name。其中鍵為name,值為smyhvae。
緊接著在上面的include.jsp代碼中進一步添加:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body>10 <%-- 注釋 --%>11 <%12 out.println("我是被包含的內容");13 14 //request表示請求對象15 String name = request.getParameter("name"); //擷取index頁面中name裡面的值16 out.println("<br/>"+name); //<br/>表示在頁面中換行17 %>18 </body>19 </html>
15、16行是進一步添加的。表示擷取index.jsp頁面中傳遞過來的參數name。
運行後,效果如下:
3、<jsp: forward> 轉寄使用者請求
作用:伺服器端的跳轉(轉寄帶請求的資料,URL地址不變)
舉例:工程檔案結構如下:
其中,index.jsp負責發送資料,receive.jsp負責轉寄資料,forward.jsp負責接收資料。
index.jsp代碼如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>首頁面</title> 8 </head> 9 <body>10 11 <h1>發送請求到頁面receive.jsp,讓receive.jsp負責轉寄給forward.jsp</h1>12 <form action="receive.jsp">13 <input type="text" name="email"/> 14 <input type="submit" value="提交"/>15 </form>16 </body>17 </html>
14行的submit表示提交表單。 12行的action表示動作,意思是說,要將這個表單提交給receive.jsp頁面。
receive.jsp代碼如下:(核心代碼是第10行,表示轉寄給forward.jsp頁面)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>我負責接收index.jsp的資料,並轉寄給forward.index</title> 8 </head> 9 <body>10 <jsp:forward page="forward.jsp"></jsp:forward>11 </body>12 </html>
forward.jsp?代碼如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>我是forward.jsp,將資料轉寄給我</title> 8 </head> 9 <body>10 <h2>我是forward.jsp,最終將資料轉寄給我</h2>11 <%12 String email = request.getParameter("email");13 out.println(email);14 %>15 </body>16 </html>
運行後,效果如下:
我們在上方的輸入框中輸入文本,點擊“提交”按鈕,跳到如下介面:(注意看url)
4、<jsp: useBean> 建立一個Bean執行個體並指定它的名字和作用範圍
JavaBean:簡單說,它就是一個Java類,這個類可以重複地使用。
它必須遵循以下規定:
- 是一個公有類。
- 具有一個公有的不帶參數構造方法。
- 每個屬性必須定義一組getXXX()和setXXX()方法, 以便讀取和儲存其屬性值。
符合上述規定的JavaBean,將擁有:事件處理、自省機制、永續儲存等特性。
5、<jsp: setProperty ···/>和<jsp: getProperty ···/>
- <jsp: setProperty>:設定Bean的屬性值
- <jsp: getProperty>:擷取Bean的屬性值,用於顯示在頁面中
舉例:建立Test03工程。工程結構如下:(這裡將講到如何在jsp檔案中擷取java檔案中類的屬性值)
建立Java檔案:建立一個Person類,放入兩個參數
1 package com.vae.bean; 2 3 public class Person { 4 private String name; 5 private int age; 6 7 8 public void setName(String name) { 9 this.name = name;10 } 11 public void setAge(int age) {12 this.age = age;13 }14 15 public String getName() {16 return name;17 }18 public int getAge() {19 return age;20 }21 22 @Override23 public String toString() {24 return "Person [name=" + name + ", age=" + age + "]";25 }26 27 28 29 }
建立index.jsp檔案:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body>10 <h2>方式一:useBean動作元素(不推薦)</h2>11 <%--建立對象 調用預設的構造方法,要求類必須有預設的構造方法--%>12 <jsp:useBean id="person" class="com.vae.bean.Person">13 </jsp:useBean>14 <%--設定 對象的屬性值--%>15 <jsp:setProperty property="name" name="person" value="生命壹號" />16 <jsp:setProperty property="age" name="person" value="22" />17 <%--擷取對象的屬性值 --%>18 <jsp:getProperty property="name" name="person" />19 <jsp:getProperty property="age" name="person" />20 21 <h2>方式二:採用片段的方式,即插入Java代碼(推薦使用)</h2>22 <%23 com.vae.bean.Person p = new com.vae.bean.Person();24 p.setName("生命貳號");25 p.setAge(22);26 p.getName();27 p.getAge();28 %>29 </body>30 </html>
上面的方式一就是我們所需要舉的例子。
12行:id指的是執行個體化的對象,class就是Java類。這一行相當於 Person person = new Person();
15行:name是對象,property是屬性,value是屬性的值。
方式一相當於在jsp檔案中建立一個類,只不過是以標籤的形式,然後進一步通過getProperty獲得類中的屬性值(18、19行)。此方法不是很常用,我們可以採用方式二:片段的方式,即插入Java代碼來實現(21至28行)。
運行效果如下:
關於JSP的進一步學習,將在以後講到。
JavaWeb學習筆記7--JSP指令碼元素、指令元素、動作元素