当前位置: 代码迷 >> 综合 >> java_web 快速入门之第十四章 域对象EL表达式JSTL库
  详细解决方案

java_web 快速入门之第十四章 域对象EL表达式JSTL库

热度:5   发布时间:2023-12-05 09:24:09.0

一:域对象

四大作用域对象:

      pageContext request session application

作用:
        用于保存数据,获取数据,在不同资源之间共享数据。

方法:
        setAttribute(name,object) ; 保存数据方法
        getAttribute(name) 获取数据
        romveAttribute(name) 清除数据


作用范围:

 pageContext域  处于同一个jsp页面中数据共享是有效的,其他页面无效(范围最小)
 request域 处于同一个请求中数据共享是有效的,其他无效(转发有效)
 session域 处于同一个会话(打开浏览器和关闭浏览器的过程)中数据共享是有效的
 application域 处于同一个web应用中数据共享是有效的

二:EL表达式

   1. EL(expression language) 是 JSP 表达式语言,全称是 ExpressionLanguage,使用 EL 的目的是简化在 JSP 中访问变量的方式,简单静态 HTML 与 Java 代码的耦合,提供了在jsp中简化表达式的方法,让jsp的代码更加简化

   基本语法格式:

?
${ EL Expression}?

        2. EL表达式主要是输出域对象中的数据,当四个域对象都有同一个key的值时,EL表达式会按照四个域对象的范围从小到大进行搜索,找到就输出,与四个域对象声明的先后顺序无关

?
?
<!-- 通过域对象保存同一个键  不同的值 --><%//存储值pageContext.setAttribute("李白", "西施");request.setAttribute("李白", "王昭君");session.setAttribute("李白", "貂蝉");application.setAttribute("李白", "杨玉环");%><hr/><!-- 获取 --><!-- 通过jsp表达式的方式进行输出作用域保存的值 --><%=pageContext.getAttribute("李白") %><br/><%=request.getAttribute("李白") %><br/><%=session.getAttribute("李白") %><br/><%=application.getAttribute("李白") %><h3>通过EL表达式获取同一个键不同的值</h3>${李白 }??

 3. EL表达式中的四个隐式域对象 :

       pageScope  requestScope sessionScope applicationScope

4. EL表达式中可以获取的值:

       ${ "Helloworld" }   // 输出字符串常量${  str  }   		// 输出字符串变量 str 的值${ 3 + 2 }   		// 输出 3+2 的结果${ user.name}  		// 输出 user 对象的 name 属性${user["name"] }    // 同上${  sessionScope ["user"].name }  // 同上${user.name}		//访问对象 user 的 getName () 方法以得到 name 成员的值。${list[1]}			//访问 list 对象的第二项。${map["key"]} 		//访问 map 指定键的值。

5. empty运算:
empty运算可以判断一个数据是否为空,若为空,输出true,不为空,输出false
以下几种情况为空(在原本的key之前加empty关键字):
(1)值为null、空串
(2)值为Object类型的数组且长度为0 (注:其他类型的长度为0的数组值为非空)
(3)List、Map集合元素个数为0
 

6."."与"[ ]"的相同点和差别:

(1)相同点:都可以访问对象有属性。
(2)不同点:当属性的名字包含有空格,点号等复杂符号时。使用"." 来访问对象有属性将会出现异常
        

三:JSTL库

         由JSP所提供的一套标准标签 ,在纯JSP页面中用JSTL提供的标签去替代Java代码 

  使用步骤:
                (1)导入依赖库---- lib
                (2)在指定的页面中通过taglib指令来引入具体的标签库依赖文件

使用标签时,一定要在jsp文件头加入以下代码:

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

1. <c:out> 用来显示数据对象(字符串、表达式)的内容或结果

使用Java脚本的方式为:<% out.println("hello") %>  <% =表达式 %>

使用JSTL标签:<c:out value="字符串">,例如:

 <c:out value="${username }" default="ok"></c:out>

注:default 当value值访问的结果不存在时 会输出默认结果

2. <c:set> 用于将变量存取于 JSP 范围中或 JavaBean 属性中。

    属性:
             var  存储的变量名
             value 存储的值
             scope 作用域

?<c:set var="uname" value="李太白" scope="session"></c:set>${uname }<c:out value="${uname }"></c:out>?

3.<c:remove> 主要用来从指定的 jsp 范围内移除指定的变量。使用类似,语法如下:

<c:remove var="变量名" [scope="page|request|session|application"]></c:remove>

<c:set var="bb" value="123456"></c:set>移除前: <c:out value="${}"></c:out><hr/><c:remove var="cc" />移除后:<c:out value="${bb }"></c:out>

4.<c:if>

<c:if test="条件1" var="name" [scope="page|request|session|application"]></c:remove>

 <c:if test="${1==12 }"><c:out value="你的条件是OK的"></c:out></c:if>

5.<c:forEach>

语法:<c:forEach var="name" items="Collection" varStatus="statusName" begin="begin" end="end" step="step"></c:forEach>

     属性:

         var  变量名
         begin 起始值
         end  终值
         step 每次增长量
         varStatus 获取数据对应的行号
 

    <c:forEach  var="wa" begin="1" end="100" step="2" varStatus="demo" >${wa }----${demo.index }----${demo.count } <br/></c:forEach>

案例:遍历集合数据

	<%List<Student> myList = new ArrayList<Student>();myList.add(new Student("李白","男"));myList.add(new Student("李世民","男"));myList.add(new Student("成吉思汗","男"));myList.add(new Student("刘邦","男"));myList.add(new Student("刘备","男"));session.setAttribute("myList", myList);%><c:forEach items="${myList }" var="stu">${stu.username }   ${stu.sex }</c:forEach>