浅谈EL表达式和JSTL常用标签

举报
QGS 发表于 2023/03/20 22:42:04 2023/03/20
【摘要】 浅谈EL表达式和JSTL常用标签

EL表达式

Expression Language 表达式语言
EL表达式可以替代JSP中的java代码,让JSP文件中的程序看起来更加整洁美观。
EL表达式属于JSP

EL表达式出现在JSP中
从某个作用域中取数据,然后将其转换为字符串,然后将其输出到浏览器。
从某个域中取数据
将取来的数据转出字符串
将字符串输出到浏览器

jsp表达式-->EL表达式

EL表达式获取数据

从某个作用域中取数据,然后将其转换为字符串,然后将其输出到浏览器。

<%
  request.setAttribute("username","张三");
%>
<%=request.getAttribute("username")%>

EL表达式
${username}

EL表达式的使用(EL表达式只负责取数据,不负责存数据)

${表达式}
EL表达式会从某个范围中取数据,将其转为字符串,输出至浏览器。如果是object,自动调用toString。
${Object}


输出对象的属性(自动调用get方法)
// Object.username需要提供get方法。
${Object.username} 

//添加双引号当做String输出到浏览器
${“Object.username”}
//${Object}与${“Object”}的区别
${Object}表示从某个域中取出数据并输出到浏览器中
${“Object”}表示将String字符串“Object”输出到浏览器中。
<%
  //session.setAttribute("value","session");
  //request.setAttribute("value","request");
  //pageContext.setAttribute("value","pageContext");
  application.setAttribute("value","application");

%>

  ${value}
<br>
<%--在没有指定范围中:EL表达式有限从小范围开始写--%>
pageContext < request < session < application
<%
  Staff staff =new Staff();
  staff.setName("小红");

  request.setAttribute("value",staff);

  Map<String,Staff> staffMap =new HashMap<>();
  staffMap.put("staff",staff);
  request.setAttribute("value2",staffMap);

//  定义数组
  int[] a={1,2,3,4,5};
  request.setAttribute("array",a);
//定义list集合
  List<String> list =new ArrayList<>();
  list.add("张三");
  list.add("李四");
  request.setAttribute("list2",list);
%>
<%--取对象staff的属性值name  EL的三种方式--%>
${value}
${value.name}
${value["name"]}
<%--将map集合中的staff对象的username取出--%>
<br>
map:
${value2.staff.name}

<br>
数组:<br>
<%--EL表达式取数组中的值--%>
输出数组对象:${array}<br>
根据下标输出:${array[0]}<br>
数组越界:${array[999]} 不显示,也不报错<br>
<%--取出list的值 --%>
list<br>
${list2.get(0)}
${list2.get(1)}
<br>
${list2[0]}
${list2[1]}<br>


<%--isELIgnored="true" true为设置忽略EL表达式--%>
<%@page contentType="text/html; charset=UTF-8" isELIgnored="true"%>
<%--EL表达式获取应用的根路径--%>
${pageContext.request.contextPath}

EL获取数据


<%--<%=request.getParameter("id")%>== ${param.id} --%>
hello <br>
  id:<%=request.getParameter("id")%>
<br>
  id:${param.id}

<%--param获取的是一维数组[0]、paramValues[下标]获取任意下标的值--%>
hello <br>

  id:<%=request.getParameter("id")%>

<br>

  id:${param.id}<br>

  password:${param.password}<br>

paramValues:${paramValues.id[3]}

<%--param获取的是一维数组[0]、paramValues[下标]获取任意下标的值--%>



ServletContext是Servlet上下文对象,对应的JSP九大内置对象是application
Servlet上下文初始化参数
    上下文初始化参数被封装到:ServletContext对象当中
    <context-param>
        <param-name>hello</param-name>
        <param-value>123456</param-value>
    </context-param>

EL表达式运算符

算术运算符: + - * / %
关系运算符: == !=  >  <  >=  <=  eq(equals())
逻辑运算符:! && || not and or   ( ! 和 not两个都是取反)
条件运算符(类似三目运算符): ? :
取值运算符: = .
Empty运算符:


<%--EL表达式中的+号,不能字符串拼接--%>
${99+"aaa"}<%--这样会500报错--%>
${"a" == "a"}<%--返回值:true--%>
${对象 == 对象}<%--Object地址相同则返回值:true--%>

JSTL

Java Standard Tag Lib(Java标准的标签库)
JSTL标签库通常结合EL表达式一起使用。为了让在JSP中的java代码消息。


或Maven引入JSTL标签库

<!--        引入JSTL标签库-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <!-- groupId不是javax.servlet.jsp.jstl-->
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
!使用标签,但背后是java程序
核心标签库指向是的一个c.tld文件。而c.tld文件实际上是一个xml配置文件。
Jstl.sjp页面


%--引入核心标签库--%>
<%@ taglib  prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--格式化标签库--%>
<%@ taglib  prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--sql标签库--%>
<%@ taglib  prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

常用标签

<%

    List<String> list =new ArrayList<>();
    list.add("张三");
    list.add("李四");
    list.add("hhh");
    request.setAttribute("list",list);
%>
<%--forEach标签
遍历list
items=""指定集合
var="" 代表集合中的每一个元素
begin="1"开始下标
End="10"结束下标
step="1"步长
varStatus表示var的状态对象(java对象)可用于序号从1开始递增

--%>
<c:forEach items="${list}" var="s" varStatus="listStatus">
    记号:${listStatus.count} value:${s}<br>
</c:forEach>

if标签

<%--if标签
test="" boolean布尔类型
var不是必须的
scope指定var的存储范围
将var的a存储到request域中
--%>
<c:if test="${empty list}" var="a" scope="request">
    <h3>list集合为null</h3>
</c:if>
<%--a变量中存储的是test属性的值--%>
${a}

<%--
类似
if(){

}else if(){

}else{

}
--%>
<c:choose>
    <c:when test="${param.age < 18}">
            未成年
    </c:when>

    <c:when test="${param.age >= 18}">
            成年人
    </c:when>
    <c:otherwise>
        不存在
    </c:otherwise>
</c:choose>

forEach标签案例

Servlet将集合放入request域
StaffDao mapper = sqlSessionAuto.getMapper(StaffDao.class);

List<Staff> staffs = mapper.selectALL();
//将查询结果放入请求域中
request.setAttribute("staffs",staffs);

Jsp页面

Foreach标签使用案例
<%--引入核心标签库--%>
<%@ taglib  prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<c:forEach items="${staffs}" var="s">
  <tr>
  <td>${s.id}</td>
  <td>${s.name}</td>
  <td>${s.diploma}</td>
  <td>${s.title}</td>
  <td>${s.marriage}</td>
  <td>${s.status}</td>
  <td>${s.workTime}</td>
  <td>
    <a href="javascript:void(0)" onclick="delect(${s.id})">删除</a>
    <a href="${pageContext.request.contextPath}/os/modify?id=${s.id}">修改</a>
    <a href="${pageContext.request.contextPath}/os/Payslips?id=${s.id}">工资条</a>
  </td>
  </tr>
</c:forEach>
</table>

在HTML页面中有<base>标签,用来设置基础路径
<base>标签出现在<head>中
设置基础路径<base href="http://locahost:8080/personnerlOS/">:表示但凡在html中的路径没事以”/”开始都会自动加上。
<base>标签是html的语法,    注意:<base>标签对JS代码不起作用
<a href="test/hello"> == <a href=" http://locahost:8080/personnerlOS/test/hello">
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。