5分钟学会EL表达式和JSTL表达式

                                                 EL表达式和JSTL表达式

 

一、EL表达式

        一、概念

            EL表达式是Expression Language(表达式语言),

            它可以替代JSP页面中数据访问时的复杂编码可以自动转换类型,并且使JSP的开发变得更加简单。 

         二、语法 :${变量名}

            ----------a、EL的本质----------

            jsp脚本:<%=request.getAttribute(name)%>

            EL表达式替代上面的脚本:${requestScope.name}

            ----------b、取值和存值----------

            // 在Servlet或JSP中保存数据

            request.setAttribute("username", "猿医生");

            request.setAttribute("user",new User("猿医生"));

            // 在JSP中访问数据

            姓名: ${username}

            点操作符———> ${user.name}

            [ ]操作符———>${user["name"]}

             ----------c、EL最主要的作用是获得四大域中的数据----------

             pageContext域:${pageScope.key}

             request域:${requestScope.key}

             session域:${sessionScope.key}

             application域:${applicationScope.key}

             EL从四个域中获得某个值${key}; (重点)

            按照page → request → session → application的作用域顺序依次查找,找到即返回,最终找不到返回null。

         三、隐式对象

            EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,

            并读取这些对象的数据。

       语法:${隐式对象名称}获得对象的引用    

序号 隐含对象名称 描       述
1 pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)
2 pageScope 代表page域中用于保存属性的Map对象
3 requestScope 代表request域中用于保存属性的Map对象
4 sessionScope 代表session域中用于保存属性的Map对象
5 applicationScope 代表application域中用于保存属性的Map对象
6 param 表示一个保存了所有请求参数的Map对象
7 paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
8 header 表示一个保存了所有http请求头字段的Map对象,注意:如果头里面有“-” ,例Accept-Encoding,则要header[“Accept-Encoding”]
9 headerValues 表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
10 cookie 表示一个保存了所有cookie的Map对象
11 initParam

表示一个保存了所有web应用初始化参数的map对象

  

       ------  eg:

---------------1、pageContext对象:获取JSP页面中的pageContext对象------------------------

	     ${pageContext} 
---------------2、pageScope对象:从page域(pageScope)中查找数据---------------------------
             <% pageContext.setAttribute("name","猿医生");  %>

             ${pageScope.name}
---------------3、requestScope对象:从request域(requestScope)中获取数据------------------
             <% request.setAttribute("name","猿医生");  %>

             ${requestScope.name}
---------------4、sessionScope对象:从session域(sessionScope)中获取数据------------------

             <% session.setAttribute("name","猿医生");  %>

             ${sessionScope.name}
---------------5、applicationScope对象:从application域(applicationScope)中获取数据------

             <% application.setAttribute("name","猿医生");  %>
      
             ${applicationScope.name} 
---------------6、param对象:获得用于保存请求参数map,并从map中获取数据--------------------

             <!-- http://localhost:8080/yuan/index.jsp?name=猿医生 -->

             ${param.name}
---------------7、paramValues对象:paramValues获得请求参数-------------------------------

             <!-- http://localhost:8080/yuan/index.jsp?like=aaa&like=bbb -->

             ${paramValues.like[0]}

             ${paramValues.like[0]}
---------------8、header对象:header获得请求头-------------------------------------------

	     ${header.Accept}

             测试header时,如果头里面有“-” ,例Accept-Encoding时:${header["Accept-Encoding"]} 
---------------9、headerValues对象:headerValues获得请求头的值----------------------------

	     ${headerValues.Accept[0]}

 	     测试headerValues时,如果头里面有“-” ,例Accept-Encoding:headerValues["Accept-Encoding"] 
---------------10、cookie对象:cookie对象获取客户机提交的----------------------------------

 	      cookie${cookie.JSESSIONID.value}

 	      测试cookie时,例${cookie.key}取的是cookie对象,
	      如访问cookie的名称和值,须${cookie.key.name}或${cookie.key.value}
---------------11、initParam对象:initParam对象获取在web.xml文件中配置的初始化参数-----------
	      
	      <%-- 
	    	  <!-- web.xml文件中配置初始化参数 --> 
 
	    	  <context-param>  
	    		<param-name>yuan</param-name>  
	    		<param-value>yisheng</param-value>  
	    	  </context-param>  
	    	  <context-param>  
	    		<param-name>xxx</param-name>  
	    		<param-value>/yuan</param-value>  
	    	  </context-param>  
	      --%>  

	      <%--获取servletContext中用于保存初始化参数的map --%>  

	          ${initParam.yuan}  
	          ${initParam.xxx} 

        四、Empty操作符

             Empty操作符是一个前缀操作符,用于检测一个变量值是否为null或者为empty

             eg:变量name不存在,则${empty name}返回的结果为true,${not empty name}返回的结果是false.

        五、注意事项

            1.EL表达式是JSP2.0规范中的一门技术。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0

             技术的WEB服务器;

             2.有些Tomcat服务器如不能使用EL表达式:

                (1).升级tomcat版本,升级成tomcat6及以上

                (2).在JSP中加入<%@ page isELIgnored="false" %>

            2.要在javascript中使用El表达式,只需在在el表达式两端加上单引号或者双引号即可。

 

二、JSTL表达式

        一、概念

            JSTL是JSP标准标签库(JSP Standard Tag Library),提供一组标准标签,可用于编写各种动态功能。

            JSTL通常会与EL表达式合作实现JSP页面的编码。

        二、使用前提

            除了JSP动作标签外,使用其他第三方的标签库都需要:

                a.导包;

                   官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

                   <1>下载jakarta-taglibs-standard-1.1.2.zip解压,standard.jar和jstl.jar文件拷贝到/WEB-INF/lib/下。

                   <2>在 web.xml 文件中添加配置

                b.在使用标签的JSP页面中使用taglib指令导入标签库;

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

     prefix="c":指定标签库的前缀,这个前缀可以随便给值,但大家都会在使用core标签库时指定前缀为c;

uri="http://java.sun.com/jstl/core":指定标签库的uri,它不一定是真实存在的网址,但它可以让JSP找到标签库的描述文件;

        三、常用标签

            **核心标签**

            表达式控制标签:out标签、set标签、remove标签、catch标签。

            流程控制标签:if标签、choose标签、when标签、otherwise标签。

            循环标签:forEach标签、forTokens标签。

            URL操作标签:import标签、url标签、redirect标签。

标签 描述
<c:out> 用于在JSP中显示数据,就像<%= ... >
<c:set> 用于保存数据
<c:remove> 用于删除数据
<c:catch> 用来处理产生错误的异常状况,并且将错误信息储存起来
<c:if> 与我们在一般程序中用的if一样
<c:choose> 本身只当做<c:when>和<c:otherwise>的父标签
<c:when> <c:choose>的子标签,用来判断条件是否成立
<c:otherwise> <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行
<c:import> 检索一个绝对或相对 URL,然后将其内容暴露给页面
<c:forEach> 基础迭代标签,接受多种集合类型
<c:forTokens> 根据指定的分隔符来分隔内容并迭代输出
<c:param> 用来给包含或重定向的页面传递参数
<c:redirect> 重定向至一个新的URL.
<c:url> 使用可选的查询参数来创造一个URL

        四、语法

        五、格式化标签

JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
标签 描述
<fmt:formatNumber> 使用指定的格式或精度格式化数字
<fmt:parseNumber> 解析一个代表着数字,货币或百分比的字符串
<fmt:formatDate> 使用指定的风格或模式格式化日期和时间
<fmt:parseDate> 解析一个代表着日期或时间的字符串
<fmt:bundle> 绑定资源
<fmt:setLocale> 指定地区
<fmt:setBundle> 绑定资源
<fmt:timeZone> 指定时区
<fmt:setTimeZone> 指定时区
<fmt:message> 显示资源配置文件信息
<fmt:requestEncoding> 设置request的字符编码

        六、SQL标签

JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签。
引用SQL标签库的语法如下:

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
标签 描述
<sql:setDataSource> 指定数据源
<sql:query> 运行SQL查询语句
<sql:update> 运行SQL更新语句
<sql:param> 将SQL语句中的参数设为指定值
<sql:dateParam> 将SQL语句中的日期参数设为指定的java.util.Date 对象值
<sql:transaction> 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行

        七、XML 标签

JSTL XML标签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:

<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>

               在使用xml标签前,你必须将XML 和 XPath 的相关包拷贝至你的<Tomcat 安装目录>\lib下:

               <1>XercesImpl.jar

                  下载地址: http://www.apache.org/dist/xerces/j/

               <2>xalan.jar

                  下载地址: http://xml.apache.org/xalan-j/index.html

标签 描述
<x:out> 与<%= ... >,类似,不过只用于XPath表达式
<x:parse> 解析 XML 数据
<x:set> 设置XPath表达式
<x:if> 判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体
<x:forEach> 迭代XML文档中的节点
<x:choose> <x:when>和<x:otherwise>的父标签
<x:when> <x:choose>的子标签,用来进行条件判断
<x:otherwise> <x:choose>的子标签,当<x:when>判断为false时被执行
<x:transform> 将XSL转换应用在XML文档中
<x:param> 与<x:transform>共同使用,用于设置XSL样式表

       

        八、JSTL函数

JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
函数 描述
fn:contains() 测试输入的字符串是否包含指定的子串
fn:containsIgnoreCase() 测试输入的字符串是否包含指定的子串,大小写不敏感
fn:endsWith() 测试输入的字符串是否以指定的后缀结尾
fn:escapeXml() 跳过可以作为XML标记的字符
fn:indexOf() 返回指定字符串在输入字符串中出现的位置
fn:join() 将数组中的元素合成一个字符串然后输出
fn:length() 返回字符串长度
fn:replace() 将输入字符串中指定的位置替换为指定的字符串然后返回
fn:split() 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回
fn:startsWith() 测试输入字符串是否以指定的前缀开始
fn:substring() 返回字符串的子集
fn:substringAfter() 返回字符串在指定子串之后的子集
fn:substringBefore() 返回字符串在指定子串之前的子集
fn:toLowerCase() 将字符串中的字符转为小写
fn:toUpperCase() 将字符串中的字符转为大写
fn:trim() 移除首位的空白符

                       Now ~ ~ ~写到这里,就写完了,如果有幸帮助到你,请记得关注我,共同一起见证我们的成长

小结

谢谢观赏,我叫猿医生。

猿友推荐:正在奔跑的程序猿

猜你喜欢

转载自blog.csdn.net/qq_42175986/article/details/82622928