JSP、EL表达式和JSTL标签库

JSP、EL表达式和JSTL标签库

1. JSP

1.1 什么是JSP

​ JSP——Java Server Page运行在服务器端的Java页面。JSP=HTML+Servlet。浏览器第一次访问JSP的时候,由Tomcat将JSP翻译成了Servlet,并且编译成字节码文件,只生成1次。如果这期间修改了JSP内容,就会重新生成。

1.2 JSP的三种注释
三种注释说明
HTML<!-- 注释 --> 只能注释静态内容,不能注释Java代码。通过浏览查看源代码可以看到的
Java与以前是一样的,在网页中看不到,但在翻译以后Servlet中可以看到。
// 单行注释 /* 多行注释 / /* 文档注释 */
JSP<%-- 动态内容 --%> 可以注释JSP上任何元素网页中没有,在生成的Java源代码中也没有
1.3 JSP脚本元素
组成部分功能语法
JSP代码片段在JSP中执行Java代码<% Java代码; %>
JSP脚本表达式在JSP中输出变量值<%= 变量%>
JSP声明声明全局变量或方法<%! 声明 %>

2. EL表达式

和JSP表达式的区别
区别JSP脚本表达式EL
语法<%=m%>${m}
输出哪里的值输出的是脚本变量<% int m= 5; %>输出的是作用域中的值
<% request.setAttribute(“m”,5); %>
2.1 作用
  1. 用于输出作用域中的变量值

  2. 用于进行各种运算:算术,逻辑,关系,三元运算等

2.2 获取作用域的值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    //向页面域中添加一个字符串
    //pageContext.setAttribute("name", "页面域");
    //请求域
    request.setAttribute("name", "请求域");
    //会话域
    session.setAttribute("name", "会话域");
    //上下文域
    application.setAttribute("name", "上下文域");
%>
JSP写法:
<%=pageContext.getAttribute("name")%>
&nbsp;
EL的写法:
${pageScope.name}
<hr>

JSP写法:
<%=request.getAttribute("name")%>
&nbsp;
EL的写法:
${requestScope.name}
<hr>

JSP写法:
<%=session.getAttribute("name")%>
&nbsp;
EL的写法:
${sessionScope.name}
<hr>

JSP写法:
<%=application.getAttribute("name")%>
&nbsp;
EL的写法:
${applicationScope.name}
<hr>

JSP写法:
<%=pageContext.findAttribute("name")%>
&nbsp;
EL的写法:
${name}
<hr>
</body>
</html>
2.3 EL可以使用的运算表达式
  1. 算术表达式: +,-,*,/,%
  2. 比较表达式: ==,!=,<,>,>=,<=
  3. 逻辑表达式:&&, ||, !
  4. 三元运算:$(逻辑判断?真值:假值)
  5. 判空表达式:${empty 变量名}
    • 如果变量名为空,返回true
    • 如果变量名为空串,返回true
    • 如果变量名是一个没有元素的集合,返回true
示例
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>算术运算符</h2>
${1+1}<br>
${2-1}<br>
${1*1}<br>
${5 div 2}<br>
${5 /2 }<br>
${5 mod 2}<br>
${5%2}<br>

<h2>比较运算符</h2>
${1 eq 1}<br>
${1 != 1}<br>
${1 lt 2}<br>
${1 <= 1}<br>
${1 > 2}<br>
${1 >=1}<br>

<h2>关系运算符</h2>
${true and false}<br>
${true || false }<br>
${not true}<br>

<h2>三元运算</h2>
${5>6?"男":"女"}

<h2>判空表达式</h2>
${empty aaa} <br>
<%
    pageContext.setAttribute("bbb","");
    //集合中没有元素
    List<String> names = new ArrayList<>();
    names.add("白骨精");
    pageContext.setAttribute("ccc", names);
%>
${empty bbb}<br>

${empty ccc}<br>
</body>
</html>

3. JSTL标签库

Java Standard Tag Library Java标准标签库

使用步骤
  1. 导包jar,每个标签底层其实都是用Java代码实现的。复制到web/WEB-INF/lib

在这里插入图片描述

  1. 创建JSP页面,引入标签库
<%--prefix表示前缀,固定为c,uri 标识 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

解释

JSTL前缀URI固定写法,标识的作用作用
核心标签库chttp://java.sun.com/jsp/jstl/core用于页面上的逻辑控制,如:if、forEach
  1. 使用
    • 使用<c:if>标签
    • 使用<c:when>标签
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--prefix表示前缀,固定为c,uri 标识 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>标签</title>
</head>
<body>
<%--test后面使用EL表达式,判断是否为真,没有c:else标签--%>
<c:if test="${2>3}">
    我是女生
</c:if>
<c:if test="${2<3}">
    我是男生
</c:if>

    
    <%--html内容 --%>
<form action="07-choose.jsp">
    请输入分数:
    <input type="text" name="score">
    <input type="submit" value="评级">
</form>

    <%--判断输入的参数是否为空 --%>
<c:if test="${not empty param.score}">
    <%--使用c:choose标签,类似switch --%>
    <c:choose>
        <c:when test="${param.score >=80 && param.score<=100}">
            <h2 style="color: red">优秀</h2>
        </c:when>
        <c:when test="${param.score >=60 && param.score<80}">
            <h2 style="color: green">良好</h2>
        </c:when>
        <c:when test="${param.score >=0 && param.score<60}">
            <h2 style="color: dodgerblue">不及格</h2>
        </c:when>
        <c:otherwise>
            <h2 style="color: orange">分数不正确</h2>
        </c:otherwise>
    </c:choose>
</c:if>

</body>
</html>

使用<c:foreach>标签

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table border="1">
    <caption>学生信息表</caption>
    <tr>
        <th>状态</th>
        <th>学号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>成绩</th>
    </tr>
    <%--
    items: 表示要遍历的集合,要使用EL
    var: 变量名,表示集合中的每个元素对象
    varStatus: 表示一个对象名字,当前的行对象。
    有四个属性:
        first: 第1个元素返回true
        last: 最后1个元素返回true
        count: 遍历到当前元素时,一共遍历了几个元素
        index: 当前元素的索引号,从0开始
    --%>
    
    <c:forEach items="${students}" var="stu" varStatus="row">
    <tr>
        <td>${row.index}</td>
        <td>${stu.id}</td>
        <td>${stu.name}</td>
        <td>${stu.gender?"男":"女"}</td>
        <td>${stu.score}</td>
    </tr>
    </c:forEach>
</table>
</body>
</html>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值