【聲明】 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):用於在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 指令: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>:在用戶請求時包含文件(動態包含)
過程:包含和被包含的文件各自編譯,當用戶請求頁面時,才動態地包含其它文件
舉例:
新建include.jsp文件,做爲被包含的內容:(紅框部分是我添加的代碼)
新建index.jsp文件,做爲主界面:(紅框部分是我添加的代碼)
上方第12行中, flush="true"表示頁面能夠實時刷新。
運行後,效果以下:
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。
運行後,效果以下:
三、<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)
四、<jsp: useBean> 建立一個Bean實例並指定它的名字和做用範圍
JavaBean:簡單說,它就是一個Java類,這個類能夠重複地使用。
它必須遵循如下規定:
符合上述規定的JavaBean,將擁有:事件處理、自省機制、永續儲存等特性。
五、<jsp: setProperty ···/>和<jsp: getProperty ···/>
舉例:新建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行)。
運行效果以下:
關於JSP的進一步學習,將在之後講到。