• 1. JAVA WEB开发实战经典第8章:表达式语言(EL)Java Web程序设计
  • 2. 表达式语言 表达式语言(Expression Language,简称EL)是JSP 2.0中增加的新功能。 使用表达式语言,可以 获取PageContext的属性值 直接访问JSP的内置对象 方便的访问作用范围:page(pageContext)、request、session、application中的属性内容 访问集合对象 使用语法如下: ${属性名称}
  • 3. 访问作用域变量 <%@ page contentType="text/html" pageEncoding=“UTF-8"%> EL <% request.setAttribute("info",“zhangsan") ; // 设置一个request属性 if (request.getAttribute("info") != null){ // 判断是否有属性存在 %>

    <%=request.getAttribute("info")%>

    <% } %>
  • 4. 访问作用域变量----使用表达式语言,输出属性内容 <%@ page contentType="text/html" pageEncoding=“UTF-8"%> EL <% request.setAttribute("info" , “zhangsan") ;// 设置一个request属性 %>

    ${info}

  • 5. 访问JavaBean属性 通过点号运算符“.”或“[ ]”来访问 具体使用格式: ${作用域对象名.属性名} 相当于调用JavaBean对象的getter方法操作对象类型调用方法对应EL示例JavaBean对象.getXXX()${对象.属性名} ${对象[‘属性名’]} ${对象[“属性名”]}
  • 6. 访问集合元素 通过EL表达式可以访问数组、List、Map等集合对象的元素访问的数据类型对应EL示例返回值调用方法数组${数组名[下标]} ${数组名[‘下标’]} ${数组名[“下标”]}返回对应下标数组元素的值数组名[下标]List${List对象名[下标]} ${List对象名[‘下标’]} ${List对象名[“下标”]}返回对应下标集合元素的值List对象名.get(下标)Map${Map对象名.键名} ${Map对象名[‘键名’]} ${Map对象名[“键名”]}返回对应键名的值Map对象名.get(“键名”)
  • 7. EL内置对象 No.表达式内置对象说明1pageContext表示javax.servlet.jsp.PageContext对象2pageScope表示从page属性范围查找输出属性3requestScope表示从request属性范围查找输出属性4sessionScope表示从session属性范围查找输出属性5applicationScope表示从application属性范围查找输出属性6param接收传递到本页面的参数7paramValues接收传递到本页面的一组参数8header取得一个头信息数据9headerValues取出一组头信息数据10cookie取出cookie中的数据11initParam取得配置的初始化参数
  • 8. 内置对象---属性范围 No.属性范围范例说明1pageScope${pageScope.属性}取出page范围的属性内容2requestScope${requestScope.属性}取出request范围的属性内容3sessionScope${sessionScope.属性}取出session范围的属性内容4applicationScope${applicationScope.属性}取出application范围的属性内容
  • 9. 指定取出范围的属性 <%@ page contentType="text/html" pageEncoding=“UTF-8"%> 指定属性范围 <% pageContext.setAttribute("info","page属性范围") ; // 设置一个page属性 request.setAttribute("info" , "request属性范围") ; // 设置一个request属性 session.setAttribute("info" , "session属性范围") ; // 设置一个session属性 application.setAttribute("info" , "application属性范围") ;// 设置一个application属性 %>

    PAGE属性内容:${pageScope.info}

    REQUEST属性内容:${requestScope.info}

    SESSION属性内容:${sessionScope.info}

    APPLICATION属性内容:${applicationScope.info}

  • 10. 与请求参数相关的内置对象-----param、paramValuesparam 获取传递过来的单值参数的值 相当于请求对象调用getParameter()方法的效果 paramValues: 获取传递过来的多值参数的值 相当于请求对象调用getParameterValues()方法的效果
  • 11. 与请求参数相关的内置对象-----param、paramValues <%@ page contentType="text/html" pageEncoding=“UTF-8"%> EL

    通过内置对象接收输入参数:<%=request.getParameter("ref")%>

    通过表达式语言接收输入参数:${param.ref}

  • 12. 使用表达式接收一组参数<%@ page contentType="text/html" pageEncoding=“UTF-8"%> EL <% request.setCharacterEncoding(“UTF-8") ; %>

    第一个参数:${paramValues.inst[0]}

    第二个参数:${paramValues.inst[1]}

    第三个参数:${paramValues.inst[2]}

  • 13. 与请求头相关的内置对象-----header、headerValuesheader 访问HTTP请求的一个具体的Header值 headerValues: 访问所有HTTP请求的Header值
  • 14. 与初始化参数相关的内置对象-----initParaminitParam 用于获取web.xml文件中配置的初始化参数 相当于ServletContext.getInitParameter()方法的作用
  • 15. 运算符 在表达式语言中为了方便用户的显示操作定义了许多算术运算符、关系运算符、逻辑运算符等。 在使用这些运算符的时候,所有的操作内容也可以直接使用设置的属性,而不用考虑转型的问题。
  • 16. 数学运算符 No.算术运算符描述范例结果1+加法操作${20 + 30}502-减法操作${20 - 30}-103*乘法操作${20 * 30}6004/ 或 div除法操作${20 / 30} 或 ${20 div 30}0.6665% 或 mod取模(余数)${20 % 30} 或 ${20 mod 30}20
  • 17. 数学运算操作 <%@ page contentType="text/html" pageEncoding=“UTF-8"%> EL <% // 设置page范围属性,基本数据类型自动变为包装类 pageContext.setAttribute("num1", 20) ; pageContext.setAttribute("num2", 30) ; %>

    加法操作:${num1 + num2}

    减法操作:${num1 - num2}

    乘法操作:${num1 * num2}

    除法操作:${num1 / num2}和${num1 div num2}

    取模操作:${num1 % num2}和${num1 mod num2}

  • 18. 关系运算符 No.关系运算符描述范例结果1== 或 eq等于${20 == 30} 或 ${20 eq 30}false2!= 或 ne不等于${20 != 30} 或 ${20 ne 30}true3< 或 lt小于${20 < 30} 或 ${20 lt 30}true4> 或gt大于${20 > 30} 或 ${20 gt 30}false5<= 或 le小于等于${20 <= 30} 或 ${20 le 30}true6>= 或 ge大于等于${20 >= 30} 或 ${20 ge 30}false
  • 19. 验证关系运算符 <%@ page contentType="text/html" pageEncoding=“UTF-8"%> EL <% // 设置page范围属性,基本数据类型自动变为包装类 pageContext.setAttribute("num1", 20) ; pageContext.setAttribute("num2", 30) ; %>

    相等判断:${num1 == num2}和${num1 eq num2}

    不等判断:${num1 != num2}和${num1 ne num2}

    小于判断:${num1 < num2}和${num1 lt num2}

    大于判断:${num1 > num2}和${num1 gt num2}

    小于等于判断:${num1 <= num2}和${num1 le num2}

    大于等于判断:${num1 >= num2}和${num1 ge num2}

  • 20. 逻辑运算符 No.逻辑运算符描述范例结果1&& 或 and与操作${true && false} 或 ${true and false}false2|| 或 or或操作${true || false} 或 ${true or false}true3! 或 not非操作(取反)${!true} 或 ${not true}false
  • 21. 验证逻辑运算符 <%@ page contentType="text/html" pageEncoding=“UTF-8"%> EL <% // 设置page范围属性,基本数据类型自动变为包装类 pageContext.setAttribute("flagA", true) ; pageContext.setAttribute("flagB", false) ; %>

    与操作:${flagA && flagB}和${flagA and flagB}

    或操作:${flagA || flagB}和${flagA or flagB}

    非操作:${!flagA}和${not flagA}

  • 22. 其他运算符 No.其他运算符描述范例结果1empty判断是否为null${empty info}true2? : 三目运符${10>20 ? "大于" : "小于"}小于3()括号运算符${10 * (20 + 30)}500
  • 23. 验证其他操作符 <%@ page contentType="text/html" pageEncoding=“UTF-8"%> EL <% // 设置page范围属性,基本数据类型自动变为包装类 pageContext.setAttribute("num1", 10) ; pageContext.setAttribute("num2", 20) ; pageContext.setAttribute("num3", 30) ; %>

    empty操作:${empty info}

    三目操作:${num1>num2 ? "大于" : "小于"}

    括号操作:${num1 * (num2 + num3)}

  • 24. 使用MVC传递集合要输出一个集合的话,那么还是要依靠Iterator完成,通过Iterator找出集合中的每一个元素,可以将每一个取出的对象(Object)存放在page范围中(因为每一个要输出的内容只在本页有效),之后再通过EL表达式输出即可
  • 25. 定义Servlet传递集合 public class ELListServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List list = new ArrayList() ;// 实例化List接口 User user = null ; // 定义User对象 user = new User (“1001”,”zhangsan”,”123456”,”张三”) ; // 实例化User对象 list.add(user) ; // 向集合中增加User属性 user = new User (“1002”,”lisi”,”123456”,”李四”) ; // 重新实例化User对象 list.add(user) ; // 向集合中增加User属性 request.setAttribute(“list",list) ; // 设置request属性 request.getRequestDispatcher(“listUsers.jsp") .forward(request, response); // 通过服务器跳转传递request属性 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doGet(request, response); // 调用doGet()操作 } }
  • 26. 使用表达式输出集合 <% List list = (List) request.getAttribute(“list") ; // 接收List集合 if (list != null){ // 判断是否为空 %> <% Iterator it = list.iterator() ; // 实例化Iterator对象 while(it.hasNext()) { // 迭代输出 pageContext.setAttribute(“user”,it.next()) ; // 设置pageContext属性范围 %> <% }%>
    用户编号 用户名 真实姓名
    ${user.id} ${user.username} ${user.realname}
    <% }%>