javaweb - EL - JSTL

EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法,让Jsp的代码更加简化。

以MVC模式设计程序,JSP只是视图,视图的任务就是显示响应,而不是在JSP中做任何关于程序控制和业务逻辑的事情。所以在JSP页面中应该尽可能少的、或者是完全不出现Java代码。

servlet(增加数据) —>jsp(显示数据)
传统的 在jsp中用java代码显示数据的弊端:类型转换。需要处理null,代码掺杂

EL操作符:
点操作符: --使用方便
中括号操作符 --功能强大:
可以包含特殊字符(, . - ),
可以使用变量${requestScope【name】}(不加引号),
可以访问数组–requestScop.hobbies【0】
获取map属性: ${requestScope. mymap. key} ${requestScope. map【“key”】}

示例:

     ${requestScope.user.id }<br/>
     ${requestScope.user.name }<br/>
     ${requestScope.user.age }<br/>
     ${requestScope.user.loc }<br/>
     ${requestScope["user"]["loc"] }
	 ${域对象。域对象中的属性.属性.属性.级联属性}

javaweb - EL - JSTL_第1张图片

关系运算符&逻辑运算符:
${empty requestScope[“hello”]} 判断一个值是否为null或不存在—>true

EL表达式中的隐式对象(内置对象)(如jsp:request。response)
    1.作用域访问对象(EL域对象):pageScope requestScope sessionScope applicationScope
    
        如果不指定域对象。则默认会根据从小到大的顺序 依次取值
        
    2.参数访问对象:获取表单数据(超链接中传的值)
    (request.getParameter(),request.getParameterValue())
                    ${param}                                ${paramValues}
                    
    3.jsp隐式对象:pageContext
           在jsp中可以通过pageConetxt 获取其他的jsp隐式对象;因此如果要在EL中使用jsp隐式对象
           就可以通过pageContext间接获取
                           
                pageContext.getRequest() ---->  ${pageContext.session}
                可以使用此方法 级联获取方法
                ${pageContext.request.serverPort}

JSTL

JSTL(Java server pages standarded tag library,即JSP标准标签库)是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。

JSTL标签是基于JSP页面的,这些标签可以插入在JSP代码中,本质上JSTL也是提前定义好的一组标签,这些标签封装了不同的功能,在页面上调用标签时,就等于调用了封装起来的功能。JSTL的目标是简化JSP页面的设计。对于页面设计人员来说,使用脚本语言操作动态数据是比较困难的,而采用标签和表达式语言则相对容易,JSTL的使用为页面设计人员和程序开发人员的分工协作提供了便利。

JSTL标识库的作用是减少JSP文件的Java代码,使Java代码与HTML代码分离,所以JSTL标识库符合MVC设计理念。MVC设计理念的优势是将动作控制、数据处理、结果显示三者分离。

JSTL: 比EL更加强大
使用需要引入两个jar包: jstl.jar standard.jar

引入taglib:<%@ taglib uri ="http://java.sun.com/jstl/core" prefix = "c" %>

其中prefix= ”c“:前缀

核心标签库: 通用标签库。 条件标签库。 迭代标签库

通用标签库:

赋值
在某个作用域(4个作用域)给某个变量赋值

<c:set var = "name" value="name" scope = "request"/
等价于request.setAttribute();

在某个作用域中(4个范围对象),给某个对象的属性赋值

<c:set target="${requestScope.ee}" property = "id" value = "65"/>

给map对象赋值

<c:set target="${requestScope.map}" property = "key" value = "value"/>

可以给不存在的变量赋值:但是不能给不存在的变量赋值

输出

${requestScope.name }
 <c:out value = "${requestScope.name}" default="default" escapeXml="true"/>

default属性:当属性不存在时输出默认值
escapexml = “true”: 将表达式作为文本输出

移除属性

<c:remove var="name" scope="request"/>

条件标签库

选择:

	  <c:if test="${10>1}" var= "result">为真执行的语句 ${result }</c:if>
     
      <c:choose>
          <c:when test=""></c:when>
          <c:when test=""></c:when>
          <c:when test=""></c:when>
          <c:when test=""></c:when>
          <c:otherwise></c:otherwise>
      </c:choose>

var:保留test中的结果值

test="${requestScope.reult}=='???'}"   √
test="${requestScope.reult}=='???' }"  ×

test表达式后不能加空格(加空格相当于true+“ “)会变成字符串而不是布尔值!

迭代标签库

循环

	  <c:forEach varStatus="status"  begin="0" end="5" step="1">
          ${status.index }
      </c:forEach>

遍历集合:

      <c:forEach var="item" items="${requestScope.names}">
          ${item }
      </c:forEach>

同样items表达式后不能接空格(地址加空格==字符串)!

你可能感兴趣的:(JavaWeb)