JSTL 标签库介绍--core 核心库--综合代码示例

简介: JSTL 标签库介绍--core 核心库--综合代码示例

JSTL

JSTL 标签库介绍

  1. JSTL 标签库 是指 JSP Standard Tag Library JSP 标准标签库
  2. EL 表达式是为了替换 jsp 中的表达式脚本,JSTL 是为了替换代码脚本。这样 jsp 页面变得更佳简洁
  3. JSTL 由五个标签库组成

使用 JSTL,需要导入相关的 jar包

代码示例

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>jstl的快速入门</title>
</head>
<body>
<h1>jstl的快速入门</h1>
<%--、
    1. c:if ... 类似
    2. if(10>2){
       out.println("<h1>10 > 2 成立~</h1>")
    }
--%>
<c:if test="${10 < 2}">
    <h1>10 > 2 成立~</h1>
</c:if>
</body>
</html>

注意细节

● taglib 引入标签,要放在行首

● 导入 jstl jar 包后,要重新发布 web 工程,否则不识别 jstl

core 核心库

  1. 介绍:

set 标签可以往域中保存数据

  1. 等价 域对象.setAttribute(key,value);
  2. scope 属性设置保存到哪个域

page 表示 PageContext 域(默认值)

request 表示 Request 域

session 表示 Session 域

application 表示 ServletContext 域

  1. var 属性设置 key 是什么
  2. value 属性设置

应用实例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>c:set标签的使用</title>
</head>
<body>
<h1>c:set标签的使用</h1>
<%--<%--%>
<%--    //Java代码--%>
<%--    request.setAttribute("email", "hsp@sohu.com");--%>
<%--%>--%>
<%--
    <c:set /> set 标签可以往域中保存数据
    1. 等价 域对象.setAttribute(key,value);
    2. scope 属性设置保存到哪个域
            page 表示 PageContext 域(默认值)
            request 表示 Request 域
            session 表示 Session 域
            application 表示 ServletContext 域
    3. var 属性设置 key 是什么
    4. value 属性设置值
--%>
<c:set scope="request" var="name" value="xxxx"></c:set>
c:set-name的值${requestScope.name}
</body>
</html>
  1. 介绍:  2 }”>hello

  1. if 标签用来做 if 判断。
  2. test 属性表示判断的条件(用 EL 表达式输出)

应用实例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>c:if标签使用</title>
</head>
<body>
<c:set scope="request" var="num1" value="20"></c:set>
<c:set scope="request" var="num2" value="10"></c:set>
<c:if test="${num1 > num2}">
    <h1>${num1} > ${num2}</h1>
</c:if>
</body>
</html>

标签

介绍: 多路判断。跟 switch … case … default 非非常接近

应用实例

  1. 如果${requestScope.score} 那么就明确的指定从request域对象取出数据
  2. 如果${score}, 这是就按照从小到大的域范围去获取 pageContext->request->session->application
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>c:choose标签的使用</title>
</head>
<body>
<h1>c:choose标签的使用</h1>
<%
    request.setAttribute("score", 50);
    //request.setAttribute("k1", "request-k1的值");
    //session.setAttribute("k1", "session-k1的值");
    //application.setAttribute("k1", "application-k1的值");
    //pageContext.setAttribute("k1", "pageContext-k1的值~");
%>
<%--
1. 如果${requestScope.score} 那么就明确的指定从request域对象取出数据
2. 如果${score}, 这是就按照从小到大的域范围去获取 pageContext->request->session->application
--%>
k1=${k1}
<c:choose>
    <c:when test="${requestScope.score > 80}">
        <h1>${score}-成绩优秀</h1>
    </c:when>
    <c:when test="${requestScope.score >= 60}">
        <h1>${score}-成绩一般, 及格了</h1>
    </c:when>
    <c:otherwise>
        <h1>${score}-没有及格,下次努力~</h1>
    </c:otherwise>
</c:choose>
</body>
</html>

标签

介绍: c:forEach 标签 用来遍历输出, 主要有 4 种形式

● 普通遍历输出 i 到 j

● 遍历数组

● 遍历 Map

● 遍历 Lis

应用实例

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>c:forEach 标签</title>
</head>
<body>
<h1>c:forEach 标签</h1>
<hr/>
<h1>第1种遍历方式从i到j</h1>
<ul>
    <%--
    1.遍历 1 到 5,
    2. 输出 begin 属性设置开始的索引 end 属性设置结束的索引
    3. var 属性表示循环的变量(也是当前正在遍历到的数据)
    4. 等价 for (int i = 1; i <= 5; i++) {}
    5. 在默认情况下, i 每次会递增1
    --%>
    <c:forEach begin="1" end="5" var="i">
        <li>排名=${i}</li>
    </c:forEach>
</ul>
<hr/>
<h1>第2种遍历方式:遍历数组</h1>
<%
    request.setAttribute("sports", new String[]{"打篮球", "乒乓球"});
%>
<%--
    <c:forEach items="${ requestScope.sports }" var="item"/>
    1. items 遍历的集合/数组
    2. var 遍历到的数据
    3. 等价 for (Object item: arr) {}
--%>
<c:forEach items="${requestScope.sports}" var="sport">
    运动名称= ${sport}<br/>
</c:forEach>
<hr/>
<h1>第3种遍历方式:遍历Map</h1>
<%
    Map<String, Object> map = new HashMap<>();
    map.put("key1", "北京");
    map.put("key2", "上海");
    map.put("key3", "天津");
    request.setAttribute("cities", map);
%>
<%--
    1. items 遍历的map集合
    2. var 遍历到的数据
    3. entry.key 取出key
    4. entry.value 取出值
--%>
<c:forEach items="${requestScope.cities}" var="city">
    城市信息: ${city.key}--${city.value}<br/>
</c:forEach>
<hr/>
<h1>第4种遍历方式:遍历List</h1>
<%
    List<Monster> monsters = new ArrayList<>();
    monsters.add(new Monster(100, "小妖怪", "巡山的"));
    monsters.add(new Monster(200, "大妖怪", "做饭的"));
    monsters.add(new Monster(300, "老妖怪", "打扫位置的"));
    request.setAttribute("monsters", monsters);
%>
<%--
    items 表示遍历的集合
    var 表示遍历到的数据
    begin 表示遍历的开始索引值 ,从0开始计算
    end 表示结束的索引值
    step 属性表示遍历的步长值
    varStatus 属性表示当前遍历到的数据的状态,可以得到step,begin,end等属性值
--%>
<c:forEach items="${requestScope.monsters}" var="monster">
    妖怪的信息: ${monster.id}-${monster.name}-${monster.skill}<br/>
</c:forEach>
</body>
</html>

最后综合代码

list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>显示所有的妖怪</title>
</head>
<body>
<h1>显示所有的妖怪</h1>
<table border="1px" width="400px">
    <tr>
        <td>id</td>
        <td>name</td>
        <td>skill</td>
    </tr>
<%--    使用c:foreach循环显示即可 显示id > 200--%>
    <jsp:useBean id="monsters" scope="request" type="java.util.List"/>
    <c:forEach items="${monsters}" var="monster">
        <c:if test="${monster.id >= 200}">
            <tr>
                <td>${monster.id}</td>
                <td>${monster.name}</td>
                <td>${monster.skill}</td>
            </tr>
        </c:if>
    </c:forEach>
</table>
</body>
</html>

QueryServlet.java

public class QueryServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1. 准备要显示的数据--> 从DB
        ArrayList<Monster> list = new ArrayList<>();
        list.add(new Monster(100, "牛魔王", "芭蕉扇"));
        list.add(new Monster(200, "狐狸精", "美人计"));
        list.add(new Monster(300, "白骨精", "吃人骨头"));
        //2. 把list放入到request域, 供jsp页面使用
        request.setAttribute("monsters", list);
        //3. 请求转发 list.jsp
        request.getRequestDispatcher("/hm/list.jsp")
                .forward(request,response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

query.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>查询妖怪</title>
</head>
<body>
<h1>查询妖怪</h1>
<a href="<%=request.getContextPath()%>/queryServlet">点击查询所有的妖怪</a>
</body>
</html>


目录
相关文章
|
JavaScript Java 关系型数据库
springboot+vue简历系统(源码+文档)
本文介绍了基于SpringBoot的简历系统,由Java开发者风歌分享。系统采用Java语言,SpringBoot框架,JDK1.8,MySQL 5.7+,前端使用nodejs和vue。系统包括管理员管理界面、用户功能界面和前台首页界面,支持管理员登录、用户管理、模板类型管理、招聘会管理、报名招聘管理等功能。此外,还展示了各模块的详细操作界面,如用户信息编辑、招聘会详情等。项目源码可联系作者风歌获取。
|
小程序 前端开发 语音技术
开源!!!垃圾分类识别小程序--------附源码!!!
开源!!!垃圾分类识别小程序--------附源码!!!
400 0
Rust 中使用 :: 这种语法的几种情况
Rust 中使用 :: 这种语法的几种情况
|
敏捷开发 监控 Java
深入理解自动化测试:框架选择与实践策略
【4月更文挑战第24天】 在软件开发的复杂多变的环境中,自动化测试已经成为确保产品质量和加速迭代的关键工具。本文将探讨自动化测试框架的选择要素,并结合具体案例分析如何根据项目需求定制有效的自动化测试策略。我们将讨论几个流行的自动化测试框架,如Selenium、Appium和JUnit,并比较它们在不同测试场景下的适用性。通过本文,读者将获得构建和维护自动化测试框架时的实用见解,以及如何优化测试流程以提升效率和准确性。
|
数据挖掘 人机交互 Windows
数据分析——SPSS基本操作初识
简介 统计软件的作用: 统计分析软件是数据分析的主要工具 统计设计完成之后,完整的数据分析过程包括: - 数据的收集 - 数据的整理 - 数据的分析 - 结果的报告 统计学为数据分析过程提供一套完整的科学的方法论,统计软件为数据分析提供了实...
2626 0
|
存储 安全 网络安全
利用隐私法规的漏洞窃取用户身份
欧盟的通用数据保护条例 (GDPR) 已成为现代隐私法律的试金石,部分原因是它赋予消费者前所未有的对其个人信息使用的控制权。然而,同样的权力可能容易被恶意攻击者滥用。在本文中考虑了社会工程师如何滥用围绕“访问权”(Right of Access)过程的法律歧义。这一假设通过对 150 多家企业的对抗性案例研究进行了验证。发现许多组织未能采取足够的保护措施来防止滥用访问权,从而有可能将敏感信息暴露给未经授权的第三方。这些信息的敏感性各不相同,从简单的公共记录到社会安全号码和帐户密码。这些发现表明,迫切需要改进主体访问请求流程的实施。为此本文提出可能的补救措施,以供政府、行业和个人进一步考虑。
177 2
|
安全 前端开发 Java
java.lang.NullPointerException出现的几种原因及解决方案
java.lang.NullPointerException出现的几种原因及解决方案
11496 1
|
弹性计算 异构计算 AI芯片
阿里云GPU服务器配置选择及租用价格表
阿里云GPU服务器配置选择及租用价格表,阿里云GPU服务器租用价格表包括包年包月价格、一个小时收费以及学生GPU服务器租用费用,阿里云GPU计算卡包括NVIDIA V100计算卡、T4计算卡、A10计算卡和A100计算卡,GPU云服务器gn6i可享受3折优惠,阿里云百科分享阿里云GPU服务器租用价格表、GPU一个小时多少钱以及学生GPU服务器收费价格表
510 0
|
Java
IDEA运行jsp文件变成源码详细解决方案
IDEA运行jsp文件变成源码详细解决方案
740 0
IDEA运行jsp文件变成源码详细解决方案
|
数据采集 搜索推荐 前端开发
VuePress 博客优化之开启 Algolia 全文搜索
由于 VuePress 的内置搜索只会为页面的标题、h2 、 h3 以及 tags 构建搜索索引。 如果你需要全文搜索,可则以使用 Algolia 搜索,本篇讲讲如何申请以及配置 Algolia 搜索。
963 0
VuePress 博客优化之开启 Algolia 全文搜索

热门文章

最新文章