在介绍完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 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}来取出这个变量。
EL-demo
${brands}
这样我们可以把brands的获取(通常是与数据库交互的业务逻辑)与brands的展示(前台页面)进行分离,使代码更加清晰。
JSTL:Java Standarded Tag Library,JSP标准标签库。用标签取代JSP页面上的Java代码。
(1)JSTL的使用需要先引入依赖
jstl
jstl
1.2
taglibs
standard
1.1.2
(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" %>
EL-demo
${brands}
true
序号
品牌名称
企业名称
排序
描述
状态
${status.count}
${brand.name}
${brand.entName}
${brand.order}
${brand.remark}
启用
禁用
至此,我们利用EL与JSTL简化了JSP的开发,大大提升了JSP代码的可读性与易维护性。但是请读者思考,即使JSP克服了代码书写上的复杂,还存在什么问题呢?请关注下一篇文章,继续了解Java Web技术的更迭。