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

简介: EL表达式,全称是Expression Language。意为表达式语言。它是Servlet规范中的一部分,是JSP2.0规范加入的内容。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。

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}


17.png16.png



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}


15.png16.png



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


14.png


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代码消息。

13.png


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


12.png11.png10.png






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>


9.png


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


如有错误请指正,谢谢

目录
相关文章
|
6月前
EL表达式和Jstl常见的用法
EL表达式和Jstl常见的用法
|
XML SQL Java
EL表达式和JSTL
EL表达式和JSTL
105 0
|
6月前
|
存储 XML SQL
jsp、EL表达式、Jstl使用
jsp、EL表达式、Jstl使用
|
6月前
|
Java 数据库
el表达式与jstl的用法
el表达式与jstl的用法
|
6月前
|
机器学习/深度学习 算法 前端开发
深入浅出剖析EL表达式和JSTL
深入浅出剖析EL表达式和JSTL
47 0
深入浅出剖析EL表达式和JSTL
|
XML SQL Java
JavaWeb--EL表达式&JSTL 标签库
JavaWeb--EL表达式&JSTL 标签库
70 0
|
Java 数据安全/隐私保护
|
前端开发 Java
JSP简介&&EL表达式&& JSTL
JSP简介&&EL表达式&& JSTL
JSP简介&&EL表达式&& JSTL
|
Java
JSP学习——EL表达式和JSTL学习小结
JSP学习——EL表达式和JSTL学习小结
108 0
|
存储 Java
【JavaWeb】之JSTL & EL表达式(下)
【JavaWeb】之JSTL & EL表达式(下)
109 0
【JavaWeb】之JSTL & EL表达式(下)