一、引入
在介绍完JSP的概念之后,我们深感JSP页面开发的困难,但是JSP并非没有做丝毫的努力。本篇将介绍JSP的两个快捷开发手段:EL表达式与JSTL。我们已知道JSP的复杂是来自于将HTML代码与Java代码揉杂在一起,于是我们通过上述的两个手段,可在很大程度上将两种开发语言分离,下面正式开始。
二、EL表达式
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 {@Overrideprotected 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);}@Overrideprotected 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
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技术的更迭。