Java學習筆記(8)JSP高階
JSP標準標籤庫(JSTL)
JSP標準標籤庫簡介:
JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。
JSTL支援通用的、結構化的任務,比如迭代,條件判斷,XML文件操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用整合JSTL的自定義標籤。
根據JSTL標籤所提供的功能,可以將其分為5個類別。
- 核心標籤
- 格式化標籤
- SQL 標籤
- XML 標籤
- JSTL 函式
JSTL庫安裝:
Apache Tomcat安裝JSTL 庫步驟如下:
從Apache的標準標籤庫中下載的二進包(jakarta-taglibs-standard-current.zip)。
下載jakarta-taglibs-standard-1.1.2.zip 包並解壓,將jakarta-taglibs-standard-1.1.2/lib/下的兩個jar檔案:standard.jar和jstl.jar檔案拷貝到/WEB-INF/lib/下。
接下來我們在 web.xml 檔案中新增以下配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/fmt.tld</taglib-location>
</taglib>
<taglib >
<taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri>
<taglib-location>/WEB-INF/fmt-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri>
<taglib-location>/WEB-INF/c-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/sql.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri>
<taglib-location>/WEB-INF/sql-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/x</taglib-uri>
<taglib-location>/WEB-INF/x.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>
<taglib-location>/WEB-INF/x-rt.tld</taglib-location>
</taglib>
</jsp-config>
</web-app>
使用任何庫,必須在每個JSP檔案中的頭部包含
核心標籤:
核心標籤是最常用的JSTL標籤。引用核心標籤庫的語法如下:
<%@ taglib prefix="c"
uri="http://java.sun.com/jsp/jstl/core" %>
標籤 | 描述 |
---|---|
< c:out> | 用於在JSP中顯示資料,就像<%= … > |
< c:set> | 用於儲存資料 |
< c:remove> | 用於刪除資料 |
< c:catch> | 用來處理產生錯誤的異常狀況,並且將錯誤資訊儲存起來 |
< c:if> | 與我們在一般程式中用的if一樣 |
< c:choose> | 本身只當做< c:when>和< c:otherwise>的父標籤 |
< c:when> | < c:choose>的子標籤,用來判斷條件是否成立 |
< c:otherwise> | < c:choose>的子標籤,接在< c:when>標籤後,當< c:when>標籤判斷為false時被執行 |
< c:import> | 檢索一個絕對或相對 URL,然後將其內容暴露給頁面 |
< c:forEach> | 基礎迭代標籤,接受多種集合型別 |
< c:forTokens> | 根據指定的分隔符來分隔內容並迭代輸出 |
< c:param> | 用來給包含或重定向的頁面傳遞引數 |
< c:redirect> | 重定向至一個新的URL. |
< c:url> | 使用可選的查詢引數來創造一個URL |
格式化標籤:
JSTL格式化標籤用來格式化並輸出文字、日期、時間、數字。引用格式化標籤庫的語法如下:
<%@ taglib prefix="fmt"
uri="http://java.sun.com/jsp/jstl/fmt" %>
標籤 | 描述 |
---|---|
< fmt:formatNumber> | 使用指定的格式或精度格式化數字 |
< fmt:parseNumber> | 解析一個代表著數字,貨幣或百分比的字串 |
< fmt:parseDate> | 使用指定的風格或模式格式化日期和時間 |
< fmt:setLocale> | 解析一個代表著日期或時間的字串 |
< fmt:bundle> | 繫結資源 |
< fmt:setLocale> | 指定地區 |
< fmt:setBundle> | 繫結資源 |
< fmt:timeZone> | 指定時區 |
< fmt:setTimeZone> | 指定時區 |
< fmt:message> | 顯示資源配置檔案資訊 |
< fmt:requestEnconding> | 設定request的字元編碼 |
SQL標籤:
JSTL SQL標籤庫提供了與關係型資料庫(Oracle,MySQL,SQL Server等等)進行互動的標籤。引用SQL標籤庫的語法如下:
<%@ taglib prefix="sql"
uri="http://java.sun.com/jsp/jstl/sql" %>
標籤 | 描述 |
---|---|
< sql:setDataSource> | 指定資料來源 |
< sql:query> | 執行SQL查詢語句 |
< sql:update> | 執行SQL更新語句 |
< sql:param> | 將SQL語句中的引數設為指定值 |
< sql:dateParam> | 將SQL語句中的日期引數設為指定的java.util.Date 物件值 |
< sql:transaction> | 在共享資料庫連線中提供巢狀的資料庫行為元素,將所有語句以一個事務的形式來執行 |
XML 標籤
JSTL XML標籤庫提供了建立和操作XML文件的標籤。引用XML標籤庫的語法如下:
<%@ taglib prefix="x"
uri="http://java.sun.com/jsp/jstl/xml" %>
在使用xml標,必須將XML 和 XPath 的相關包拷貝至你的 Tomcat 安裝目錄\lib下:
標籤 | 描述 |
---|---|
與<%= … >,類似,不過只用於XPath表示式 | |
解析 XML 資料 | |
設定XPath表示式 | |
判斷XPath表示式,若為真,則執行本體中的內容,否則跳過本體 | |
迭代XML文件中的節點 | |
和的父標籤 | |
的子標籤,用來進行條件判斷 | |
的子標籤,當判斷為false時被執行 | |
與共同使用,用於設定XSL樣式表 |
JSTL函式
JSTL包含一系列標準函式,大部分是通用的字串處理函式。引用JSTL函式庫的語法如下:
<%@ taglib prefix="fn"
uri="http://java.sun.com/jsp/jstl/functions" %>
JSP連線資料庫
SELECT操作例項:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html>
<head>
<title>SELECT 操作</title>
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/jsp_db"
user="root" password="123456"/>
<sql:query dataSource="${snapshot}" var="result">
SELECT * from websites;
</sql:query>
<h1>JSP 資料庫例項 - 菜鳥教程</h1>
<table border="1" width="100%">
<tr>
<th>ID</th>
<th>姓名</th>
<th>密碼</th>
<th>郵箱</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}"/></td>
<td><c:out value="${row.name}"/></td>
<td><c:out value="${row.password}"/></td>
<td><c:out value="${row.email}"/></td>
</tr>
</c:forEach>
</table>
</body>
</html>
執行結果:
INSERT操作例項:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP資料庫 INSERT操作</title>
</head>
<body>
<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/jsp_db"
user="root" password="123456"/>
<sql:update dataSource="${snapshot}" var="result">
INSERT INTO tbl_user (name, password, email)VALUES("xiaoli", "123984", "[email protected]");
</sql:update>
<sql:query dataSource="${snapshot}" var="result">
SELECT * from tbl_user;
</sql:query>
<h1>JSP資料庫 Insert例項</h1>
<table border="1" width="100%">
<tr>
<th>ID</th>
<th>姓名</th>
<th>密碼</th>
<th>郵箱</th>
</tr>
<c:forEach var="row" items="${result.rows}">
<tr>
<td><c:out value="${row.id}"/></td>
<td><c:out value="${row.name}"/></td>
<td><c:out value="${row.password}"/></td>
<td><c:out value="${row.email}"/></td>
</tr>
</c:forEach>
</table>
</body>
</html>
執行結果:
JSP JavaBean
JavaBean是特殊的Java類,使用J ava語言書寫,並且遵守JavaBean API規範。
接下來給出的是JavaBean與其它Java類相比而言獨一無二的特徵:
- 提供一個預設的無參建構函式。
- 需要被序列化並且實現了Serializable介面。
- 可能有一系列可讀寫屬性。
- 可能有一系列的”getter”或”setter”方法。
JavaBean屬性:
一個JavaBean物件的屬性應該是可訪問的。這個屬性可以是任意合法的Java資料型別,包括自定義Java類。
一個JavaBean物件的屬性可以是可讀寫,或只讀,或只寫。JavaBean物件的屬性通過JavaBean實現類中提供的兩個方法來訪問:
方法 | 描述 |
---|---|
get**PropertyName**() | 舉例來說,如果屬性的名稱為myName,那麼這個方法的名字就要寫成getMyName()來讀取這個屬性。這個方法也稱為訪問器。 |
set**PropertyName**() | 舉例來說,如果屬性的名稱為myName,那麼這個方法的名字就要寫成setMyName()來寫入這個屬性。這個方法也稱為寫入器。 |
一個只讀的屬性只提供getPropertyName()方法,一個只寫的屬性只提供setPropertyName()方法。
JavaBean程式示例:
這是StudentBean.java檔案:
package com.runoob;
public class StudentsBean implements java.io.Serializable
{
private String firstName = null;
private String lastName = null;
private int age = 0;
public StudentsBean() {
}
public String getFirstName(){
return firstName;
}
public String getLastName(){
return lastName;
}
public int getAge(){
return age;
}
public void setFirstName(String firstName){
this.firstName = firstName;
}
public void setLastName(String lastName){
this.lastName = lastName;
}
public void setAge(int age) {
this.age = age;
}
}
訪問JavaBean:
標籤可以在JSP中宣告一個JavaBean,然後使用。聲明後,JavaBean物件就成了指令碼變數,可以通過指令碼元素或其他自定義標籤來訪問。標籤的語法格式如下:
<jsp:useBean id="bean 的名字" scope="bean 的作用域" typeSpec/>
其中,根據具體情況,scope的值可以是page,request,session或application。id值可任意只要不和同一JSP檔案中其它中id值一樣就行了。
訪問 JavaBean 物件的屬性:
在 標籤主體中使用 標籤來呼叫 getter 方法,使用 標籤來呼叫 setter 方法,語法格式如下:
<jsp:useBean id="id" class="bean 編譯的類" scope="bean 作用域">
<jsp:setProperty name="bean 的 id" property="屬性名"
value="value"/>
<jsp:getProperty name="bean 的 id" property="屬性名"/>
...........
</jsp:useBean>
name屬性指的是Bean的id屬性。property屬性指的是想要呼叫的getter或setter方法。
接下來給出使用以上語法進行屬性訪問的一個簡單例子:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>get 和 set 屬性例項</title>
</head>
<body>
<jsp:useBean id="students"
class="com.runoob.StudentsBean">
<jsp:setProperty name="students" property="firstName"
value="小強"/>
<jsp:setProperty name="students" property="lastName"
value="王"/>
<jsp:setProperty name="students" property="age"
value="10"/>
</jsp:useBean>
<p>學生名字:
<jsp:getProperty name="students" property="firstName"/>
</p>
<p>學生姓氏:
<jsp:getProperty name="students" property="lastName"/>
</p>
<p>學生年齡:
<jsp:getProperty name="students" property="age"/>
</p>
</body>
</html>
JSP自定義標籤
自定義標籤是使用者定義的JSP語言元素。當JSP頁面包含一個自定義標籤時將被轉化為servlet,標籤轉化為對被 稱為tag handler的物件的操作,即當servlet執行時Web container呼叫那些操作。
JSP標籤擴充套件可以讓你建立新的標籤並且可以直接插入到一個JSP頁面。 JSP 2.0規範中引入Simple Tag Handlers來編寫這些自定義標記。
你可以繼承SimpleTagSupport類並重寫的doTag()方法來開發一個最簡單的自定義標籤。
建立”Hello”標籤
接下來,我們想建立一個自定義標籤叫作,標籤格式為:
<ex:Hello />
要建立自定義的JSP標籤,你首先必須建立處理標籤的Java類。所以,讓我們建立一個HelloTag類,如下所示:
package servlet;
import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.*;
import java.io.*;
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException, IOException {
JspWriter out = getJspContext().getOut();
out.println("Hello Custom Tag!");
}
}
以下程式碼重寫了doTag()方法,方法中使用了getJspContext()方法來獲取當前的JspContext物件,並將”Hello Custom Tag!”傳遞給JspWriter物件。
編譯以上類,並將其複製到環境變數CLASSPATH目錄中。最後建立如下標籤庫:
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>Example TLD</short-name>
<tag>
<name>Hello</name>
<tag-class>com.runoob.HelloTag</tag-class>
<body-content>empty</body-content>
</tag>
</taglib>
接下來,我們就可以在JSP檔案中使用Hello標籤:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%>
<html>
<head>
<title>A sample custom tag</title>
</head>
<body>
<ex:Hello/>
</body>
</html>
以上程式輸出結果為:
Hello Custom Tag!
JSP表示式語言
JSP表示式語言(EL)使得訪問儲存在JavaBean中的資料變得非常簡單。JSP EL既可以用來建立算術表示式也可以用來建立邏輯表示式。在JSP EL表示式內可以使用整型數,浮點數,字串,常量true、false,還有null。
一個簡單的語法
典型的,當您需要在JSP標籤中指定一個屬性值時,只需要簡單地使用字串即可:
<jsp:setProperty name="box" property="perimeter" value="100"/>
JSP EL允許您指定一個表示式來表示屬性值。一個簡單的表示式語法如下:
${expr}
其中,expr指的是表示式。在JSP EL中通用的操作符是 . 和 {} 。這兩個操作符允許您通過內嵌的JSP物件訪問各種各樣的JavaBean屬性。
舉例來說,上面的標籤可以使用表示式語言改寫成如下形式:
<jsp:setProperty name="box" property="perimeter"
value="${2*box.width+2*box.height}"/>
當JSP編譯器在屬性中見到”${}”格式後,它會產生程式碼來計jsp算這個表示式,並且產生一個替代品來代替表示式的值。
您也可以在標籤的模板文字中使用表示式語言。比如標籤簡單地將其主體中的文字插入到JSP輸出中:
<jsp:text>
<h1>Hello JSP!</h1>
</jsp:text>
現在,在標籤主體中使用表示式,就像這樣:
<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}
</jsp:text>
在EL表示式中可以使用圓括號來組織子表示式。比如{1 + (2 * 3)} 等於7。
想要停用對EL表示式的評估的話,需要使用page指令將isELIgnored屬性值設為true:
<%@ page isELIgnored ="true|false" %>
這樣,EL表示式就會被忽略。若設為false,則容器將會計算EL表示式。
EL中的基礎操作符
EL表示式支援大部分Java所提供的算術和邏輯操作符:
操作符 | 描述 |
---|---|
. | 訪問一個Bean屬性或者一個對映條目 |
[] | 訪問一個數組或者連結串列的元素 |
( ) | 組織一個子表示式以改變優先順序 |
+ | 加 |
- | 減或負 |
* | 乘 |
/ or div | 除 |
% or mod | 取模 |
== or eq | 測試是否相等 |
!= or ne | 測試是否不等 |
< or lt | 測試是否小於 |
or gt |
測試是否大於 |
<= or le | 測試是否小於等於 |
= or ge |
測試是否大於等於 |
&& or and | 測試邏輯與 |
|| or or | 測試邏輯或 |
! or not | 測試取反 |
empty | 測試是否空值 |
相關推薦
Java學習筆記(8)JSP高階
JSP標準標籤庫(JSTL) JSP標準標籤庫簡介: JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。 JSTL支援通用的、結構化的任務,比如迭代,條件判斷,XML文件操作,國際化標籤,SQL標籤。 除了這些,它還提
Java學習筆記(8)
demo 筆記 generated 麻煩 main 情況下 作用 [] 初始化 static修飾方法(靜態的成員方法): 訪問方式: 可以使用對象進行訪問 對象.靜態函數名(); 可以使用類名進行訪問
Java學習筆記(8) -Java GUI設計與事件處理
第八章 Java GUI設計與事件處理 1、題目 1.1、 如何來製作圖形介面?它需要引入哪些包 建立視窗並在視窗中新增各種元件,指定元件的屬性和它們在視窗中的位置,從而構成圖形介面的外觀效果。定義圖形介面的事件和各種元件對不同事件的響應,從
Java核心技術 卷I 基礎知識 學習筆記(8)
參考:Java核心技術 卷I 基礎知識 第八章 泛型程式設計意味著編寫的程式碼可以被很多不同型別的物件所重用。 泛型使用型別引數,使得程式碼有更好的可讀性。 在Java SE7及以後的版本中,建構函式中可以省略泛型型別,省略的型別可以從變數的型別推斷得出。 型別引數的魅
JAVA學習筆記(1)——a++與++a的區別
col int 演示 opera 解析 代碼 數據 ++i div 需求:此博客用於解釋i++與++i的區別。 過程: 1、名稱解釋 ++:自增,即在原有數據基礎上+1,再賦給原有數據。 2、程序演示 (1)代碼: 1 class OperateDemo 2 { 3
Swift學習筆記(8):枚舉
check oss 函數 not 條形碼 blog 出現 現在 pan 目錄: 基本語法 關聯值 原始值 枚舉為一組相關的值定義了一個共同的類型。 ?可以給枚舉成員指定原始值類型:字符串,字符,整型值或浮點數等 ?枚舉成員可以指定任意類型的關聯值存儲
JAVA學習筆記(三)
byte repl efi ber 時間 clas 區分大小寫 增強for size @SuppressWarnings("resource")是用來壓制資源泄露警告的。比如使用io類,最後沒有關閉。Set集合特點:1)無序,不隨機2)元素唯一3)沒下標註意:Collect
java學習筆記(二)圖形用戶接口
star strong per getwidth cep runnable graphics s2d gb2 這個學期主要放在ACM比賽上去了,比賽結束了。不知不覺就15周了,這周就要java考試了,復習一下java吧。java的學習的目的還是讓我們學以致用,讓我們可以
struts2學習筆記(8)-------struts2的ajax支持
net fcm utf-8 asc uri () nal extends keyword struts2支持一種stream類型的Result,這樣的類型的Result能夠直接向client瀏覽器響應二進制,文本等。 我們能夠再
Java學習筆記(二)-------String,StringBuffer,StringBuilder區別以及映射到的同步,異步相關知識
ringbuf 等待 java學習筆記 java學習 單線程 回復 改變 hashtable ble 1. String是不可變類,改變String變量中的值,相當於開辟了新的空間存放新的string變量 2. StringBuffer 可變的類,可以通過append方法改
Linux學習筆記(8)
8一、文件或目錄權限chmodrw- r-- r-- 。——— ——— ——— ——所有者 所屬組 其他人 受selinux限制r可讀=4 w可寫=2 x可執行=1chmod
java學習筆記(四):import語法
employee sign cnblogs java 調用 變量賦值 temp 職位 求職 Import 語法是給編譯器尋找特定類的適當位置的一種方法。 創建一個Employee 類,包括四個實體變量姓名(name),年齡(age),職位(designation)和薪水(s
java學習筆記(六):變量類型
animal 單獨使用 div 位置 fin strong pub 局部變量 變量聲明 java一共三種變量: 局部變量(本地變量):方法調用時創建,方法結束時銷毀 實例變量(全局變量):類創建時創建,類銷毀時銷毀 類變量(靜態變量):程序啟動是創建,程序銷毀時銷毀
java學習筆記(八):繼承
this關鍵字 log implement java學習 方式 show 使用 類型 多繼承 繼承 子類擁有父類非private的屬性,方法。 子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。 子類可以用自己的方式實現父類的方法。 Java的繼承
java學習筆記(九):Java 流(Stream)、文件(File)和IO
用戶輸入 public 文件內容 輸出流 out 單個 java 我們 ready Java 的控制臺輸入由 System.in 完成。 為了獲得一個綁定到控制臺的字符流,你可以把 System.in 包裝在一個 BufferedReader 對象中來創建一個字符流。需要i
Java學習筆記(一)
fun 編程語言 java 初始化 創建 abs 就是 p s 屬性 1.1. 一個數取反的算法 a取反,~a=-(a+1)。如 ~5=-6,~(-8)=7 1.2. Java中類的訪問控制符 (類的修飾符有public、default、abstract、final,方法的
Java學習筆記(二)---java 修飾符
技術 外部類 blog 訪問權限 定義 log 發生 繼承 指向 一、java 修飾符 Java語言提供了很多修飾符,主要分為以下兩類: 訪問修飾符 非訪問修飾符 1、訪問控制修飾符 Java中,可以使用訪問控制符來保護對類、變量、方法和構造方法的訪問。Javav支持
Linux第二周學習筆記(8)
意思 val 權限 zhong sof int conda 關系 rgb Linux第二周學習筆記(8)2.14 文件或目錄權限chmod (1). 權限表示[root@daizhihong01 ~]# ls -l總用量 12-rw-------. 1 root root
JAVA學習筆記——(一)
最簡 就業 計算 開發 目錄下的文件 -- 互聯 nvi 操作 今日內容介紹 1、Java開發環境搭建 2、HelloWorld案例 3、註釋、關鍵字、標識符 4、數據(數據類型、常量) 01java語言概述 * A: java語言概述 * a: Java是sun公
匯編語言學習筆記(8)——數據處理的基本問題
byte 緩沖器 表達 基本 操作 進行 能夠 ng- 尺寸 1、僅僅有“bx、si、di、 bp”四個寄存器能夠用在[…]中來進行內存單元的尋址 2、這四個寄存