为什么需要EL

在jspy页面中嵌入大量的Java代码

访问结构比较复杂的数据时代码烦琐,且经常需要强制类型转换

EL表达式简介:

  Expression Language(表达式语言)

  功能:替代JSP页面中数据访问时的复杂编码

  特点:自动转换类型(EL得到某个数据时可以自动转换类型)

  使用简单

EL语法:

${EL expression}

通过变量名取值

获取对象的属性值

获取集合元素

执行表达式

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

获取对象的属性值

<%=((User) request.getAttribute("user")).getName()%>

点操作符

${user.name}

[]操作符

${user["name"]}

获取集合元素-List

 

// 在Servlet或JSP中保存数据
List names = new ArrayList();
names.add(0, "LiYang");
names.add(1,"WangHua");
request.setAttribute("names",names);
// 在JSP中访问数据
姓名:${ names[0] }<br/>
姓名:${ names[1] }<br/>

 

获取集合元素 - Map

// 在Servlet或JSP中保存数据
Map names = new HashMap();
names.put("one", "LiYang");
names.put("two", "WangHua");
request.setAttribute("names", names);
// 在JSP中访问数据
姓名:${ names.one }<br/>
姓名:${ names["two"] }<br/>

执行表达式

  关系操作符

   

逻辑操作符

empty操作符

若变量 a为null,或长度为零的String,或size为零的集合 则${ empty a }返回的结果为true ${ not empty a }或${ ! empty a }返回的结果为false

EL隐式对象

 EL隐式对象介绍:

 

 

什么是JSTL

JSP标准标签库;JSTL的优点:

提供一组标准标签,可用于编写各种动态功能。

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

为什么使用JSTL

实现了jsp代码的可复用,基于标签库原理,重复率较高的代码可支持复用,提高效率。

书写jsp页面可读性更强。

使用JSTL的步骤:

1.引入JSTL的jar文件和标签库描述符文件

2.在JSP页面添加taglib指令

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

3.使用JSTL标签

JSTL标准标签库介绍

JSTL标准标签库中的常用标签

1.通用标签:

set:设置指定范围内的变量值

//将value值存储到范围为scope的变量variable中
<c:set  var="variable"  value="value"  scope="scope" />
//将value值设置到对象的属性中
<c:set  target="target"  property="property"  value="value" />
//示例
//  在Servlet或JSP中设置JavaBean
User  user = new  User(); 
request.setAttribute("user",  user);
//  在JSP中修改JavaBean的属性值
<c:set target="${user}" property="name" value="defaultName" />

 

out:计算表达式并将结果输出显示。

//不指定默认值
<c:out  value="value" />
//指定默认值
<c:out  value="value"  default="default" />
//示//  在Servlet或JSP中设置JavaBean
User  user = new  User(); 
request.setAttribute("user",  user);
//  在JSP中输出JavaBean的属性值
<c:out  value="${user.name}"  default="No UserName" />

remove:删除指定范围内的变量

2.条件标签:

if:实现Java语言if功能

语法:

<c:if   test="codition"   var="variable"  scope="scope" >
</c:if>
/*
*test是判断条件表达式返回true/false
*var用于保存返回true/false
*scope指定var变量的作用域
*/

choose:实现if - else if - else语句的功能

语法:

<c:choose>
    <c:when test="condition1">
    //    内容1
     </c:when>
    <c:when test="condition2">
    //    内容2
     </c:when>
    //  ……
    <c:otherwise>
    //    内容n
    </c:otherwise>
</c:choose >

3.迭代标签:

forEach:实现对象集合的遍历

语法:

<c:forEach     items="collection"     var="varName"     begin="start"
               end="end"   step="stepSize"    varStatus="status"  >
</c:forEach>

//items指定要遍历的集合对象.

//begin指定从集合的第几位开始.

//end指定迭代到集合的第几位结束.

//step指定循环的步长.

//varStatus属性用于存放var引用的成员的相关信息,如索引等.

List集合和Map集合语法使用:

List products = GoodsDao.getAllProducts();
request.setAttribute("products", products);
// 在JSP中展示数据
//<!-- 循环输出商品信息 --> 
<c:forEach  items="${requestScope.products}"  var="product" 
        varStatus="status">

    //<!-- 如果是偶数行,为该行换背景颜色 -->
    <tr <c:if test="${status.index % 2 == 1 }">
            style="background-color:rgb(219,241,212);"</c:if>>

        //调用工厂函数,输出商品
        <td>${product.name }</td>
        <td>${product.area }</td>
        <td>${product.price }</td>
    </tr>
</c:forEach>

//requestScope.products是循环遍历集合。
//<c:if></c:if>判断奇偶行
     //通过迭代标签遍历Map

// 在Servlet或JSP中准备数据
Map<String, String> map = new HashMap<String, String>();
map.put("tom",  "美国");
map.put("lily",  "英国");
map.put("jack", "中国");
request.setAttribute("map",  map);
// 在JSP中展示数据
<c:forEach  items="${requestScope.map}" var="entry">
     ${ entry.key }
     ${ entry.value }<p>
</c:forEach>

 

posted on 2020-09-25 20:37  勤为路  阅读(105)  评论(0编辑  收藏  举报