您可以将一些程序逻辑放入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网页可以计算使用者所请求的两个数字相加结果:
<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> 这个例子是取过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指令元素的设定为主。 |