在介绍完JSP的概念之后,我们深感JSP页面开发的困难,但是JSP并非没有做丝毫的努力。本篇将介绍JSP的两个快捷开发手段:EL表达式与JSTL。我们已知道JSP的复杂是来自于将HTML代码与Java代码揉杂在一起,于是我们通过上述的两个手段,可在很大程度上将两种开发语言分离,下面正式开始。
EL:Expression Language,用于在jsp文件中获取数据。语法格式为${expression}。例如:在Servlet中定义了一个brands变量,通过setAttribute方法设置在域中:
package com.byhuang.jsp;
import com.byhuang.pojo.Brand;
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 java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/el-demo")
public class ELDemoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("get...");
List<Brand> brands = new ArrayList<>();
brands.add(new Brand("三只松鼠", "三只松鼠", 100, "三只松鼠,好吃不上火", 1));
brands.add(new Brand("优衣库", "优衣库", 10, "优衣库,舒服", 0));
brands.add(new Brand("小米", "小米", 1000, "小米", 1));
req.setAttribute("brands", brands);
req.getRequestDispatcher("/el-demo.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
那么在JSP中我们就可以通过${brands}来取出这个变量。
<html>
<head>
<title>EL-demo</title>
</head>
<body>
${brands}
</body>
</html>
这样我们可以把brands的获取(通常是与数据库交互的业务逻辑)与brands的展示(前台页面)进行分离,使代码更加清晰。
JSTL:Java Standarded Tag Library,JSP标准标签库。用标签取代JSP页面上的Java代码。
(1)JSTL的使用需要先引入依赖
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/taglibs/standard -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
(2) JSP代码改造,示例了条件语句(c:if)与循环语句(c:forEach)。类似于前端代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>EL-demo</title>
</head>
<body>
${brands}
<c:if test="true">
true
</c:if>
<table border="1" cellspacing="0" width="800">
<tr>
<th>序号</th>
<th>品牌名称</th>
<th>企业名称</th>
<th>排序</th>
<th>描述</th>
<th>状态</th>
</tr>
<c:forEach items="${brands}" var="brand" varStatus="status">
<tr>
<td>${status.count}</td>
<td>${brand.name}</td>
<td>${brand.entName}</td>
<td>${brand.order}</td>
<td>${brand.remark}</td>
<c:if test="${brand.status == 1}">
<td>启用</td>
</c:if>
<c:if test="${brand.status == 0}">
<td>禁用</td>
</c:if>
</tr>
</c:forEach>
</table>
</body>
</html>
至此,我们利用EL与JSTL简化了JSP的开发,大大提升了JSP代码的可读性与易维护性。但是请读者思考,即使JSP克服了代码书写上的复杂,还存在什么问题呢?请关注下一篇文章,继续了解Java Web技术的更迭。