EL和JSTL
EL(Expression Language)是一种表达式语言
主要用于查找作用域中的数据,然后对它们执行一些简单的操作,用于对jsp标签的属性赋值。
它不是编程语言。
JSTL( JSP Standard Tag Library)是JSP标准 标签库,由apache实现
因为在jsp中出现大量Java代码不利于维护,sun公司就制定了一个类似于html标签一下的jsp标签技术,也有开始于结束标记。
我们可以引用标签来调用标签库中的Java代码片段来实现一下操作。
使用jsp标准标签库有利于程序的可读性,提高了代码的复用性与编程效率。
其目的就是为了jsp中不出现Java代码片段。这两者关系,JSTL通常会结合EL一起使用。
也有理解为EL是JSTL的一部分。EL也可以单独使用
EL的使用
EL表达式的基本格式由$与{}组成,例如:${user.name} 即其意思就是查询得到user对象中的name属性的值。
可以进行一些简单的运算
1 算数运行 + - * / % 注:+只能做算数运算,不能做求和运算
算术运算:${1+"1" } 其结果为2 它会自动将“1”转化为数字进行运算
2 关系运算 == >= <= !=
关系运算:${5=="5"}其结果为true
3 逻辑运算 & | ! && ||
逻辑运算:${a>b&&4<5}其结果为false
在JSP页面中可以通过以下方式使用EL语句
<%
List list=new ArrayList();
list.add(1);
request.setAttribute("list", list);
request.setAttribute("a", "");
request.setAttribute("b", null);
%>
JSTL的使用
引入jstl.jar以及 standard.jar两个架包注:在javaEE5.0以上的版本不需要引入这两个架包
因为在javaEE5.0以上的版本已经包含了这两个架包。
将jstl.jar和standard.jar两个包考到现有工程 WebRoot / WEB-INF / lib 目录下
下面用一个案例来了解如何使用JSTL:
首先准备一个实体类User:
public class User{
private String userId;
private String userName;
private String pwd;
public User(String userId,String userName,String pwd){
this.userId = userId;
this.userName= userName;
this.pwd= pwd;
}
}
然后建立一个Servlet,传入一个User 的list到前端:
import com.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
@WebServlet(name = "DemoServlet" ,urlPatterns = "/demoServlet")
public class Demo05Servlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
ArrayList<User> userList = new ArrayList<>();
for (int i = 0; i < 5; i++) {
userList.add( new User("100"+i,"zs","123456") );
}
session.setAttribute( "userList",userList );
request.setAttribute( "loginUser",new User());
request.getRequestDispatcher( "jsps/demo06.jsp" ).forward( request,response );
}
}
前端JSP页面代码,通过下面的方法就可以显示出Servlet中传入的数据:
<%@ page import="com.User" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:if test="${empty loginUser}">
<h1>请登入</h1>
</c:if>
<c:if test="${!empty loginUser}">
<h1>欢迎!${loginUser.userName}</h1>
</c:if>
<table>
<tr>
<th>用户ID</th>
<th>用户名</th>
<th>密码</th>
</tr>
<%--for(User user:userList)--%>
<c:forEach items="${userList}" var="user">
<tr>
<th>${user.userId}</th>
<th>${user.userName}</th>
<th>${user.pwd}</th>
</tr>
</c:forEach>
</table>
</body>
</html>