06.十分钟学会表达式语言EL
一、 概念:MVC设计模式一个主要好处就是让jsp中的代码越来越来少,而且规定只能出现三种代码:接收属性,判断语句,迭代输出。但是,在开发中,jsp输出至少还是需要接受VO对象的,这时候为了避免导入VO包,只能通过表达式完成
作用:通过表达式语言可以方便的访问标志位方法和属性输出,如果属性不存在,则自动将null设置为“”
二、 表达式语言的内置对象:在表达式中用的内置对象
1, 要求
2, 内置对象
a,内置对象引入:对于如下情况
简单的表达式输出属性时,如果在不同属性范围内保存了同名属性,则查找优先级为page>request>session>application
为了区别不同属性范围内的属性,可以使用表达式的内置对象从不同属性范围查找输出属性。但开发中肯定要避免出现同名属性
b,之前通过pageContext可以取得requset,session,application对象,现在EL通过pageContext可以直接完成 jsp各内置对象方法的调用
分别对应HttpServletRequest接口的getRemoteAddr()和HttpSession接口的getId()、isNew()方法。完成机制当然是反射
c,通过param内置对象接受请求参数:如果未传参数,则用“”表示
以上是接收一个参数,现在有一个名为”inst“的checkbox参数数组,可通过paramValues取得
但开发中一般只传递单个参数
三、 集合操作
1, 要求:可以使用表达式语言进行集合输出
集合回顾:
2, Collection集合的输出
首先将集合保存在属性范围内,然后通过属性输出集合。在实际开发中,JSP只完成紫色部分功能,具体的集合设置由servlet完成。
3, Map集合的输出
依然是首先把集合保存在内置对象的属性范围内,然后通过key值取得相应value
四、 在MVC中应用表达式语言
1, 要求
2, 下面设计一个简化的MVC,理解如何通过表达式语言,在jsp中不导入包即可访问VO对象
VO设计
package com.chen.ying; public class Person { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Servlet设计
public class ELServlet extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{ Person per=new Person(); per.setAge(10); per.setName("小明"); req.setAttribute("person", per);//将VO对象保存在属性范围内 req.getRequestDispatcher("test01.jsp").forward(req, res);//交给jsp显示结果 } }
Jsp设计
可以看到,在jsp页面中,不导 入Person包即可访问VO对象属性。表达式语言在MVC设计模式中的应用即在此,在
Servlet中将VO对象保存在属性范围内,然后jsp通过表达式语言直接访问VO对象属性而不用导包。事实上,jsp只负
责接收、判断、输出,一般只导入java.util.*包
3, 使用mvc传递集合
Servlet设计
public class ELServlet extends HttpServlet { public void doGet(HttpServletRequest req,HttpServletResponse res) throws ServletException, IOException{ List list=new ArrayList(); Person per01=new Person(); per01.setAge(10); per01.setName("小明"); list.add(per01); Person per02=new Person(); per02.setAge(13); per02.setName("小敏"); list.add(per02); req.setAttribute("list", list);//将集合保存在属性范围内 req.getRequestDispatcher("test01.jsp").forward(req, res);//交给jsp显示结果 }
Jsp设计:只要是集合,不管任何情况下都要通过Iterator输出
思想:利用属性范围保存需要传递的数据或需要输出的对象,利用表达式语言和属性输出对象
4,小结
五、 表达式中的运算符
1, 运算符
主要是不用考虑转型的问题,程序自动为我们转换,同时要明确一点,jsp只是用作显示之用。各种运算操作尽量在servlet中完成
2, 数学运算符
3, 关系运算符
4, 逻辑运算符
5, 其他运算符
6, 小结