JSP2.1的新特性
1、新的统一表达式语言,允许表达式延期求值,表达式既可以取值也可以赋值,还可以调用方法。
2、可以通过注解实现资源注入,简化配置访问资源或外界对象。比如访问JNDI对象。
3、统一了JSF标签和JSP的实现,建立在统一表达式语言基础上。
统一表达式语言
1、在常规的JSP应用中,请求处理模型只有一个阶段即页面渲染,所以表达式可以立即求值返回给响应response即可。而且表达式只需要从后台对象中取值显示。JSP中表达式语言以“$”开头。
2、在JSF中请求处理模型分解成了6个阶段,每个阶段都有可能用到表达式,所以要求表达式支持延期求值。即在不同的阶段都可以通过表达式语言访问特定的对象。用户在界面输入内容后在postback期间要赋给服务器端的对象,所以需要表达式有赋值功能。另外在验证数据和处理事件,需要后台托管bean的方法,所以表达式需要支持方法调用。JSF表达式语言以“#”开头。
因此,JSP和JSF对表达式语言的使用和要求是不一样的,因此也造成了二者不能一起很好的配合使用,例如下面的应用:
<c:forEach var="location" items="${handler.locations}">
<h:inputText value="#{location}"/>
</c:forEach>
变量“location”只能在迭代阶段使用,但是在postback期间,无法访问。
为了解决JSP和JSF中表达式语言不一致的问题,统一表达式语言出现了。上面提到的问题就可以通过下面的方式解决了:
<c:forEach var="location" items="#{locations}">
<h:inputText value="#{location}"/>
</c:forEach>
统一表达式语言的特性:
1、延期求值。
2、既能从对象中获得值也能给对象赋值。
3、支持方法表达式,允许调用调用方法实现JSF UICompnent验证、处理事件和其它一些功能。
4、 灵活的扩展机制去实现新的表达式求值方法实现。
JSP2.1中使用表达式语言
1、在JSP中模板文本中只能使用${expr},下面的使用时非法的
……………………………
<body>
Hellow #{userName}
……………………………
2、#{expr}只能在标签属性中使用。
如果标签的tld文件中指定的JSP版本为2.1之前(如:JSF1.1中的标签),那么“#{” 解析为字符串文本,因为这些标签会自己处理表达式。如果JSP版本为2.1之后,“#{”接解析为延期表达式,但是如果tld属性没有标明支持延期求值(使用<deferred-value>标记),在转换阶段会报错。
3、在JSP2.1之前,“#{}”语法是不会被处理的,所以在基于JSP2.1之前编写的页面在支持JSP2.1的容器中运行的时候,为了保证能正常运行,有两个办法解决。
1、在“#”前加“\”。
2、在web.xml中添加
<jsp-property-group>
<deferred-syntax-allowed-as-literal>
true
</deferred-syntax-allowed-as-literal>
</jsp-property-group>
或者在JSP中添加:
<%@page ... deferredSyntaxAllowedAsLiteral="true" %>
比如test.jsp中有如下一段代码:
……………………………
<body>
Hellow #{userName}
……………………………
在实现jsp2.1规范之前的容器中可以正常运行,但是#{username}直接作为字符串文本值显示。
在实现jsp2.1规范的容器中,需要在修改为
……………………………
<body>
Hellow \#{userName}
……………………………
或者
<%@ deferredSyntaxAllowedAsLiteral="true"%>
……………………………
<body>
Hellow #{userName}
……………………………
注意:#{username}照样只会做为字符创文本值显示,不会进行求值。
分享到:
相关推荐
1. **表达式语言(EL)增强**:JSP 2.1引入了EL 2.1,增强了表达式语言的功能,支持更复杂的逻辑运算和类型转换,使得在JSP页面中处理数据更加简洁。 2. **统一的标签库(Tag Library)**:JSP 2.1规范统一了自定义...
1. **EL(Expression Language)增强**:在JSP 2.1中,EL表达式语言得到了进一步强化,提供了更多的内置函数和操作符,使得数据绑定更加简便,提高了代码的可读性和可维护性。 2. **统一的声明式标签库**:JSP 2.1...
1. **表达式语言(EL)2.1**:增强了表达式语言,使得在JSP页面中访问JavaBean属性更加方便。 2. **统一的标签库(JSTL)**:整合了多个标准标签库,简化了JSP页面的编写。 3. **自定义标签**:提供了更好的自定义...
1. **统一表达式语言 (Unified EL)**:JSP 2.1将EL作为独立的标准,不再依赖于特定的JSP版本,提升了EL的通用性。 2. **支持XML视图 (XML-based views)**:JSP 2.1允许使用XML语法来编写JSP页面,这在处理XML数据时...
从提供的文件内容来看,文档主要介绍了Java Unified Expression Language(JUEL),它是一种实现了统一表达式语言(Unified Expression Language,简称EL)的开源Java库。JUEL是JSP 2.1标准(JSR-245)的一部分,...
Servlet 2.5允许动态加载Servlet,增强了过滤器和监听器的灵活性,而JSP 2.1引入了表达式语言(EL)2.1版,提高了模板文本处理性能,并支持JSF 1.2。 **5. JavaServer Faces (JSF) 1.2:** JSF 1.2是J2EE 5.0中的...
例如,JSP 2.0引入了表达式语言(EL),使得在页面上访问JavaBean属性更加简洁;JSP 2.1增加了统一的标签库(JSTL),减少了自定义标签的复杂性。 1.3 JSP与数据库集成 JSP可以通过Java数据库连接(JDBC)API与各种...
5. **OGNL(Object-Graph Navigation Language)**:Struts2默认使用OGNL作为表达式语言,它用于在视图层和模型层之间传递数据,如在JSP中直接访问Action的属性。 6. **Struts2的插件机制**:Struts2支持各种插件,...
4. **OGNL(Object-Graph Navigation Language)**:OGNL是Struts2中用于表达式语言,它用于在Action对象和JSP页面之间传递数据,提供了强大的数据访问和操作能力。 5. **插件支持**:Struts2支持许多插件,如...
4. **OGNL(Object-Graph Navigation Language)**:作为默认表达式语言,OGNL用于在视图和模型之间传递数据,提供强大的访问对象属性的能力。 5. **主题和模板**:Struts2支持多种视图技术,如JSP、FreeMarker、...
1.1 **表达式语言(EL, Expression Language)** EL是JSP2.0引入的新功能,提供了一种简洁的方式来访问JavaBean属性。它使得开发者无需编写Java脚本,即可轻松访问后台数据,提高了代码的可读性和可维护性。 1.2 *...
4. **OGNL(Object-Graph Navigation Language)**:Struts 2内部使用OGNL作为表达式语言,用于在Action和视图之间传递数据。 5. **插件架构**:Struts 2有一个强大的插件系统,可以方便地扩展框架功能,如国际化的...
3. **OGNL(Object-Graph Navigation Language)**:Struts2中的表达式语言,用于在视图和模型之间传递数据。在Action类和JSP页面中,我们可以通过OGNL表达式访问和操作对象属性。 4. **动态方法调用(Dynamic ...
JSTL 1.2详解配置指南 ...总之,JSTL 1.2.x的引入极大地提高了JSP开发的便利性,通过统一EL与JSF的集成,简化了表达式语言的使用。正确地配置和理解这些知识点对于高效利用JSTL 1.2.x是非常关键的。
- 设置页面的基本属性,如语言和内容类型。 - 示例: `; charset=UTF-8" %>` - **include 指令** - 在页面编译期间包含其他文件。 - 示例: `<%@ include file="header.jsp" %>` - **taglib 指令** - 引入...
1. **表达式语言(EL)增强**:EL2.1引入了更多的函数库支持,可以方便地与JavaBeans和其他框架集成,简化了视图层的代码编写。 2. **统一标签库(JSTL)**:JSTL1.2成为JSP 2.1的一部分,提供了标准的标签库,使得...
Tomcat 6.0支持JSP 2.1和Servlet 2.5规范,提供了诸如标签库支持、表达式语言(EL)以及统一的部署描述符(web.xml)等功能。开发JSP页面时,可以使用EL来访问JavaBean或其他数据源,而无需在每个页面中插入大量Java...
第16章 表达式语言(el) 484 16.1 语法 484 16.1.1 “[ ]”和“.”操作符 484 16.1.2 算术操作符 484 16.1.3 关系操作符 485 16.1.4 逻辑操作符 485 16.1.5 empty操作符 485 16.1.6 条件操作符 485 16.1.7 ...
第16章 表达式语言(el) 484 16.1 语法 484 16.1.1 “[ ]”和“.”操作符 484 16.1.2 算术操作符 484 16.1.3 关系操作符 485 16.1.4 逻辑操作符 485 16.1.5 empty操作符 485 16.1.6 条件操作符 485 16.1.7 ...