EL和JSTL

匿名 (未验证) 提交于 2019-12-02 23:43:01

EL表达式

是为了简化我们的jsp代码,具体一点就是为了简化在jsp里面写的那些java代码。

  • 语法结构

    ${expression }

  • 从指定的作用域取参数

    ${requestScope.表达式}

如果从作用域中取值,会先从小的作用域开始取,如果没有,就往下一个作用域取。 一直把四个作用域取完都没有, 就没有显示。

如何使用

  1. 取出4个作用域中存放的值。
<% pageContext.setAttribute("name", "page"); request.setAttribute("name", "request"); session.setAttribute("name", "session"); application.setAttribute("name", "application"); %>  按普通手段取值<br>  <%= pageContext.getAttribute("name")%> <%= request.getAttribute("name")%> <%= session.getAttribute("name")%> <%= application.getAttribute("name")%>  <br>使用EL表达式取出作用域中的值<br>  ${ pageScope.name } ${ requestScope.name } ${ sessionScope.name } ${ applicationScope.name } 
  1. 如果域中所存的是数组
<% String [] a = {"aa","bb","cc","dd"}; pageContext.setAttribute("array", a); %>       		 使用EL表达式取出作用域中数组的值<br>  ${array[0] } , ${array[1] },${array[2] },${array[3] } 
  1. 如果域中锁存的是集合
<% String [] a = {"aa","bb","cc","dd"}; pageContext.setAttribute("array", a); %> 使用EL表达式取出作用域中集合的值<br>  ${li[0] } , ${li[1] },${li[2] },${li[3] }  
  1. 取出Map集合的值
<% Map map = new HashMap(); map.put("name", "zhangsna"); map.put("age",18); map.put("address","北京..");  map.put("address.aa","深圳..");   pageContext.setAttribute("map", map); %> 使用EL表达式取出作用域中Map的值<br>  ${map.name } , ${map.age } , ${map.address }  , ${map["address.aa"] } 

EL表达式 的11个内置对象。

${ 对象名.成员 }

  • pageContext

作用域相关对象

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

头信息相关对象

  • header
  • headerValues

参数信息相关对象

  • param

  • paramValues

  • cookie

全局初始化参数

  • initParam

JSTL

全称 : JSP Standard Tag Library jsp标准标签库

简化jsp的代码编写。 替换 <%%> 写法。 一般与EL表达式配合

怎么使用

  1. 导入jar文件到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
  2. 在jsp页面上,使用taglib 指令,来引入标签库

比如引入JSTL核心标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
  1. 注意: 如果想支持 EL表达式,那么引入的标签库必须选择1.1以上的版本,1.0的版本不支持EL表达式。

JSTL标签分类

核心标签(最核心、最重用)

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
  • 表达式控制标签

    • out
    属性名 含义 是否必须
    value 输出值,如果是常量直接赋值, 如果是变量需要通过EL表达式取值
    default 当value为null时, 输出default属性配置的值
    escapeXml 是否转义XML特殊字符,取值true/false, 默认是true
    • set
    属性名 含义 是否必须
    value 搭配var属性使用,设置变量的值;搭配property和target使用,设置javabean属性的值
    var 定义的变量名称
    scope 变量保存到的作用域,默认是pageContext
    target 给javabean设置属性,指定那个javabean。需配合<jsp:useBean>标签和property、value属性使用
    property 设置javabean的哪个属性的值
    • remove
    属性名 含义 是否必须
    var 删除指定的变量,只能删除变量,不能删除javabean的属性
    • catch
    属性名 含义 是否必须
    var 存储错误信息
    <%-- <c:catch>用于包裹其他容易出错的标签,比如 --%> <c:catch var="error">   <!-- aa为没有实例化的javabean --> 	<c:set target="aa" property="name" value="zhangsan" /> </c:catch> <c:out value="${error}" /> 
  • 流程控制标签

    • if
    <c:if test="${income > 8000}">      <p>My income is: <c:out value="${income}"/><p>   </c:if>   
    • choose&when&otherwise
    <c:choose>       <c:when test="${income <= 1000}">          Income is not good.       </c:when>       <c:when test="${income > 10000}">           Income is very good.       </c:when>       <c:otherwise>          Income is undetermined...       </c:otherwise>   </c:choose>   
    • forEach
    <%  List<String> students = new ArrayList<>();  students.add("张三");  students.add("李四");  students.add("王五");  students.add("赵六");    request.setAttribute("stus", students); %>  <!-- forEach遍历全部元素 --> <c:forEach var="stu" items="${stus}"> 	<c:out value="${stu}" /> <br /> </c:forEach>  <!-- forEach遍历部分元素 --> <c:forEach var="stu" items="${stus}" begin="1" end="3"> 	<c:out value="${stu}" /> <br /> </c:forEach>  <!-- forEach遍历部分元素,指定步长 --> <c:forEach var="stu" items="${stus}" begin="1" step="2"> 	<c:out value="${stu}" /> <br /> </c:forEach>  <!-- 用法四:部分遍历并带状态 --> <c:forEach var="stu" items="${stus}" begin="1" end="3" varStatus="status"> <c:out value="${stu}――四个属性:"></c:out><br> <c:out value="index属性:${status.index}"></c:out><br> <c:out value="count属性:${status.count}"></c:out><br> <c:out value="first属性:${status.first}"></c:out><br> <c:out value="last属性:${status.last}"></c:out><br> <c:out value="----------"></c:out><br> </c:forEach>  <!-- varStatus变量的几个属性:index从0开始;count从1开始;first是否第一个(boolean);last是否最后一个(boolean)。  -->  
    • forTokens
    <c:forTokens items="zhangsan,lisi,wangwu" delims="," var="item"> 	<c:out value="${item}" /> <br /> </c:forTokens>  <!-- 另外forTokens也支持begin、end、step、varStatus几个属性,用法和forEach一样 --> 
  • URL操作标签

    • url
     <c:url value="http://localhost:8080/Test/index.jsp" var="newUrl" scope="session">  		<c:param name="username">zhangsan</c:param> 		<c:param name="password">a123456</c:param>  </c:url> 	<a href="${newUrl}">New URL</a> 
    • redirect
    	<c:redirect url="www.baidu.com"> 		<c:param name="username">zhangsan</c:param> 		<c:param name="password">a123456</c:param> 	</c:redirect> 
    • param

    一般作为其他标签的子标签使用,为其附加参数

格式化标签

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
  • 格式化时间
<% 	Date date = new Date(); 	pageContext.setAttribute("d", date); %> <fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/> 
  • 格式化数字
<% 	double d1 = 3.5; 	double d2 = 4.4;  	pageContext.setAttribute("d1", d1); 	pageContext.setAttribute("d2", d2); %> <fmt:formatNumber value="${d1 }" pattern="0.00"/><br/> <fmt:formatNumber value="${d2 }" pattern="#.##"/> 

SQL标签

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>   
  • setDataSource
<sql:setDataSource var="db" driver="com.mysql.jdbc.Driver"        url="jdbc:mysql://localhost/test"        user="root"  password="1234"/>   
  • query
<sql:query dataSource="${db}" var="rs">   SELECT * from Students;   </sql:query>   
  • update
<sql:update dataSource="${db}" var="count">   INSERT INTO Students VALUES (154,'Nasreen', 'jaha', 25);   </sql:update>   
  • param & dateParam
<% Date DoB = new Date("2000/10/16"); int studentId = 151; %> <sql:update dataSource="${db}" var="count">    UPDATE Student SET dob = ? WHERE Id = ?    <sql:dateParam value="<%=DoB%>" type="DATE" />    <sql:param value="<%=studentId%>" /> </sql:update>  
  • transaction
<sql:transaction dataSource="${db}">      <sql:update var="count">         UPDATE Student SET First_Name = 'Suraj' WHERE Id = 150      </sql:update>      <sql:update var="count">         UPDATE Student SET Last_Name= 'Saifi' WHERE Id = 153      </sql:update>      <sql:update var="count">        INSERT INTO Student         VALUES (154,'Supriya', 'Jaiswal', '1995/10/6');      </sql:update>   </sql:transaction>   

XML标签

用的不多,这里不在列举

ps: 更多详细内容,参见:[https://www.javatpoint.com/jstl](

文章来源: https://blog.csdn.net/weixin_43311054/article/details/92166420
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!