模版技術采用了EL表達式替換,邏輯控制采用了JSTL
1、循環控制
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% request.setAttribute("items",new Integer[]{0,1,2,3,4}); %>
${item}
2、條件判斷
${item}
升級版的條件判斷 -- 其實就是 switch的翻譯。
3、其他JSP特性控制
屬性設置 – 設置屬性的值(request中的屬性)
1
刪除屬性 -- 刪除屬性
包含文件 類似與 的功能,除了本地文件還可以互聯網文件。
模板設置 類似與功能
URL重寫
Click New -- 此處的URL地址既編碼了又重寫了 url.jsp?firstName=john&lastName=stephone+marbury
4、異常處理
<% int x = 10/0; %>
${myException.message}
Jsp可以在web.xml統一指定異常頁面,也可以自己咋page指令中 指定異常處理頁面
5、JSTL標簽
JSTL 一共有5個標簽庫
Core核心庫,就是上面一些控制
格式化庫,各種字符集、時區格式化
XML庫 提供一些操作XML的功能
SQL庫等 提供直接查詢數據庫的操作
JSTL的函數等 主要提供一些字符串的處理
url="jdbc:mysql://localhost/TEST"
user="root" password="pass123"/>
SELECT * from Employees;
6、自定義JSTL標簽
如果這些都不能滿足要求,可以自定義標簽庫
I、編寫 *.tld 標簽庫文件(實現類啊等一些配置項)
II、jsp taglib指令 引入這個標簽庫
III、像使用標準庫一樣使用這個庫里的方法
自定義標簽二次開發類
I、繼承 SimpleTagSupport 類,實現 doTag 方法,如果有方法提,在方法里調用invoke方法,和攔截器/過濾器等類似的考慮。
II、繼承TagSupport類,實現doStartTag/doEndTag方法,提供標簽開始和結束時的控制;還有BodySupport 類,可以實現精細的處理
III、標簽還可以嵌套。
如果需要標簽有屬性,則類似JavaBean一樣,提供類字段,提供setter函數
*.tld
MenuItem tag
MenuItem
foo.MenuItem
-- 有屬性時配置
itemValue
true
true
public class MenuItem extends TagSupport{
private String itemValue;
public void setItemValue(String value){
itemValue = value;
}
public int doStartTag(){
return EVAL_BODY_INCLUDE;
}
public int doEndTag(){
Menu parent = (Menu)getParent();
parent.addMenuItem(itemValue);
return EVAL_PAGE;
}
}
public class Menu extends TagSupport{
private ArrayList items;
public void addMenuItem(String item){
items.add(item);
}
public int doStartTag(){
items = new ArrayList();
return EVAL_BODY_INCLUDE;
}
public int doEndTag() throws JspException{
//這里可以對item做處理
return EVAL_PAGE;
}
需要注意的是標記處理器并不能直接訪問隱式對象,只能通過jspContext/pageContext進行處理。