我们现在已经了解了MVC开发的模式,也知道我们的JSP就是用来实现表示层的,不应该有太多的java代码。
在如今的MVC模式下,我们认为一个合格的JSP页面,应该只有三种代码:
接收属性
判断语句
迭代输出
而表达式语言就是为了让JSP页面能否符合我们MVC规范化并让我们输出更加简单而产生的语言。
${属性名称}
如果没有表达式语言,我们在接受一个属性的时候,还要对属性进行一个是否为空的判断操作。否则万一是空的话,会输出一个null。但如果使用${}表达的话,当出现空的时候,就会用空字符串来代替。而且表达上看起来也较为简洁。
当出现多个同名的属性时,将输出作用范围最小的属性。
使用表达式还接受VO对象,可以让JSP不用导入VO类。只需要将VO对象从servlet中传递过来,可以直接用$(对象名.属性);来接收。
在这个表达式里,可以使用常见运算符,而且会自动转型。这一点算是比较方便。但是不要依赖于表达式的运算处理。稍微复杂一点的,咱们就不要放到JSP里面了。它就是用来显示的,加入几个简单的运算就已经足够了。
内置对象
如上一节中,如果有多个同名不同范围的属性都需要输出,那该怎么办呢? EL(表达式语言)提供了若干个内置对象。恰好,这里就可以使用其中的四个对象。比如说,我想要输出request范围的那个属性,则只需要${requestScope.属性名称}即可。
但EL提供的最有用的内置对象还是pageContext。在JSP里也学过,用这个对象可以调用其它几个对象的方法。所以在EL中,也就没有提供其它的几个范围对象了。直接通过pageContext来调用一些方法,完成获得IP地址和session值等操作。
还有两个内置对象是param和paramvalues,这两个对象是用来接收传递过来的参数或者数组的。如果是一个参数时,使用${param.参数名}接收,如果是一个数组时,用${param.参数名[下标]}接收。