动态网站开发学习笔记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="提交" />&nbsp;&nbsp;
            <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} &nbsp;&nbsp;
        </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} &nbsp;&nbsp;
        </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}&nbsp;
        </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请添加图片描述
请添加图片描述
单击第一个超链接请添加图片描述
返回上一个页面请添加图片描述
返回上一个页面请添加图片描述