动态网站开发学习笔记07:EL和JSTL
文章目录
一、EL
案例演示
(1)用EL读取保存的信息
创建Java Enterprise项目 - ELJSTLDemo
单击【Finish】按钮
修改Artifact名称
重新部署项目
修改首页
启动服务器,查看结果
创建net.huawei.servlet包,在包里创建ServletDemo01类
package net.huawei.servlet;
import javax.servlet.RequestDispatcher;
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;
/**
* 功能:保存request属性,请求转发到指定页面
* 作者:华卫
* 日期:2023年04月20日
*/
@WebServlet(name = "ServletDemo01", urlPatterns = "/demo01")
public class ServletDemo01 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 保存request属性
request.setAttribute("username", "无心剑");
request.setAttribute("password", "903213");
// 获取请求转发器,转发到`demo01.jsp`页面
RequestDispatcher dispatcher = request.getRequestDispatcher("/demo01.jsp");
// 请求转发
dispatcher.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
}
在web目录里创建demo01.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo01</title>
</head>
<body>
使用JSP表达式获取属性:<br />
用户名:<%=request.getAttribute("username")%> <br />
密码:<%=request.getAttribute("password")%> <br />
<hr />
使用EL获取属性:<br />
用户名:${username} <br />
密码:${password} <br />
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo01
pageContext对象
pageContext对象案例
在web目录下创建一个demo02.jsp文件,演示pageContext隐式对象的用法
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo02 - 演示pageContext对象</title>
</head>
<body>
请求URI为:${pageContext.request.requestURI} <br />
Content-Type响应头:${pageContext.response.contentType} <br />
服务器信息:${pageContext.servletContext.serverInfo} <br />
Servlet注册名:${pageContext.servletConfig.servletName} <br />
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo02.jsp
Web域相关对象案例
在web目录下创建一个demo03.jsp文件,演示这4个隐式对象如何访问JSP域对象中的属性
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo03 - 演示Web域相关对象</title>
</head>
<body>
<% pageContext.setAttribute("userName", "无心剑"); %>
<% request.setAttribute("bookName", "动态网站开发"); %>
<% session.setAttribute("userName", "陈燕文"); %>
<% application.setAttribute("bookName", "大数据实时处理"); %>
表达式\${pageScope.userName}的值为:${pageScope.userName} <br />
表达式\${requestScope.bookName}的值为:${requestScope.bookName} <br />
表达式\${sessionScope.userName}的值为:${sessionScope.userName} <br />
表达式\${applicationScope.bookName}的值为:${applicationScope.bookName} <br />
表达式\${userName}的值为:${userName}
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo03.jsp
访问环境信息的隐式对象
案例演示获取客户端传递的请求参数
在web目录下创建一个demo04.jsp文件,演示获取客户端传递的请求参数
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo04 - 演示获取客户端传递的请求参数</title>
</head>
<body style="text-align: center;">
<form action="${pageContext.request.contextPath}/demo04.jsp">
num1:<input type="text" name="num1"><br />
num2:<input type="text" name="num"><br />
num3:<input type="text" name="num"><br /> <br />
<input type="submit" value="提交" />
<input type="submit" value="重置" /><hr />
num1: ${param.num1} <br />
num2: ${paramValues.num[0]} <br />
num3: ${paramValues.num[1]} <br />
</form>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo04.jsp
在上图的表单中输入三个数字,分别为100、200、300,然后单击提交按钮
Cookie对象
Cookie对象案例
在web目录下创建一个demo05.jsp文件,演示如何获取Cookie对象中的信息
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo05.jsp,由于是浏览器第一次访问demo05.jsp页面,此时,服务器还没有接收到名为userName的Cookie信息,所以,浏览器窗口中不会显示Cookie对象的信息。
刷新页面,查看结果
initParam对象
initParam对象案例
在web.xml里设置Web应用初始化参数
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<context-param>
<param-name>author</param-name>
<param-value>无心剑</param-value>
</context-param>
</web-app>
在web目录下创建一个demo06.jsp文件,演示通过initParam对象获取Web应用初始化参数
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo06 - 演示通过initParam对象获取Web应用初始化参数</title>
</head>
<body>
Web应用初始化参数author的值:${initParam.author}
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo06.jsp
三、JSTL
导入JSTL包
在WEB-INF里创建lib目录,将jstl.jar和standard.jar这两个文件复制到lib目录
将jstl.jar和standard.jar作为库添加到项目
单击【OK】按钮
案例演示标签库
在web目录里创建demo07.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<html>
<head>
<title>demo07 - 演示标签库</title>
</head>
<body>
<h1 style="color: red; text-align: center">
<c:out value="欢迎访问泸州职业技术学院~"/>
</h1>
<jsp:useBean id="now" class="java.util.Date" />
<h3 style="text-align: center">
<fmt:formatDate value="${now}" pattern="yyyy年MM月dd日 HH:mm:ss" />
</h3>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo07.jsp
四、JSTL中的Core标签库
<c:out>标签案例
案例1、演示default属性
在web目录里创建demo08.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo08 - 演示default属性</title>
</head>
<body>
<%--第1个out标签 --%>
userName属性的值:
<c:out value="${param.username}" default="用户名未知"/> <br />
<%--第2个out标签 --%>
userName属性的值:
<c:out value="${param.username}">
用户名未知
</c:out>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo08.jsp
案例2、演示escapeXML属性
<c:out>标签有一个重要的属性escapeXml,该属性可以将特殊的字符进行HTML编码转换后再输出。通过一个案例演示如何使用escapeXml属性将特殊字符进行转换。
在web目录里创建demo09.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo09 - 演示escapeXml属性</title>
</head>
<body>
<c:out value="${param.username}" escapeXml="false">
<meta http-equiv="refresh" content="0;url=http://www.lzy.edu.cn" />
</c:out>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo09.jsp
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo09.jsp
<c:remove>标签案例
在web目录里创建demo10.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo10 - 演示移除标签</title>
</head>
<body>
<%
pageContext.setAttribute("username", "无心剑");
session.setAttribute("username", "陈燕文");
%>
<c:remove var="username" scope="page"/>
用户名:<c:out value="${username}"/>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo10.jsp
<c:if>标签案例
在web目录里创建demo11.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo11 - 演示单分支标签</title>
</head>
<body>
<c:set value="1" var="visitCount" />
<c:if test="${visitCount==1}">
<h3 style="text-align: center">你第一次访问~欢迎访问泸职院~</h3>
</c:if>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo11.jsp
)三个标签案例
在web目录里创建demo12.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo12 - 演示多分支标签</title>
</head>
<body>
<c:choose>
<c:when test="${empty param.username}">
未知用户~
</c:when>
<c:when test="${param.username=='无心剑'}">
${param.username}是教师~
</c:when>
<c:otherwise>
${param.username}是学生~
</c:otherwise>
</c:choose>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo12.jsp
访问http://localhost:8080/ELJSTLDemo/demo12.jsp?username=无心剑
访问http://localhost:8080/ELJSTLDemo/demo12.jsp?username=陈燕文
<c:forEach>标签案例
在web目录里创建demo13.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<html>
<head>
<title>demo13 - 演示循环标签</title>
</head>
<body>
<%
String[] fruits = {"苹果", "橘子", "葡萄", "香蕉"};
%>
String数组中的元素:
<c:forEach var="name" items="<%=fruits%>">
${name}
</c:forEach>
<br />
<%
Map userMap = new HashMap();
userMap.put("01", "北京");
userMap.put("02", "上海");
userMap.put("03", "广州");
%>
HashMap集合中的元素:
<c:forEach var="entry" items="<%=userMap%>">
${entry.key} : ${entry.value}
</c:forEach>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo13.jsp
在web目录里创建demo14.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo14 - 演示循环标签</title>
</head>
<body>
colorsList集合(指定迭代范围和步长):
<%
List colorsList=new ArrayList();
colorsList.add("red");
colorsList.add("yellow");
colorsList.add("blue");
colorsList.add("green");
colorsList.add("black");
%>
<c:forEach var="color" items="<%=colorsList%>"
begin="1" end="3" step="2">
${color}
</c:forEach>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo14.jsp
URL相关标签案例
在web目录里创建demo15.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo15 - 演示URL相关标签</title>
</head>
<body>
使用绝对路径构造URL:
<c:url var="myURL" value="http://localhost:8080/ELJSTLDemo/demo08.jsp">
<c:param name="username" value="陈燕文" />
</c:url>
<a href="${myURL}">demo08.jsp</a><br />
使用相对路径构造URL:
<c:url var="myURL" value="demo08.jsp?username=无心剑" />
<a href="${myURL}">demo08.jsp</a>
</body>
</html>
启动服务器,访问http://localhost:8080/ELJSTLDemo/demo15.jsp
单击第一个超链接
返回上一个页面
返回上一个页面