JavaWeb學習----JSP腳本元素、指令元素、動做元素

【聲明】 html

歡迎轉載,但請保留文章原始出處→_→ java

生命壹號:http://www.cnblogs.com/smyhvae/express

文章來源:http://www.cnblogs.com/smyhvae/p/4048033.html安全

 

【正文】服務器

咱們在上一篇文章中學習到了Tomcat的使用和工程文件部署,並明白了jsp文件是怎樣發佈到服務器上並最終顯示出來:JavaWeb學習(一)----JSP簡介及入門(含Tomcat的使用)session

若是在本文中有不明白的地方,請先回顧上一篇文章。jsp

如今來學習一下JSP的基本語法知識。ide

1、JSP腳本元素                                                                                                                                                   
學習

  • 一、聲明(declaration)
  • 二、表達式(express)
  • 三、腳本(Scriplets)

「聲明」用的少,通常是用「表達式」和「腳本」。
一、聲明(declaration):用於在JSP 中聲明合法的變量和方法ui

語法:

<%! 代碼內容 %> 

舉例:

<%!
    //JSP聲明片斷: 注意,不建議在JSP頁面上定義變量或方法,只是不建議定義
    int i = 10;
    String name = "smyhvae";
    public void printName(){
        System.out.println(name);
    }
   
%>

二、表達式(expression):計算該表達式,將其結果轉換成字符串插入到輸出中

語法:

<%= 表達式 %> 

舉例:

Current time: <%= new java.util.Date() %> 

運行後,網頁顯示效果以下:

三、腳本(Scriplets):位於<%和%>之間的代碼,它是合法的Java代碼

語法:

<% 程序代碼,一行或多行 %> 

舉例:

<%
 for (int i=0;i<10,i++) {
… …
}
•%> 

 

2、JSP指令元素                                                                                                                                                   

  • 一、page 指令
  • 二、include 指令
  • 三、taglib 指令

一、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命令:

二、include指令

include指令是在JSP頁面被轉換成Servlet以前將指定的文件包含進來。這種特性容許你建立可重用的導航欄、聯繫人信息部分、頁面計數等。(重複利用的理解:好比說,可能有多頁面都須要用到某個標題頁面,就能夠把這個公共的標題頁面使用include指令包含進來,而後在其餘的頁面中直接導入標題頁面就好了)

格式

<%@include file="fileURL"%> 

過程:在JSP程序的轉換時期先把file屬性設定的文件包含進來,而後開始執行轉換及編譯的工做。

舉例

新建一個title.jsp文件:(紅框部分是我添加的代碼)

繼續新建一個content.jsp文件:(紅框部分是我添加的代碼)

上方的核心代碼是第10行:導入了title.jsp這個標題文件。運行後,效果以下:

注意:include只能是靜態包含,只能包含靜態的資源,編譯後造成一個文件。其實,title.jsp和content.jsp合起來只造成一個.java文件,最後編譯爲一個.class文件。以下圖所示:

三、taglib 指令

用於導入標籤庫,至於標籤庫的概念,後面將會講到,暫時略過。

 

3、JSP動做元素                                                                                                                                                   

主要包含如下部分:

  • <jsp: include>
  • <jsp: param>/<jsp: params>
  • <jsp: forward>
  • <jsp: useBean>
  • <jsp: setProperty>和<jsp:getProperty>

一、<jsp: include>:在用戶請求時包含文件(動態包含)

過程:包含和被包含的文件各自編譯,當用戶請求頁面時,才動態地包含其它文件

舉例:

新建include.jsp文件,做爲被包含的內容:(紅框部分是我添加的代碼)

e08f76cb-aa4c-472a-bf99-d449276af900[6]

新建index.jsp文件,做爲主界面:(紅框部分是我添加的代碼)

3c30226d-a74e-44f4-86a3-6ca358af2ee5[6]

上方第12行中, flush="true"表示頁面能夠實時刷新。

運行後,效果以下:

e4a7aba9-6ab9-4853-9995-15b44b94982f[6]

Include指令和Include動做的比較:

  • 指令執行速度相對較快,靈活性較差(只編譯一個文件,可是一旦有一個文件發生變化,兩個文件都要從新編譯)
  • 動做執行速度相對較慢,靈活性較高

在使用時,若是是靜態頁面,則使用Include指令;若是是動態頁面,則使用Include動做。

二、<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>

1五、16行是進一步添加的。表示獲取index.jsp頁面中傳遞過來的參數name。

運行後,效果以下:

6f3fecc8-0276-4d65-b75c-0c641d2e7eed[8]

三、<jsp: forward>     轉發用戶請求

做用:服務器端的跳轉(轉發帶請求的數據,URL地址不變)

舉例:工程文件結構以下:

092c0bf3-82c9-4c34-a8da-6bbfab1e6405[6]

其中,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>

運行後,效果以下:

f44a8603-cd56-471a-806e-9a5300e1f0e0[6]

咱們在上方的輸入框中輸入文本,點擊「提交」按鈕,跳到以下界面:(注意看url)

b5d02de5-82d7-4e9e-9aa1-0dbf85bb3c24[6]

四、<jsp: useBean>   建立一個Bean實例並指定它的名字和做用範圍

JavaBean:簡單說,它就是一個Java類,這個類能夠重複地使用。

它必須遵循如下規定:

  • 是一個公有類。
  • 具備一個公有的不帶參數構造方法。
  • 每一個屬性必須定義一組getXXX()和setXXX()方法, 以便讀取和存儲其屬性值。

符合上述規定的JavaBean,將擁有:事件處理、自省機制、永續儲存等特性。

五、<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     @Override
23     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得到類中的屬性值(1八、19行)。此方法不是很經常使用,咱們能夠採用方式二:片斷的方式,即插入Java代碼來實現(21至28行)。

運行效果以下:

df1cf0e9-6841-4159-b427-5160d49a065b[6]

 

關於JSP的進一步學習,將在之後講到。

相關文章
相關標籤/搜索