模版技术采用了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进行处理。