你的位置:首页 > Java教程

[Java教程]jsp标签EL表达式


1.jsp标签和el表达式
    (1)什么是jsp标签?
        jsp标签用来替换jsp文件中的java代码,容器遇到jsp标签之后,会依据标签找到标签类然后执行。
        注: 因为直接在jsp当中写java代码,不利于jsp文件的维护(比如,将包含有java代码的jsp交给美工去修改就很不方便),所以,
              sun才制订了jsp标签技术规范。
            使用jsp标签技术,有两大优点:
            a.jsp文件维护方便。
            b.方便代码的复用。
    (2)什么是el表达式?
        是一套简单的运算规则,用于给jsp标签的属性赋值,也可以直接输出。
    (3)el表达式的使用
        1)访问bean的属性  (a1.jsp)
            a.方式一
            ${user.name} 依次从pageContext,request,session,application中查找绑订名称为"user"的对象,找到该对象之后,
            会调用该对象的"getName"方法,最后输出该方法的运行结果。
                注:
                        a1. el表达式会将null转换成 ""输出。
                        a2. 如果依据绑订名找不到该对象,会输出""。
                        a3.可以使用pageScope,requestScope,sessionScope,applicationScope来指定查找范围。           
            b.方式二
                ${user["name"]}   
                注:
                        b1. []里面可以使用绑订名。
                        b2. []里面可以使用从0开始的下标,用来访问数组中的某个元素。               
        2)做一些简单的运算,运算结果可以用来给jsp的标签属性赋值,也可以直接输出。(a2.jsp)
        a.算术运算+,-,*,/,%
            注: + 只能求和,不能够连接字符串。
        b.关系运算 >,>=,<,<=,==,!=
        c.逻辑运算&&,||,!
        d.empty运算
            empty用来判断集合是否为空,或者是否是一个空字符串。
       3)读取请求参数值 (a3.jsp)
        ${param.username}等价于request.getParameter("username");
        ${paramValues.city}等价于request.getParameterValues("city");                                        
  (4)jstl标签的使用
        1)jstl是什么?     (java standard tag lib)
            apache公司开发的一套jsp标签,后来捐献给了sun,sun将其命名为jstl。
        2)如何使用?
            step1,将jstl相关的jar文件拷贝到WEB-INF\lib下。
            注:如果使用的是javaee5.0或者以上版本,一般不用拷贝了。有些tomcat的版本不带有这个jstl的jar文件,需要拷贝。
            step2,使用taglib指令引入要使用的标签。
                <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
                uri:指定命名空间(namespace)。
                prefix:命名空间的前缀。

            注:uri在jstl-1.2.jar包下的META-INF下的c.tld中

            <short-name>c</short-name>
            <uri>
http://java.sun.com/jsp/jstl/core</uri>

        3)jstl中的几个核心标签
           a.if标签  (c1.jsp)
             <c:if test="" var="" scope="">标签体</c:if>   
             当test属性值为true,会执行标签体。
            test属性可以使用el表达式来赋值
            var属性:指定绑订名。
            scope属性:指定绑订范围,可以是"page","request","session","application"。

          性别:<c:if test="${user.gender=='m'}">男</c:if><br/>
         <c:if test="${user.gender=='f'}">女</c:if><br/>
        
          性别:<c:if test="${user.gender=='m'}">男</c:if><br/>
         <c:if test="${user.gender!='m'}">女</c:if><br/>
        
          性别:<c:if test="${user.gender=='m'}" var="flag" scope="page">男</c:if><br/>
         <c:if test="${!flag}">女</c:if><br/>


            b.choose标签 (c2.jsp)(相当于java中的if…else if…)
                <c:choose>
                    <c:when test=""></c:when>
                    <c:otherwise></c:otherwise>
                </c:choose>
                when可以出现1次或者多次,当test属性值为true时,执行标签体的内容。otherwise可以出现0次或者1次。

        <c:choose>
             <c:when test="${user.gender=='m'}">男</c:when>
             <c:when test="${user.gender=='f'}">女</c:when>
             <c:otherwise>保密</c:otherwise>
         </c:choose>


           c.forEach标签 (c3.jsp)
                用来遍历集合或者数组
                <c:forEach items="" var="" varStatus=""></c:forEach>
                items属性: 指定要遍历的集合或者数组,可以使用el表达式。
                var属性:指定绑订名,绑订范围是pageContext(每一次从集合或者数组中取一个元素绑订到pageContext上)。
                varStatus属性:指定绑订名,绑订值是一个封装了当前遍历状态的一个对象(该对象提供了一些方法来获得当前遍历的状态)。
                    getIndex(): 获得当前正在被遍历的元素的下标(从0开始)。
                    getCount(): 获得当前是第几次遍历。

          <c:forEach items="${users}" var="user" varStatus="s">
                 <tr class="row${s.index%2+1 }">
                     <td>${user.name }</td>
                     <td>${user.age }</td>
                     <td>${user.gender }</td>
                     <td>${s.index }</td>
                     <td>${s.count }</td>
                 </tr>
             </c:forEach>

       
        (5)自定义标签(简单标签技术) (web10-2)
            step1,写一个java类,继承SimpleTagSupport类。 (HelloTag.java)
            step2,override doTag方法,在方法里,编写相应的处理逻辑。
            step3,描述标签(.tld文件)(mytag.tld)

           <body-content>有三个值

            <body-content>empty</body-content>

            empty:该标签没有标签体。

     scriptless:该标签可以有标签体,但是标签体的内容不能够包含有java代码<%  %>,<%=  %>,<%!   %>。

     JSP:该标签可以有标签体,并且标签体的内容可以含有java代码。但是。只有复杂标签技术支持该值。简单标签技术不支持JSP。