为了使JSP界面上不出现java代码还有界面上获取数据方便,我们就引入了EL表达式和JSTL标签库。这篇博客就讲解一下,EL表达式的使用。
1.语法结构
${expression}
2.存取数据
EL 提供“.“和“[]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如 . 或 - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:${ user.My-Name}应当改为${user["My-Name"]} 。 如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:${sessionScope.user[data]}中data 是一个变量。
3.操作符
4.隐式对象
注意:使用EL的时候,默认会以一定顺序(pageContext、request、session、application)搜索四个作用域,将最先找到的变量值显示出来。
5.JSP界面取值举例
对应servlet赋值:
/**
* 功能:测试EL表达式Servlet
* 作者: 宋笑
* 日期: 2015-11-13 下午04:56:00
*
*/
public class JstlElServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//普通字符串取值实例
request.setAttribute("hello", "Hello World");
//实体取值实例
Group group = new Group();
group.setName("动力节点603班");
User user = new User();
user.setUsername("张三");
user.setAge(23);
user.setGroup(group);
request.setAttribute("user", user);
//map取值实例
Map map = new HashMap();
map.put("k1", "v1");
map.put("k2", "v2");
request.setAttribute("map", map);
//字符串数组取值实例
String[] strArray = new String[]{"a", "b", "c"};
request.setAttribute("str_array", strArray);
//对象数组取值实例
User[] users = new User[10];
for (int i=0; i<users.length; i++) {
users[i] = new User();
users[i].setUsername("张三_" + i);
}
request.setAttribute("users", users);
//list取值实例
List userList = new ArrayList();
for (int i=0; i<10; i++) {
User usr = new User();
usr.setUsername("李四_" + i);
userList.add(usr);
}
request.setAttribute("userList", userList);
//empty实例
request.setAttribute("v2", "");
request.setAttribute("v3", new ArrayList());
request.setAttribute("v4", "12345");
request.setAttribute("v5", null);
request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
}
}
对应jsp取值:
<html>
<head>
<base href="<%=basePath%>">
<title>EL表达式</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<h1>测试EL表达式</h1>
<hr>
<li>普通字符串取值实例</li><br>
hello:${hello }<br>
<p>
<li>实体取值实例</li><br>
姓名:${user.username }<br>
年龄:${user.age }<br>
所属组:${user.group.name }<br>
<p>
<li>map取值实例</li><br>
map.k1:${map.k1 }<br>
map.k2:${map.k2 }<br>
<p>
<li>字符串数组取值实例,采用[]下标</li><br>
strArray[1]:${str_array[1] }<br>
<p>
<li>对象数组取值实例,采用[]下标</li><br>
users[5].username:${users[5].username }<br>
<p>
<li>list取值实例,采用[]下标</li><br>
userList[6].username:${userList[6].username }<br>
<p>
<li>测试empty</li><br>
v1:${empty v1}<br>
v2:${empty v2}<br>
v3:${empty v3}<br>
v4:${empty v4}<br>
v5:${empty v5}<br>
</body>
</html>
注意:如果只使用el表达式不需要引用任何jar包,只要jsp/servlet容器实现了J2EE1.4/Servlet2.4、JSP2.0就可以。
下面一篇博客总结JSTL标签库常用的标签。