131 JSTL标准标签库

1.现有问题

  • EL主要是用于作用域获取数据,虽然可以做运算判断,但是得到的都是一个结果,做展示。

  • EL不存在流程控制。比如判断。

  • EL对于集合只能做单点访问,不能实现遍历操作。比如循环。

2.什么是JSTL?

  • JSTL :全称Java Server Pages Standard Tag Library

  • JSP标准标签库(JSTL)是一个JSP标签集合。

3.JSTL的作用

  • 可对EL获取到的数据进行逻辑操作。
  • 与EL合作完成数据的展示。

4.JSTL使用

  • (第一步)导入两个jar文件:standard.jar 和 jstl.jar 文件拷贝到/WEB-INF/lib/下

  • (第二步)在JSP页面引入标签库<% @taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c”>

6.5核心标签

6.5.1条件标签if判断
  • 语法: <c:if test ="条件> < /cif>
<!-- test属性中是条件, 但是条件需要使用EL表达式来书写-->
<h3>条件标签: if</h3>
<c:if test="${8>2}">
    8大于2是成立的
</c:if>
<c:if test="${8<2}">
    8小于2是成立的
</c:if>
6.5.2多条件choose判断
  • 语法:

  • < c:choose>

    <c:when test=“条件 1”>结果1 < /c:when>

    <c:when test=“条件2”>结果2< /c:when>

    <c:when test=“条件3”>结果3< /c:when>

    <c:otherwise >结果4< /c:otherwise>

    < /c:choose>

<h3>条件标签: choose(等价于java中多重if)</h3>
<%-- 测试成绩等级>90优秀 >80 良好  >70中等  >60及格--%>
<c:set var="score" value="80"></c:set>
<C :choose>
    <c:when test="${score>=90 }">优秀</c:when>
    <c:when test="${score>=80 }">良好</c:when>
    <c:when test="${score>=70 }">中等</c:when>
    <c:when test="${score>=60 }">及格</c:when>
    <c :otherwise>不及格</c:otherwise>
< /c :choose>

6.5.3迭代foreach标签
  • 语法

    <c:foreach

    var=“变量名”

    items=“集合”

    begin=“起始下标”

    end=“结束下标”

    step=“间隔长度”

    varstatus=”遍历状态” >

    < /c:foreach>

<h3>测试list集合遍历获取学生列表</h3>
<table border="1" width=" 80%" bordercolor="red" cellspacing="0" align= " center ">
	<tr>
        <th>学号</th>
        <th>姓名</th>
        <th>成绩</th>
        <th>班级</th>
        <th>是否是第一个</th>
        <th>是否是最后一个</th>
        <th>计数count</th>
        <th>索引index</th>
    </tr>
    <!-- varStatus :变量状态:遍历出的每一项内容的状态:
    first是否是第一行
    last是否是最后 一行
    count当前行数
    index当前元素的下标-->
    
    <!-- var :遍历出的每-项使用变量先存储
    items:集合(使用E1表达式)-->
    <c:forEach var="stu" items="${students}" varStatus="vs" >
        <tr>
            <td>${stu.1d}</td>
            <td>${stu.name }</td>
            <td>${stu.score}</td>
            <td>${stu.classes}</td>
            <td>${vs.first}</td>
            <td>${vs.last}</td>
            <td>${vs.count}</td>
            <td>${vs.index}</td>
        </tr>
    </c:forEach>
</table>

代码:

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.wlw.entity.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>JSTL标签库1</title>
</head>
<body>
    <%
        request.setAttribute("username","tom123");
        request.setAttribute("age",58);

        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        request.setAttribute("list",list);

        List<User> users = new ArrayList<>();
        users.add(new User("tom","123456"));
        users.add(new User("marry","123456"));
        users.add(new User("jack","123456"));
        users.add(new User("gavin","123456"));
        request.setAttribute("users",users);
    %>
    ${username}
    <c:if test="${username eq 'tom'}">
        <h1>欢迎您,${username}</h1>
    </c:if>
    <c:if test="${username ne 'tom'}">
        <h1>请您重新登录!</h1>
    </c:if>

    <hr/>
    <c:choose>
        <c:when test="${age < 18}" ><h1>少年</h1></c:when>
        <c:when test="${age>=18 && age<30}"><h1>青年</h1></c:when>
        <c:when test="${age >=30 && age<50}"><h1>中年</h1></c:when>
        <c:otherwise><h1>老年</h1></c:otherwise>
    </c:choose>

    <c:forEach var="s" items="${list}" begin="0" end="4" step="1" varStatus="i">
        <h1>${s}&nbsp;&nbsp;${i.first}&nbsp;&nbsp;${i.last}&nbsp;&nbsp;${i.count}&nbsp;&nbsp;${i.index}</h1>
    </c:forEach>
    <hr/>
    <%
        for(String s : list){
            out.println(s);
        }
    %>

    <hr/>
    <c:forEach var="user" items="${users}">
        <h1>${user.username}:${user.password}</h1>
    </c:forEach>
</body>
</html>

6.5.4 url 标签
  • 在Cookie禁用的情况下,通过重写URL拼接JSESSIONID来传递ID值。便于下一次访问时仍可查找到上一次的Session对象。
<c:url context='${pageContext.request.contextPath}' value='/xxxController' />
//在form表单的action中嵌套动态路径
<form action=" <c:url context='${pageContext.request.contextPath}' value='/xxxController' />">
    
</form>

  • 经验:所有涉及到页面跳转或者重定向跳转时,都应该使用URL重写。

代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>JSTL标签库2</title>
</head>
<body>
    <%
        String newURL = response.encodeRedirectURL(request.getContextPath()+"/jstl/jstl1.jsp");
    %>
    <%=newURL%>

    <a href="<%=response.encodeRedirectURL(request.getContextPath()+"/jstl/jstl1.jsp")%>">跳转</a>
    <br/>
    <c:url context="${pageContext.request.contextPath}" value="/jstl/jstl1.jsp"></c:url>
    <a href="<c:url context='${pageContext.request.contextPath}' value='/jstl/jstl1.jsp'></c:url>">跳转2</a>
</body>
</html>

6.6整合

将现有的EmpProject项目逬行整合,使用EL+JSTL替换脚本代码

<%@ page import="java.util.List" %>
<%@ page import="com.wlw.emp.entity.Emp" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>显示所有员工</title>
</head>
<body>
    <table border="1">
        <tr>
            <td>编号</td>
            <td>姓名</td>
            <td>工资</td>
            <td>年龄</td>
            <td colspan="2">操作</td>
        </tr>

    <%--
    <%
        List<Emp> emps = (List<Emp>)request.getAttribute("emps");
        for (Emp emp:emps){
    %>
        <tr>
            <td><%=emp.getId()%></td>
            <td><%=emp.getName()%></td>
            <td><%=emp.getSalary()%></td>
            <td><%=emp.getAge()%></td>
            <td><a href="<%= request.getContextPath()+"/manager/safe/removeEmpController?id="+emp.getId()%>">删除</a></td>
            <td><a href="<%= request.getContextPath()+"/manager/safe/showEmpController?id="+emp.getId()%>">修改</a></td>
        </tr>
    <%
        }
    %>
    --%>

        
        <c:forEach var="emp" items="${requestScope.emps}">
            <tr>
                <td>${emp.id}</td>
                <td>${emp.name}</td>
                <td>${emp.salary}</td>
                <td>${emp.age}</td>
                <td><a href=" <c:url context='${pageContext.request.contextPath}'
                    value='/manager/safe/removeEmpController?id=${emp.id}'></c:url>">删除</a></td>
                <td><a href=" <c:url context='${pageContext.request.contextPath}'
                    value='//manager/safe/showEmpController?id=${emp.id}'></c:url>">修改</a></td>
            </tr>
        </c:forEach>

    </table>
</body>
</html>

<%@ page import="com.wlw.emp.entity.Emp" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>修改员工信息页面</title>
</head>
<body>
<%--
    <%
        Emp emp = (Emp) request.getAttribute("emp");
    %>

    <!--<form action="/empproject/manager/safe/updateEmpController" method="post"> -->
    <form action="<%=request.getContextPath()+"/manager/safe/updateEmpController" %>" method="post">
        编号:<input type="text" name="id" value="<%=emp.getId()%>" readonly><br/>
        姓名:<input type="text" name="name" value="<%=emp.getName()%>"><br/>
        工资:<input type="text" name="salary" value="<%=emp.getSalary()%>"><br/>
        年龄:<input type="text" name="age" value="<%=emp.getAge()%>"><br/>
        <input type="submit" value="修改">
    </form>
--%>
    
    <form action="<c:url context='${pageContext.request.contextPath}' value='/manager/safe/updateEmpController'></c:url>
        " method="post">
        编号:<input type="text" name="id" value="${emp.id}" readonly><br/>
        姓名:<input type="text" name="name" value="${emp.name}"><br/>
        工资:<input type="text" name="salary" value="${emp.salary}"><br/>
        年龄:<input type="text" name="age" value="${emp.age}"><br/>
        <input type="submit" value="修改">
    </form>

</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悬浮海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值