SpringMVC学习手册(三)------EL和JSTL(上)
1.含义
EL: Expression Language , 表达式语言
JSTL: Java Server Pages Standard Tag Library, JSP标准标签库
2.测试项目构建
2.1 复制JSTL的标准实现
复制Tomcat中webapps\examples\WEB-INF\lib下的两个jar包到新建项目目录的WEB-INF\lib下
2.2 在JSP文件中使用taglib标记定义前缀与uri引用
使用Core标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
使用Function标签库:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
然后就可以在自己的JSP页面进行编写测试了
3.EL 学习
3.1 JSP页面的EL控制开关
EL表达式类似于JSP表达式<%=表达式%>,可以通过JSP页面的page指令的isELIgnore属性指明JSP页面是否支持EL表达式.
false:支持
true:不支持
JSP页面默认isELIgnore为false,也就是说一般用Eclipse建立的JSP页面可以直接使用EL表达式
3.2 基本语法的使用:
基本形式:
${EL 隐含对象.关键字对象.属性}
(1)"[]"与"."获取值
一般我们需要获取的值有三种形式:
- JavaBean 中的值
- 数组中的值
- 集合中的值
下面我们通过一个JSP页面来测试这三种获取值的形式:
<%@page import=" java.util.*, model.* "%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% //对象参数 Student s= new Student("Tom",19); pageContext.setAttribute("ps", s); //数组参数 int numList[]={1,2,3,4,5}; pageContext.setAttribute("pnumList",numList); //List集合参数 ArrayList<Integer> sList = new ArrayList<Integer>(); sList.add(1); sList.add(2); sList.add(3); pageContext.setAttribute("psList",sList); //Map集合参数 Map<String,String> m =new HashMap<>(); m.put("Tom", "19"); m.put("Tina","20"); pageContext.setAttribute("pm", m); %> <div>1.取值操作 <p>(1)获取student对象属性(个人觉得使用"."的形式获取更方便):</p> <ul> <li>${ps.name}</li> <li>${ps.age}</li> <li>${ps["name"]}</li> <li>${ps["age"]}</li> </ul> <p>(2)获取数组中的值:</p> <ul> <li>${pnumList[0]}</li> <li>${pnumList[1]}</li> <li>${pnumList[2]}</li> <li>${pnumList[3]}</li> </ul> <p>(3)获取List集合对象中的值:</p> <ul> <li>${psList[0]}</li> <li>${psList[1]}</li> <li>${psList[2]}</li> </ul> <p>(4)获取Map集合对象中的值,如果键为数值,只能使用"[]"形式获取其中的值</p> <ul> <li><span>Tom`s age:</span>${pm.Tom}</li> <li><span>Tina`s age:</span>${pm["Tina"]}</li> </ul> </div> </body> </html>
(2)运算符
算数运算符:
符号 | 示例 | 结果 |
+ | ${1+1} | 2 |
- | ${1-1} | 0 |
* | ${1*1} | 1 |
/ 或div | ${1 /1} | 1 |
% 或 mod | ${10 %3 } | 1 |
关系运算符:
符号: | == 或 eq | != 或 ne | < 或 lt | > 或 gt | <= 或 le | >= 或 ge |
逻辑运算符:
符号 |
&& 或 and |
|| 或 or |
! not |
条件运算符:
符号(三目运算符) |
?: |
empty运算符:
用于检测一个值是否为null,例如变量A不存在,则${empty A} 返回的结果为True
3.3 EL隐含对象
- pageScope
- requestScope
- sessionScope
- applicationScope
其分别对应了JSP的隐含对象:
- pageContext
- request
- session
- application
注意如果一个EL表达式没有指定查找对象,其会依次从page,request,session,application中的范围中查找
- 找到:直接返回,不再继续查出下去
- 没找到:返回空字符串
3.4 EL与请求参数相关的隐含对象
主要用于JSP接受来自form的参数,相关对象为:param和paramValues,通过例子学习其 使用方法
input.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form method="post" action="param.jsp"> 名字:<input type="text" name="userName"/ > <input type="checkbox" name="habit" value="读书"/>读书 <input type="checkbox" name="habit" value="游戏"/>游戏 <input type="checkbox" name="habit" value="跑步"/>跑步 <input type="submit" value="提交"/> </form> </body> </html>
param.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <%request.setCharacterEncoding("UTF-8"); %> ${param.userName } ${paramValues.habit[0]} ${paramValues.habit[1]} ${paramValues.habit[2]} </body> </html>
附录:测试项目