1,在MVC中应用EL
EL可以通过反射的方式调用保存在属性范围中的java对象内容,比我们现在有一个这样的VO类(Dept.java):
package com.keith.elDemo; public class Dept { private int deptNo; private String dName; public Dept() { } public int getDeptNo() { return deptNo; } public void setDeptNo(int deptNo) { this.deptNo = deptNo; } public String getdName() { return dName; } public void setdName(String dName) { this.dName = dName; } }
然后我在jsp中可以通过脚本设置相关内容(elTest.jsp):
<% Dept dept = new Dept(); dept.setDeptNo(1); dept.setdName("java"); request.setAttribute("deptInfo",dept); %>
设置完后,我们可以这样访问(elTest.jsp):
部门编号:${deptInfo.deptNo } 部门名称:${deptInfo.dName }
在利用EL输出对象属性的操作中实际上还是依靠java反射机制完成(可以在getter方法上加上输出,测试观察);
看下在MVC模式中怎么运用:
ElServlet:
package com.keith.elDemo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ElServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Dept dept = new Dept(); dept.setDeptNo(007); dept.setdName("Java"); req.setAttribute("deptInfo", dept); req.getRequestDispatcher("elTest.jsp").forward(req, resp); } }
在web.xml:
<servlet> <servlet-name>ELServlet</servlet-name> <servlet-class>com.keith.elDemo.ElServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ELServlet</servlet-name> <url-pattern>/ELServlet</url-pattern> </servlet-mapping>
elTest.jsp:
部门编号:${deptInfo.deptNo } 部门名称:${deptInfo.dName }
此时的页面只管JSP的输出,不用考虑后台是怎么运行的。
2,运算符
在表达式语言中为了方便用户的显示操作定义了许多算术运算符,关系运算符,逻辑运算符,使用这些运算符将会让JSP变得更加简洁;对于太复杂的操作还是应该在Servlet或JavaBean中完成;
No | 算术运算符 | 描述 | 范例 | 结果 |
1 | + | 加法操作 | ${1+1} | 2 |
2 | - | 减法操作 | ${2-1} | 1 |
3 | * | 乘法操作 | ${1*2} | 2 |
4 | /或div | 除法操作 | ${1/2}或${1 div 2} | 0.5 |
5 | %或mod | 取模(余数) | ${1%2}或${1 mod 2} | 1 |
EL中还提供了6种关系运算符:
No | 关系运算符 | 描述 | 范例 | 结果 |
1 | ==或eq | 等于 | ${2 == 3 }或${2 eq 3 } | false||false |
2 | !=或ne | 不等于 | ${2!=3 }或${2 ne 3 } |
true||true |
3 | <或lt | 小于 | ${2<3 }或 ${2 lt 3 } | true|| true |
4 | >或gt | 大于 | ${2>3 }或${2 gt 3 } | false||false |
5 | <=或le | 小于等于 | ${2<=3 }或${2 le 3 } | true|| true |
6 | >=或ge | 大于等于 | ${2>=3 }或${2 ge 3 } | false||false |
EL中提供了3种逻辑运算符:
No | 逻辑运算符 | 描述 | 范例 | 结果 |
1 | &&或and | 与 | ${true && false }或${true and false } | false |
2 | ||或or | 或 | ${true || false }或${true or false } | true |
3 | !或not | 相反 | ${!true }或${not true } | false |
EL中还有3种其他运算符:
No | 其他运算符 | 描述 | 范例 | 结果 |
1 | empty | 判断是否为null | ${empty deptInfo } | false |
2 | ?: | 三目运算 | ${1 > 2 ? "大于":"小于" } | 小于 |
3 | () | 括号运算符 | ${1*(2+3) } | 5 |