一、目标
- 掌握JSTL中的Core标签库中常用标签的语法和使用。
- 需求分析
在页面中JSTL的核心标签库使用非常广泛,本案例将使用其中几个常用标签模拟查询用户订单并在页面显示的效果。
- 设计思路(实现原理)
- 编写JSTLCore类,在里面模拟登录后的用户封装订单并返回页面显示,
- 编写Orders类,用来模拟存储订单信息的实体类,
- 编写JSTLCore.jsp用户订单查看页面,用来模拟查看用户订单信息,
- 配置web.xml文件
- 通过浏览器访问JSTLCore.jsp,展现页面servlet处理响应信息。
二、案例实现
编写JSTLCore类,其代码如下:
public class JSTLCore extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
List<Orders> orderList=new ArrayList<>();
Orders orders1=new Orders();
orders1.setId("00551");
orders1.setAddress("北京昌平");
orders1.setPhone("13785594487");
Orders orders2=new Orders();
orders2.setId("00552");
orders2.setAddress("河北唐三");
orders2.setPhone("15855594483");
orderList.add(orders1);
orderList.add(orders2);
req.setAttribute("username", "张三");
req.setAttribute("orders", orderList);
req.getRequestDispatcher("/JSTLCore.jsp").forward(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
启动Tomcat服务器,在地址栏中输入http://localhost:8080/chapter07/JSTLCore.jsp,浏览器显示的结果如下图所示:
然后点击上方的登录链接,再查看页面效果,浏览器显示的结果如下图所示:
编写JSTLCore.jsp用户订单查看页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body >
<!-- 第一个If语句 -->
<c:if test="${cookie.userName.value ne 'zhangsan' }">
<!-- 登录跳转连接 -->
<c:url value="http://localhost:8080/chapter07/JSTLCore" var="myURL" scope="page">
</c:url>
<a href="${pageScope.myURL}">您好,请先登录</a>
<!-- 注册连接 -->
<c:url var="heURL" value=" ">
</c:url>
<a href="${myURL}">免费注册</a><br/>
<!-- 设置cookie -->
<%
String N=null;
N=(String)request.getAttribute("username");
Cookie cookie =new Cookie("userName",N);
response.addCookie(cookie);
cookie.setMaxAge( 10 );
%><br/><br/><br/>
</c:if>
<!-- 第二个If语句 -->
<c:if test="${cookie.userName.value eq 'zhangsan'}">
张三先生/女士,您好
<!--退出连接 -->
<c:url var="exitURL" value=" ">
</c:url>
<a href="${myURL}">退出</a><br/><br/><br/>
</c:if>
<c:choose>
<c:when test="${cookie.userName.value eq 'zhangsan'}">
<!--输出表格 -->
<table border="1" >
<tr>
<td>ID</td>
<td>订单编号</td>
<td>邮寄地址</td>
<td>联系电话</td>
<td>操作</td>
</tr>
<c:forEach items="${orders}" var="item" varStatus="status">
<tr>
<td>${status.count }</td>
<td>${item.id}</td>
<td>${item.address}</td>
<td>${item.phone}</td>
<td><a href="*">修改</a> <a href="*">删除</a></td>
</tr>
</c:forEach>
</table>
</c:when>
<c:otherwise>
<!-- 负责第二种查找不到的情况-->
查询订单orders集合为空
</c:otherwise>
</c:choose>
</body>
</html>
总结
本案例中综合使用了JSTL中的Core标签库中的几个常用标签完成了上述案例效果,其中使用<c:if>标签判断用户登录状态,然后在后台默认用户登录查询相关订单后,通过<c:choose>标签及其相关子标签以及<c:forEach>标签控制循环展示所有订单信息。