JSP,JSTL和EL表达式的简单易用

JSP概述

JSP(全称:Java Server Pages):Java 服务端页面。是一种动态的网页技术,其中既可以定义HTML、JS、CSS等静态内容,还可以定义 Java代码的动态内容,也就是 JSP = HTML + Java 。如下就是jsp代码。一般使用<%Java代码%>

<html>
<head>
	<title>Title</title>
</head>
<body>
	<h1>JSP,Hello World</h1>
	<%
		System.out.println("hello,jsp~");
	%>
	</body>
</html>

上面代码 h1 标签内容是展示在页面上,而 Java 的输出语句是输出在 idea 的控制台。

JSP原理
JSP 就是一个页面,那么在 JSP 中写 html 标签,同时JSP 本质上就是一个 Servlet。接下来看jsp流程
在这里插入图片描述

一个简单的输出案例
在这里插入图片描述

先存放一些假数据,存放到HTML页面,然后通过Java语句循环输出,同时使用<td><%=对象名.getId()%></td>进行输出。

<%
// 查询数据库
	List<Brand> brands = new ArrayList<Brand>();
	brands.add(new Brand(1,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火",1));
	brands.add(new Brand(2,"优衣库","优衣库",200,"优衣库,服适人生",0));
	brands.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生",1));
%>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>
	<input type="button" value="新增"><br>
<hr>
<table border="1" cellspacing="0" width="800">
	<tr>
	<th>序号</th>
	<th>品牌名称</th>
	<th>企业名称</th>
	<th>排序</th>
	<th>品牌介绍</th>
	<th>状态</th>
	<th>操作</th>
	</tr>
<%
	for (int i = 0; i < brands.size(); i++) {
		Brand brand = brands.get(i);
%>
	<tr align="center">
	<td><%=brand.getId()%></td>
	<td><%=brand.getBrandName()%></td>
	<td><%=brand.getCompanyName()%></td>
	<td><%=brand.getOrdered()%></td>
	<td><%=brand.getDescription()%></td>
	<td><%=brand.getStatus() == 1 ? "启用":"禁用"%></td>
	<td><a href="#">修改</a> <a href="#">删除</a></td>
</tr>
<%
	}
%>
</table>
</body>
</html>

jsp缺点
在这里插入图片描述
我们可以通过EL表达式对动态信息进行替换。
EL概述

  • EL(全称Expression Language )表达式语言,用于简化 JSP 页面内的 Java 代码。
  • EL 表达式的主要作用是 获取数据。其实就是从 域对象中获取数据,然后将数据展示在页面上。
  • 而 EL 表达式的语法也比较简单${expression} 。例如:${brands} 就是获取域中存储的 key 为 brands 的数据。

例子
定义servlet,在servlet封装数据,并存储到request域对象中,并且转发到所需页面el-demo.jsp

@WebServlet("/demo1")
public class ServletDemo1 extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
		//1. 准备数据
		List<Brand> brands = new ArrayList<Brand>();
		brands.add(new Brand(1,"三只松鼠","三只松鼠",100,"三只松鼠,好吃不上火",1));
		brands.add(new Brand(2,"优衣库","优衣库",200,"优衣库,服适人生",0));
		brands.add(new Brand(3,"小米","小米科技有限公司",1000,"为发烧而生",1));
		//2. 存储到request域中
		request.setAttribute("brands",brands);
		//3. 转发到 el-demo.jsp
		request.getRequestDispatcher("/el-demo.jsp").forward(request,response);
}
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {
		this.doGet(request, response);
}
}

注意: 此处需要用转发,因为转发才可以使用 request 对象作为域对象进行数据共享

在 el-demo.jsp 中通过 EL表达式${封装内容} 获取数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
	<title>Title</title>
</head>
<body>
	${brands}
</body>
</html>

结果
在这里插入图片描述
JSTL标签

概述:JSP标准标签库(Jsp Standarded Tag Library) ,使用标签取代JSP页面上的Java代码。如<c:代码块>

<c:if test="${flag == 1}"></c:if>
<c:if test="${flag == 2}"></c:if>

JSTL 提供了很多标签,如下图在这里插入图片描述
JSTL 使用也是比较简单的,他的使用需要导入相关包

  • 导入坐标
<dependency>
	<groupId>jstl</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>
<dependency>
	<groupId>taglibs</groupId>
	<artifactId>standard</artifactId>
	<version>1.1.2</version>
</dependency>

同时jsp页面上要引入jstl标签库<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

forEach 标签 <c:forEach> :相当于 for 循环。java中有增强for循环和普通for循环,JSTL 中的 <c:forEach> 有两种用法

用法一 类似于 Java 中的增强for循环。涉及到的 <c:forEach> 中的属性如下
items:被遍历的容器
var:遍历产生的临时变量
varStatus:遍历状态对象

servlet 还是使用上方的demo1
定义名为 jstl-foreach.jsp 页面,内容如下:


```java
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>
<input type="button" value="新增"><br>
<hr>
	<table border="1" cellspacing="0" width="800">
	<tr>
		<th>序号</th>
		<th>品牌名称</th>
		<th>企业名称</th>
		<th>排序</th>
		<th>品牌介绍</th>
		<th>状态</th>
		<th>操作</th>
	</tr>
	<c:forEach items="${brands}" var="brand" varStatus="status">
		<tr align="center">
		<%--<td>${brand.id}</td>--%>
		<td>${status.count}</td>
		<td>${brand.brandName}</td>
		<td>${brand.companyName}</td>
		<td>${brand.ordered}</td>
		<td>${brand.description}</td>
	<c:if test="${brand.status == 1}">
		<td>启用</td>
	</c:if>
	<c:if test="${brand.status != 1}">
		<td>禁用</td>
	</c:if>
		<td><a href="#">修改</a> <a href="#">删除</a></td>
		</tr>
	</c:forEach>
</table>
</body>
</html>

用法二
类似于 Java 中的普通for循环。涉及到的 <c:forEach> 中的属性如下
begin:开始数
end:结束数
step:步长

<c:forEach begin="0" end="10" step="1" var="i">
	${i}
</c:forEach>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值