JavaWeb學習筆記7--JSP指令碼元素、指令元素、動作元素

來源:互聯網
上載者:User

標籤:發送資料   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指令碼元素、指令元素、動作元素

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.