EL和JSTL

本文介绍了EL(Expression Language)表达式语言的特点和用法,包括如何在页面中输出保存在作用域中的对象、获取请求参数以及获取项目上下文路径。同时,文章也提及了JSTL(Java Server Page Standardized Tag Library)的使用,包括导入依赖、添加标签库指令以及如何进行条件判断和遍历集合操作,以提升JSP页面的可读性。
摘要由CSDN通过智能技术生成

EL

Expression Language 表达式语言

是为了使JSP写起来更加简便,替换JSP中的<%=%>,简化了JSP页面中输出数据的操作、

主要输出保存在某个作用域中的数据。

特点

如果通过"某个作用域对象.setAttribute(“cus”,customer)"方法保存的对象,

在JSP页面中,如果用表达式,使用<%=%>输出,用EL使用**${cus}**输出。

会依次从pageContext–>request–>session–>application中获取指定对象。

如果一旦从某个作用域中获取到了指定对象,就不再判断后续作用域。

也可以输出指定作用域中的对象。

  • 只能输出保存在作用域中的对象

  • 减少代码(省去了获取对象、转换的过程)

  • 免去非空判断

    • 如果要输出的对象不存在,不会输出null,而是输出空字符串""。

用法

在页面中输出保存在作用域中的对象

  • 从作用域中依次查询并输出对象

    ${对象名}
    
  • 从指定作用域中输出对象

    作用域对应作用域代码
    pageScope当前页pageContext${pageScope.对象}
    requestScope请求request${request.对象}
    sessionScope会话session${session.对象}
    applicationScope项目application${application.对象}
  • 输出对象的属性

    ${对象名.属性名}
    ${对象名[属性名]}
    
  • 输出对象的方法的返回值

    ${对象名.方法名()}
    

如在servlet中

Person p = new Person("admin","男",20);
request.setAttribute("p",p)

跳转到某个页面中

<html>
    
<body>
 
<%-- 如果不用EL,先获取对象,向下转型 --%>
<%Person p = (Person)request.getAttribute("p");%>
//如果p为空,会报错;如果name没赋值,会输出null
<h3>
      <%=p.getName()%>
    </h3>
  

<%--如果使用EL,无需获取对象,无需转型,直接通过保存的对象名.属性名即可--%>
<h3>
    ${p.name}
    ${p["name"]}
    </h3>

<%--使用EL输出对象的属性时,该对象必须要有getXXX()方法--%>
<%--如果没有在任何作用域中获取到对象p,或对象p没有name属性,不会保存,输出空字符串--%>
   
</body>
</html>

在页面中获取请求中的参数

EL可以使用${param.参数名}替换request.getParameter(“参数”)

如有表单

<html>
    <body>
        <form action="page.jsp">
            <input type="text" name = "username">
            <input type="submit">
        </form>
    </body>
</html>

在page.jsp中获取

<%-- 如果不用EL--%>
<%String username = request.getParameter("uername");%>
<h3>
      <%=username%>
    </h3>
<%-- 如果使用EL --%>
<h3>
    ${param.username}
</h3>

用于获取当前项目上下文(根目录+项目名)路径

如http://localhost:8080/Library就是一个项目上下文路径

在JSP中使用**${pageContext.request.contextPath}**获取上下文路径

<form action="${pageContext.request.contextPath}/servlet">
    
</form>

<a href="${pageContext.request.contextPath}/页面路径"></a>

注意

  • web.xml版本在4.0之后,JSP中使用EL时,默认可以识别

  • 如果JSP无法识别EL,在指令<%@ %>中加入 isELIgnore="false"表示不忽略EL

    <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnore="false"%>
    
    
  • 如果在使用EL过程中,出现PropertyNotFoundException错误,表示未发现指定属性,原因如下

    • 缺少指定属性
    • 指定属性没有对应的get方法

JSTL

Java Server Page Standarded Tag Library JSP标准标签库

可以使用JSTL中的特定标签,来替换JSP中常见的Java代码。如循环判断等,减少Java代码,提高页面的可读性。

1、导入JSTL对应的依赖

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>

2、在JSP页面中,添加标签库指令

<%--在当前页面中使用jstl,加入以下指令--%>
<%@ taglib prefix="" uri="http://java.sun.com/jsp/jstl/core" %>

这句话可以不写,在使用循环遍历时会自动生成

3、具体用法

  • 定义变量

    <c:set var="变量名" value="值"></c:set>
    

    如:

    <c:set var="number" value="123123"></c:set>
    
  • if判断

    <c:if test="判断条件">
        满足时的内容
    </c:if>
    

    如在servlet中

    request.setAttribute("person",new Person("ez","男"));
    

    在jsp中

    <c:if test="${person.sex=='男'}">
        <input type="radio" name="sex" checked>男
        <input type="radio" name="sex">女
    </c:if>
    
  • 遍历List集合

    <c:forEach item="要遍历的集合" var="遍历出的对象名"></c:forEach>
    

    如servlet中保存了集合

    List<BookInfo> list = dap.queryAll();
    request.setAttribute("list",list);
    

    在jsp页面中

    <%--判断集合为空--%>
    <c:if test="${empty list}">
    	无数据
    </c:if>
    
    <c:forEach item="${list}" var="bi">
        <tr>
            <td>${bi.bookName}</td>
            <td>${bi.bookAuthor}</td>
        </tr>
    </c:forEach>
    
  • 遍历Map集合

    <c:forEach items="要遍历的集合名" var="遍历出的键值对的名称">
    	${键值对名.key.属性}
      ${键值对名.value.属性}
    </c:forEach>
    

    <%
    	HashMap<String,String> hm=new HashMap();
    	hm.put("yyds","永远单身");
    	hm.put("xswl","吓死我了");
    	hm.put("pyq","朋友圈");
    	session.setAttribute("hm",hm);
    %>
    <c:forEach items="${hm}" var="kv">
    	<!--遍历键-->
    	<h3>${kv.key}</h3>
    	<!--遍历值-->
    	<h3>${kv.value}</h3>
    </c:forEach>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值