E L(ExpressionLanguage),是用来显示数据的,集合了ECMAScript和XPath的优点,定义了一些在JSP中简化表达式的方法,功能跟<%=表达式%> 一样,EL是不需要引入什么jar包之类。
1.创建一个web 项目,J2EE版本选择1.4,因为EL默认支持1.4,
【注意:1.如果只是使用EL表达式,不需要引入任何jar包,只要JSP/servlet容器实现了J2ee1.4/Servlet2.4、JSP2.0规范就可以。】
【EL>>语法】
el表达式的语法就是一个$符号和一对花括号{}
例如:要取数据,就可以直接写${***},取数据的顺序是:先搜索page,搜索request,再搜索session,再搜索application。
例如:代码实践:
《Servlet》
package com.bjpowernode.jstl;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 测试EL表达式
*
* @author happy
*
*/
public class JstlElServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 普通字符串
request.setAttribute("hello", "Hello World");
// request的分发器进行转发,/代表根
request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
}
}
《JSP的代码》
<h1>测试EL表达式</h1>
<hr>
<li>普通字符串</li>
<br> ①jsp脚本获取:<%=request.getAttribute("hello")%><br>
<br>
<li>EL表达式</li>
<br> ②el表达式,语法:$和{}:${hello}
<br>
运行效果:
【EL>>内置对象】
在EL中,默认的搜索顺序是:page---request---session---application,如果想提高搜索的效率,可以使用内置对象(pageScope,requestScope,sessionScope,applicationScope)直接指定位置搜索。
JSP代码:
<br>③el的内置对象可以指定搜索范围:
<br>pageScope,requestScope,sessionScope,applicationScope:
//${sessionScope.hello} ********${requestScope.hello}
运行效果如下:(因为在Servlet中将数据放在了request中,所以在session范围取不到数据。
【EL>>结构】
建立两个实体类,Group类和User类,如下:
/**
* Group类
*
* @author happy
*
*/
public class Group {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/**
* User类
*
* @author happy
*
*/
public class User {
private String username;
private int age;
private Group group;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
}
在Servlet中,存入相应的数据(与从后台查询返回的数据一样即可,本次只介绍EL表达式,故不涉及后台)
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 测试EL表达式
*
* @author happy
*
*/
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("实验班");
User user = new User();
user.setUsername("郑艳霞");
user.setAge(22);
user.setGroup(group);
request.setAttribute("user", user);
// request的分发器进行转发,/代表根
request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
}
}
JSP中通过.来获取,就如同实体的获取数据形式,但是相比较来说不用引入包什么的。
<li>结构</li>
<br>采用.进行导航,如下:
<br> 姓名:${user.username }
<br> 年龄:${user.age }
<br> 所属组:${user.group.name}
<br>
运行结果如下:
【注意】EL表达式中的user.username,这里的username,指的是类中的get方法。
【EL>>获取Map值】
Servlet代码:
//map
Map map = new HashMap();
map.put("k1", "v11");
map.put("k2", "v22");
request.setAttribute("map", map);
// request的分发器进行转发,/代表根
request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
JSP代码:
<li>map获取</li>
<br> map.k1:${map.k1 }
<br> map.k2:${map.k2 }
<br>
<br>
【EL>>字符串数组】
Servlet代码:
//字符串数组
String[] strArray = new String[]{"a", "b", "c"};
request.setAttribute("str_array", strArray);
request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
JSP代码:
<li>字符串数组,采用[]下标</li>
<br> strArray[1]:${str_array[1] }
<br>
【EL>>对象数组】
Servlet代码:
//对象数组
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);
request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
JSP代码:
<li>对象数组,采用[]下标</li>
<br> users[5].username:${users[5].username }
<br>
【EL>>list】
Servlet代码:
//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);
request.getRequestDispatcher("/jstl_el.jsp").forward(request, response);
JSP代码:
<li>list,采用[]下标</li>
<br> userList[6].username:${userList[6].username }
<br>
【EL>>empty】
Servlet代码:
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代码:
<li>测试empty</li>
<br> v1:${empty v1}
<br> v2:${empty v2}
<br> v3:${empty v3}
<br> v4:${empty v4}
<br> v5:${empty v5}
<br>
运行效果图示: