zoukankan      html  css  js  c++  java
  • jsp--EL表达式&&标签库

    EL表达式是为了替代jsp表达式,标签是为了替代jsp脚本。有了这两个技术就能避免在jsp页面中尽量不写java代码,减轻了jsp的复杂度,增加了代码的整洁程度。

    EL表达式

    语法:${变量或表达式}

    作用:向浏览器输出域对象中的变量值或者表达式计算的结果。

    代码示例:

    1)基本数据类型输出

     1 <body>
     2     <%-- 基本类型输出  --%>
     3     <%
     4         pageContext.setAttribute("name", 12, PageContext.PAGE_SCOPE);
     5         pageContext.setAttribute("name", true, PageContext.REQUEST_SCOPE);
     6         pageContext.setAttribute("name","session域", PageContext.SESSION_SCOPE); 
     7         pageContext.setAttribute("name", "context域", PageContext.APPLICATION_SCOPE); 
     8     %>
     9     ${name }<br/><%-- 默认在pageScope、requestScope和sessionScope中搜索 --%>
    10     <%--在指定域中搜索 --%>
    11     ${pageScope.name}<br/>
    12     ${requestScope.name}<br/>
    13     ${sessionScope.name}<br/>
    14     ${applicationScope.name}<br/>
    15 
    16 </body>

    注意:单独${name}会默认在pageScope、requestScope和sessionScope中搜索。

    2)对象类型输出

    1 <%--对象类型输出  --%>
    2 <%
    3     Student student = new Student("小名",12);
    4     pageContext.setAttribute("student", student);
    5 %>
    6 ${student.name }

    3)list对象输出

     1 <%--list类型输出  --%>
     2 <%
     3     List<Student> list = new ArrayList<Student>();
     4     list.add(new Student("小明",10));
     5     list.add(new Student("小红",20));
     6     list.add(new Student("小王",30));
     7     pageContext.setAttribute("list", list);
     8 %>
     9 list类型输出:
    10 ${list[0].name }
    11 ${list[1].name }
    12 ${list[2].name }

    4)map对象输出

     1 <%--Map类型输出  --%>
     2  <%
     3   Map<String,Student> map = new HashMap<String,Student>();
     4   map.put("100", new Student("校长",60));
     5   map.put("101", new Student("老师",30));
     6   map.put("102", new Student("学生",20));
     7   pageContext.setAttribute("map", map);
     8  %>
     9  Map类型输出:
    10  ${map['100'].name }
    11  ${map["101"].name }
    12  ${map["102"].name }

    注意:EL表达式输出的变量一定是在域对象中存在的。

    5)EL输出表达式

     1 <body>
     2     <%--
     3         1)算术表达式
     4           +  -  *  /
     5      --%>
     6      ${10+5 }<br/>
     7      ${10*5 }
     8      <hr/>
     9      <%--
    10         2)比较运算
    11         >  <  >=  <=  ==   !=
    12      --%>
    13      ${10>5 }<br/>
    14      ${10<5 }<br/>
    15      ${10!=10 }
    16      <hr/>
    17      <%--
    18         3)逻辑运算
    19          &&  ||  !
    20      --%>
    21      ${true && false }<br/>
    22      ${true || false }<br/>
    23      ${!false }<br/>
    24      <hr/>
    25       <%--
    26         4)判空
    27         null 或 空字符串:  empty
    28      --%>
    29      <%
    30          //String name = "eric";
    31          //String name = null;
    32          String name = "";
    33          pageContext.setAttribute("name",name);
    34       %>
    35       判断null: ${name==null }<br/>
    36       判断空字符: ${name=="" }<br/>
    37      判空:  ${name==null || name=="" }
    38      另一种判空写法: ${empty name }
    39      
    40          
    41   </body>

    标签库

    作用:替换java脚本。

    分类:

      1)内置标签(动作标签):不需要在jsp页面中导入标签。

      2)jstl标签:需要在jsp页面中导入标签。

      3)自定义标签:开发者自行定义,需要在jsp页面导入标签。

    (1)内置标签(动作标签)

    转发标签

    <jsp:forward page="library2.jsp"></jsp:forward>

    参数标签

    <jsp:param value="dev" name="name"/>

    包含标签

    <jsp:include page="header.jsp"></jsp:include>

    注意:此处的包含为动态包含,即包含和被包含的页面先各自翻译成java源文件,然后再运行时合并在一起。

    静态包含和动态包含的区别:

    1)语法不同

      静态包含:<%@ include file="被包含的页面"%>

      动态包含:<jsp:include page="被包含的页面">

    2)参数传递不同

      静态包含:不能向被包含的页面传递参数

      动态包含:可以向被包含的页面传递参数

    3)原理不同

      静态包含:先合并在翻译。

      动态包含:先翻译再合并。

    传递参数的案例:

    主页面

    <body>
        <jsp:include page="header.jsp">
            <jsp:param value="nick" name="name"/>
            <jsp:param value="123" name="pwd"/>
        </jsp:include>
        <hr>
        <font color="blue">正文</font>
        <jsp:forward page="library2.jsp">
            <jsp:param value="dev" name="name"/>
        </jsp:forward>
        
    </body>

    被包含页面

    <font size='12' color='red'>头文件</font><br/>
    名字:<%= request.getParameter("name") %>
    密码:<%= request.getParameter("pwd") %>

    被转发页面

    <body>
        用户名:<%=request.getParameter("name") %>
    </body>

    (2)jstl标签

    1)核心标签库的重点标签

    <1>设置属性标签

    <%--设置属性 --%>
    <c:set var="name" value="nick" scope="request"></c:set>

    常用标签属性:

      var:设置变量名。

      value:设置变量值。

      scope:设置变量的保存域。

    注意:--c:set标签默认保存到page域中。

    <2>获取属性标签

    <%--获取属性 --%>
    <c:out value="${requestScope.name }" ></c:out>
    <% 
        String age = null;
        pageContext.setAttribute("age", age);
    %>
    <br>
    <c:out value="${age }" default="<font>默认值</font>" escapeXml="true"></c:out>

    常用标签属性:

      value:获取标签的值。

      default:当标签值value为null时,可使用默认值default。

      escapeXml:是否对value进行转义,false不转义,true转义。

    <3>单条件判断标签

    <%--if单条件标签 --%>
    <c:if test="${empty age}">
        条件成立
    </c:if>

    常用标签属性:

       test:判断条件

    <4>多条件选择标签

    <%--多条件标签 --%>
    <c:set var="score" value="68"></c:set>
    <c:choose>
        <c:when test="${score>=90 }">
            优秀
        </c:when>
        <c:when test="${score>=80 && score<90}">
            良好
        </c:when>
        <c:when test="${score>=70 && score<80 }">
            一般
        </c:when>
        <c:when test="${score>=60 && score<70 }">
            及格
        </c:when>
        <c:otherwise>
            啥也不是
        </c:otherwise>
    </c:choose>

    <5>forEarch循环语句

    <%-- for-earch循环语句 --%>
    <%
        //list存储
        List<Student> list = new ArrayList<Student>();
        list.add(new Student("张三",10));
        list.add(new Student("李四",20));
        list.add(new Student("王五",30));
        pageContext.setAttribute("list", list);
        //map存储
        Map<String,Student> map = new HashMap<String,Student>();
        map.put("100",new Student("小张",10));
        map.put("101",new Student("小李",10));
        map.put("102",new Student("小王",10));
        pageContext.setAttribute("map", map);
    %>
    <c:forEach items="${list }" var="student" varStatus="status" >
        用户id:${status.count }--用户名:${student.name }--年龄:${student.age }
        <br/>
    </c:forEach>
    <hr>
    <c:forEach items="${map }" var="entry">
        用户id:${entry.key }--名字:${entry.value.name }--年龄:${entry.value.age }<br>
    </c:forEach>

    常用标签属性:

      begin:开始遍历的位置

      end:结束遍历的位置

      step:遍历步长

      items:遍历目标对象

      var:遍历出的对象

      varStatus:遍历状态,其中的count属性可以获得索引值。

    (6)forTokens循环语句

    <%-- forTokens循环语句 --%>
    <%
        String str = "哈哈哈-呵呵呵-嘿嘿嘿";
        pageContext.setAttribute("str", str);
    %>
    <c:forTokens items="${str }" delims="-" var="s">
        ${s }--
    </c:forTokens>

    常用标签属性:

      forEarch有的属性forTokens都有。

      delims:分隔符

    <7>重定向标签

    <%-- 重定向标签 --%>
    <c:redirect url="http://www.baidu.com"></c:redirect>

     2)eclipse中使用jstl标签库

      <1>导入jstl.jar、standard.jar2个jar包;

        此处提供两个下载地址:

          CSDN:http://download.csdn.net/detail/czxt0605/7671781

          百度云盘:https://pan.baidu.com/s/1qYnVbAG

      <2>把c.tld文件拷贝到WEB-INF目录下;

      <3>web.xml加上如下配置

    <jsp-config>
          <taglib>
              <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
              <taglib-location>/WEB-INF/c.tld</taglib-location>
          </taglib>
      </jsp-config>
  • 相关阅读:
    vue --- 脚手架初始化项目中配置文件webpack.base.conf.js代码含义
    Chrome
    es8 --- 新特性
    es7 --- 新特性
    vue --- 关于多个router-view视图组件,渲染同一页面
    vue ---- 组件传值之间使用 v-model
    vue --- watch 高级用法
    js --- 递归结构图
    es6 --- Generator 函数
    es6 -- set 数据结构
  • 原文地址:https://www.cnblogs.com/nicker/p/6606671.html
Copyright © 2011-2022 走看看