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

  EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。
EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

JSTL的英文全称是JavaServer Pages Standard Tag Library,中文全称是JSP标准标识库。JSTL技术标准是由JCP(lava Community Process)组织的JSR052专家组发布,Apache组织将其列入Jakarta项目,Sun公司将JSTL的程序包加入互联网服务开发工具包内(Web Services Developer Pack(WSDP)),作为JSP技术应用的一个标准。

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>

x

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">

如有错误请指正,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

QGS-CD

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

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

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

打赏作者

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

抵扣说明:

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

余额充值