`
jokeymzx
  • 浏览: 51746 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JSP2.1和统一表达式语言

阅读更多

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}照样只会做为字符创文本值显示,不会进行求值。

分享到:
评论

相关推荐

    jsp_2.1_api

    1. **表达式语言(EL)增强**:JSP 2.1引入了EL 2.1,增强了表达式语言的功能,支持更复杂的逻辑运算和类型转换,使得在JSP页面中处理数据更加简洁。 2. **统一的标签库(Tag Library)**:JSP 2.1规范统一了自定义...

    jsp-2_1-fr-spec-docs

    1. **EL(Expression Language)增强**:在JSP 2.1中,EL表达式语言得到了进一步强化,提供了更多的内置函数和操作符,使得数据绑定更加简便,提高了代码的可读性和可维护性。 2. **统一的声明式标签库**:JSP 2.1...

    servlet-api-2.5-6.1.9 + jsp-api-2.1

    1. **表达式语言(EL)2.1**:增强了表达式语言,使得在JSP页面中访问JavaBean属性更加方便。 2. **统一的标签库(JSTL)**:整合了多个标准标签库,简化了JSP页面的编写。 3. **自定义标签**:提供了更好的自定义...

    jsp-api.rar

    1. **统一表达式语言 (Unified EL)**:JSP 2.1将EL作为独立的标准,不再依赖于特定的JSP版本,提升了EL的通用性。 2. **支持XML视图 (XML-based views)**:JSP 2.1允许使用XML语法来编写JSP页面,这在处理XML数据时...

    java表达式引擎

    从提供的文件内容来看,文档主要介绍了Java Unified Expression Language(JUEL),它是一种实现了统一表达式语言(Unified Expression Language,简称EL)的开源Java库。JUEL是JSP 2.1标准(JSR-245)的一部分,...

    J2EE_5.0.rar

    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的技术发展历史.doc

    例如,JSP 2.0引入了表达式语言(EL),使得在页面上访问JavaBean属性更加简洁;JSP 2.1增加了统一的标签库(JSTL),减少了自定义标签的复杂性。 1.3 JSP与数据库集成 JSP可以通过Java数据库连接(JDBC)API与各种...

    Struts2.1权威指南光盘源代码第19章

    5. **OGNL(Object-Graph Navigation Language)**:Struts2默认使用OGNL作为表达式语言,它用于在视图层和模型层之间传递数据,如在JSP中直接访问Action的属性。 6. **Struts2的插件机制**:Struts2支持各种插件,...

    strust2.1应用包

    4. **OGNL(Object-Graph Navigation Language)**:OGNL是Struts2中用于表达式语言,它用于在Action对象和JSP页面之间传递数据,提供了强大的数据访问和操作能力。 5. **插件支持**:Struts2支持许多插件,如...

    struts-2.1.8.1jar包

    4. **OGNL(Object-Graph Navigation Language)**:作为默认表达式语言,OGNL用于在视图和模型之间传递数据,提供强大的访问对象属性的能力。 5. **主题和模板**:Struts2支持多种视图技术,如JSP、FreeMarker、...

    JSP2.0技术手册

    1.1 **表达式语言(EL, Expression Language)** EL是JSP2.0引入的新功能,提供了一种简洁的方式来访问JavaBean属性。它使得开发者无需编写Java脚本,即可轻松访问后台数据,提高了代码的可读性和可维护性。 1.2 *...

    struts-2.1.8.1-all-01

    4. **OGNL(Object-Graph Navigation Language)**:Struts 2内部使用OGNL作为表达式语言,用于在Action和视图之间传递数据。 5. **插件架构**:Struts 2有一个强大的插件系统,可以方便地扩展框架功能,如国际化的...

    Struts2.1权威指南光盘源代码第11章

    3. **OGNL(Object-Graph Navigation Language)**:Struts2中的表达式语言,用于在视图和模型之间传递数据。在Action类和JSP页面中,我们可以通过OGNL表达式访问和操作对象属性。 4. **动态方法调用(Dynamic ...

    JSTL1.2详细配置

    JSTL 1.2详解配置指南 ...总之,JSTL 1.2.x的引入极大地提高了JSP开发的便利性,通过统一EL与JSF的集成,简化了表达式语言的使用。正确地配置和理解这些知识点对于高效利用JSTL 1.2.x是非常关键的。

    动态网页(JSP+Servlet)教程

    - 设置页面的基本属性,如语言和内容类型。 - 示例: `; charset=UTF-8" %&gt;` - **include 指令** - 在页面编译期间包含其他文件。 - 示例: `&lt;%@ include file="header.jsp" %&gt;` - **taglib 指令** - 引入...

    Tomcate6下载

    1. **表达式语言(EL)增强**:EL2.1引入了更多的函数库支持,可以方便地与JavaBeans和其他框架集成,简化了视图层的代码编写。 2. **统一标签库(JSTL)**:JSTL1.2成为JSP 2.1的一部分,提供了标准的标签库,使得...

    tomcat6.0.exe

    Tomcat 6.0支持JSP 2.1和Servlet 2.5规范,提供了诸如标签库支持、表达式语言(EL)以及统一的部署描述符(web.xml)等功能。开发JSP页面时,可以使用EL来访问JavaBean或其他数据源,而无需在每个页面中插入大量Java...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    第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 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    第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 ...

Global site tag (gtag.js) - Google Analytics