大可制作:QQ群:31564239(asp|jsp|php|mysql)

JSP/Servlet: 简介 Expression Language

您可以将一些程序逻辑放入JavaBean中,并配合<jsp:useBean>、<jsp: setProperty>与 <jsp:getProperty>等标签来撰写JSP网页,以实现逻辑与视图分开的目的,然而使用JavaBean有其限制, JavaBean配合标签只能用来存取一些简单的属性,而不能用来存取集合中的某个元素,这仍必须要配合Scriptlet才能存取。

另外为了要使用一些JSP隐含对象,例如request、response、session等等,您也不免要使用Scriptlet,在 JSP中,为了要实现逻辑视图分离的目的,您还必须要搭配使用JSP标准标签函数库(JavaServer Page Standard Library,JSTL)或甚至自订标签函数库(custom tag library)来实现。

JSP Expression Language本来是包括在JSTL 1.0的一个简单的数据存取与运算的语言,在JSP 2.0中,则纳入了JSP正式标准之中,成为JSP所支持的特性之一,JSP Expression Language定义了变量存取、运算、隐含对象、函数等内容,配合JSTL的其它标签或流程控制标签,就可以实现更好的逻辑视图分离之目的。

来看个简单的例子,了解JSP Expression Language的基本使用方式,下面这个JSP网页可以计算使用者所请求的两个数字相加结果:

  • elTest.jsp
<html> 
<head><title>EL Test</title></head>
<body>
简单的EL数据存取与运算:
<H1> ${param.a} + ${param.b} = ${param.a + param.b} </H2>
</body>
</html>

如果使用表单或直接在网址上传入a与b的值,例如:
http://localhost:8080/myjsp/elTest.jsp?a=10&b =14

则会取得下面的结果:
<html>
<head><title>EL Test</title></head>
<body>
    简单的EL数据存取与运算:
    <H1> 10 + 14 = 24 </H2>
</body>
</html>

在这个简单的例子中,您可以看到Expression Language是使用 ${ 与 } 来包括所要存取的隐含对象、变量与进行运算,param是Expression Language的隐含对象,表示使用者的请求参数,param.a表示取得使用者请求参数a的值,大致而言,Expression Language中的每一个隐含对象,其存取的数据与作用范围对应于JSP隐含对象,在之后的主题中将会有更详细的介绍,至于 + 则是Expression Language中定义的运算符,EL运算符同一般的程序语言一样,提供有算术运算、逻辑运算、关系运算等运算符,另外还有一些特别的运算符,这在之后会 再介绍。

在上面这个例子中,您看不到Scriptlet的部份,在语法上可以更切合的结合在HTML语法中,再来看一个简单的例子,使用Expression Language的pageContext隐含对象来取得一些使用者的相关讯息:

  • elTest.jsp
<html> 
<head><title>EL Test</title></head>
<body>
请求方法:<b> ${pageContext.request.method} </b><br>
请求参数:<b> ${pageContext.request.queryString} </b><br>
使用者IP:<b> ${pageContext.request.remoteAddr} </b><br>
</body>
</html>

这个例子是取过Expression Language的pageContext来存取javax.servlet.ServletContext, 并透过该接口来存取request属性,也就是调用getRequest()方法来取得HttpServletRequest,然后再存取 HttpServletRequest的各个属性,也就是分别调用getMethod()、getQueryString()、 getRemoteAddr()等方法,执行的结果可能是:
<html>
<head><title>EL Test</title></head>
<body>
    请求方法:<b> GET </b><br>
    请求参数:<b> a=10&b=14 </b><br>
    使用者IP:<b> 127.0.0.1 </b><br>
</body>
</html>

关于Expression Language的一般例子,您可以在Tomcat的范例中先找到一些程序,启动Tomcat之后您就可以进行线上测试,本地测试网址是:
http: //localhost:8080/jsp-examples/

您可以使用 page指令元素 的isELIgnored属性来设定JSP网页是否使用EL,原因在于您的网页中可能已含有与EL类似的语法,例如样版文字之类,您也可以在web.xml中设定<el-ignored>标签为true来决定不使用EL,例如:
...
<web-app ..>
    ....
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <el-ignored>true</el-ignored>
        </jsp-property-group>
    </jsp-config>
....
</web-app>

web.xml中的<el-ignored>是用来默认所有JSP网页是否使用EL,如果JSP网页使用page指令元素的isELIgnored设定是否支持EL,则以page指令元素的设定为主。