您可以将一些程序逻辑放入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隐含对象来取得一些使用者的相关讯息:
<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,例如:
....... <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指令元素的设定为主。