新特性
相比JSP1.2,JSP2主要增加了如下新特性
配置JSP属性
是否允许使用表达式语言,使用
元素确定,默认为false 是否允许使用JSP脚本,使用
元素确定,默认值为false 声明JSP页面的编码,使用
元素确定,配置该元素后,可以替代每个页面里的page指令contentType属性的charset部分 -
使用隐式包含,使用
和 元素确定,可以代替在每个页面里使用include编译指令来包含其他页面
示例:/jsp/* true utf-8 true /template/header.jspf /template/footer.jspf
表达式语言
表达式语言是一种简化的数据访问方式
,可以避免使用JSP脚本。它支持算术运算和逻辑运算,并且还有内置的对象。使用示例如下所示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
EL表达式的算术运算和逻辑运算
算术运算和逻辑运算
表达式语言
计算结果
(4/2)}
表达式语言中的内置对象一共有11个:
11. cookie:用于获取指定的Cookie值
使用示例如下所示:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
表达式语言——内置对象的使用
<%
request.setCharacterEncoding("utf-8");
%>
<%
session.setAttribute("user","张");
Cookie cookie = new Cookie("name","mycookie");
cookie.setMaxAge(24 * 3600);
response.addCookie(cookie);
%>
功能获取请求参数获取请求参数获取请求头的值获取请求头的值获取session的值获取Cookie的值
表达式语言的自定义函数
EL本身只是一种数据访问语言,因此不支持调用方法。如果要进行更复杂的处理,可以通过函数来完成。函数的本质是:提供一种语法允许在EL中调用某个类的静态方法
。
要在EL中使用函数的话,主要步骤分为3步:
定义普通的包含静态方法的java类:
public class StringFunction {
public static String reverse(String text){
return new StringBuffer(text).reverse().toString();
}
}
在标签库中进行配置
reverse
com.zuobiao.zhang.ELFunction.StringFunction
java.lang.String reverse(java.lang.String)
在JSP中使用:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="mytag" uri="http://com.zuobiao.zhang/mytaglib" %>
EL表达式中函数的使用
${mytag:reverse("hello world")}
Tag File支持
Tag File是对自定义标签的简化。以前我们自定义标签时要声明标签处理类,在tld文件中配置,然后再再JSP页面中使用。如果使用了Tag File,那么就不需要定义标签处理类和tld文件了,只需要在JSP页面中直接引用tag文件就可以了。Tag File具有以下5个编译指令:
<%@tag pageEncoding="UTF-8" import="java.util.List" %>
<%--给标签定义属性--%>
<%@attribute name="bgColor"%>
<%@attribute name="cellColor"%>
<%@attribute name="title"%>
${title}
list = (List)request.getAttribute("a");
for (String item : list){%>
Tag File的命名必须遵守如下规则:tagName.tag,即Tag File的主文件名就是标签名,后缀名必须是tag
,将该文件放到WEB-INF/tags目录下
在JSP中使用tag file,示例如下所示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="tags" tagdir="/WEB-INF/tags" %>
tag file的使用
<%
List a = new ArrayList<>();
a.add("1111");
a.add("2222");
a.add("3333");
request.setAttribute("a",a);
%>
下一节咱们探讨下Servlet3.0的新特性