注意这里详细讲解如何在jsp中使用el表达式。 如果你不满足以下任一条件,请继续阅读,否则请跳过此后的部分,进入下一章:第 14 章 生命周期。
我们已经知道el是jsp-2.0规范的一部分,tomcat-5.x版本以上都已经能够支持jsp-2.0规范,但在更低版本的tomcat和webphere,weblogic中还是无法使用这一便捷方式。 其实我们也可以选择在jsp中禁止使用el表达式,使用jsp指令(directive)可以对禁用某一个jsp中的el表达式。 禁用之后的el表达式会以原样显示出来,如下图所示。 ![]() 为了对照,我们还在13-01下放了一个可以正常使用el表达式的例子,运行效果如下图显示。 ![]() 在13-01/index.jsp中禁用el表达式,是使用了isELIgnore="true"这样一条jsp指令(directive),请注意大小写。 <%@ page isELIgnored="true" %> <% pageContext.setAttribute("hello", "Hello World"); %> ${hello} 还有一种批量禁用el的方法,我们可以在WEB-INF/web.xml中使用jsp-property-group标签批量禁用el,我们在13-02/WEB-INF/web.xml中进行如下配置。 <xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java./xml/ns/j2ee" xmlns:xsi="http://www./2001/XMLSchema-instance" xsi:schemaLocation="http://java./xml/ns/j2ee http://java./xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config> </web-app> 这样就会禁用所有以.jsp后缀的请求中的el表达式,使用这种方式需要注意两点。
实际上还有第三种方法可以禁用掉所有jsp中的el表达式,那就是把web.xml定义为2.3版。 <xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java./dtd/web-app_2_3.dtd"> <web-app> </web-app> 这个就是13-03/WEB-INF/web.xml的定义,定义了web-app的版本号是2.3,这样一来所有的jsp都无法使用el表达式了,因为el表达式是2.4版才开始支持的功能。 注意说了以上三种禁用el表达式的方法,不是希望大家抛弃el表达式,相反是希望大家在自己编写el时出现问题时,先去考虑是否有人在这三个地方做了设置造成el表达式的失效。建议大家多多使用el表达式,少用一些jsp中的scriptlet代码。 使用el的时候,默认会以一定顺序搜索四个作用域,将最先找到的变量值显示出来。 ![]() 如果我们有${username}这样一个正则表达式,它回去依次调用pageContext.getAttribute("username") -> request.getAttribute("username") -> session.getAttribute("username") -> application.getAttribute("username"),只要找到某一个不为空的值就立刻返回。 这样的确方便我们的操作,但是随之也出现了另外一个问题,如果pageContext和request中有同名变量,但是我想取得request中的变量该如何是好呢?这就需要为el表达式引入作用域的概念了。 ${pageScope.username} ${requestScope.username} 我们可以直接访问13-04这个应用,看看el表达式支持的所有对象。 ![]() 下面我们分别对每个作用域对象进行讲解。 表 13.1. el中的作用域
以上都是死记硬背的东西,建议实际用到的时候翻看一下就好了,演示代码都放在13-04下,为了获得param和cookie还要点击一下最下边的连接才可以。 |
|
来自: 曾今最强 > 《java成长之路》