zoukankan      html  css  js  c++  java
  • JSTL和EL完美结合

    引出

    对于JSP中的程序控制和业务逻辑,通过嵌入java代码来实现,有种不伦不类的感觉,就像apsx中直接调用后台方法一样,在拨号项目中这样用过。

     

    这样做,阅读性差,也不利于调试和维护。况且JSP只是视图,视图的任务就是显示响应,所以在JSP页面中应该尽可能少的、或者完全不出现Java代码。这样对于页面开发人员,也不用掌握过多的java知识。

     

    JSTLEL的结合便很好的解决了这些问题。EL来显示数据,JSTL来实现网页逻辑判断和迭代显示等。这样基本可以取代java代码,而且更加简洁了,或者说封装得更好了,因为使用更少的代码完成了相同的工作,从而提高工作效率。

     

    JSTL概要

    JSTL的全称是JSPStandard Tag Library(JSP标准标签库),它是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的;提供五个标准标记库并支持EL。


     

    JSTL标签的配置和使用:

    配置:

     将jstl.jar和standard.jar拷贝到WEB-INF/lib下

    使用:

     采用taglib指令引入标签库

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

     <%@ tagliburi="http://java.sun.com/jsp/jstl/functions"prefix="fn"%>

     <%@ tagliburi="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>


    Expression Language概要


     

    • EL表达式不需要引入任何jar包,只要jsp/servlet容器实现了J2EE1.4/Servlet2.4、JSP2.0规范就可以
    • 定义和设置一个变量,如果不设置范围,默认的是page
    • 如果在获取变量值时,不使用作用域访问对象,系统就会按照page—>request—>session—>application的顺序来查找

      

    • 在JSP页面中,经常会进行接收其他页面或者Servlet传递过来的参数;EL为什么提供参数访问对象来获取这些参数值,如:${param:name}

     

    • JSP和EL有一个公共的对象:pageContext,EL可以通过pageContext来访问JSP中其他的隐式对象(request,session),如:${pageContext:request.requestURL}

     

    例子

    jsp

     

    <%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>
    <html>
    <head>
    <title>Inserttitle here</title>
    </head>
    <body>
    <h1>测试JSTL核心库</h1>
     
    <li>测试c:set,c:remove</li><br>
    <c:setvalue="root" var="userid"/>
    userid:${userid}<br>
    <c:removevar="userid"/>
    userid:${userid}<br>
    <p>
    <li>条件控制标签:c:if</li><br>
    <c:iftest="${v1 lt v2}">
    v1小于v2<br>
    </c:if>
    <p>
     
    <li>条件控制标签:c:choose,c:when,c:otherwise</li><br>
    <c:choose>
    <c:whentest="${v1 gt v2}">
    v1大于v2<br>
    </c:when>
    <c:otherwise>
    v1小于v2<br>
    </c:otherwise>
    </c:choose>
    <c:choose>
    <c:whentest="${empty userList}">
    没有符合条件的数据<br>
    </c:when>
    <c:otherwise>
    存在用户数据<br>
    </c:otherwise>
    </c:choose>
    <p>
     
    <li>演示循环控制标签:forEach</li><br>
    <h3>采用forEach标签</h3>
    <tableborder="1">
    <tr>
    <td>用户名称</td>
    <td>年龄</td>
    <td>所属组</td>
    </tr>
    <c:choose>
    <c:whentest="${empty users}">
    <tr>
    <tdcolspan="3">没有符合条件的数据</td>
    </tr>
    </c:when>
    <c:otherwise>
    <c:forEachitems="${users}" var="user">
    <tr>
    <td>${user.username}</td>
    <td>${user.age}</td>
    <td>${user.group.name}</td>
    </tr>
    </c:forEach>
    </c:otherwise>
    </c:choose>
    </table>        
    </body>



     

    Servlet

     

    protectedvoid doGet(HttpServletRequest request, HttpServletResponse response)
    throwsServletException, IOException {
    //条件控制标签
    request.setAttribute("v1",10);
    request.setAttribute("v2",20);
     
    request.setAttribute("userList",new ArrayList());
     
    //结构
    Groupgroup = new Group();
    group.setName("动力节点603班");
     
    Listusers = new ArrayList();
    for(int i=0; i<10; i++) {
    Useruser = new User();
    user.setUsername("张三_"+ i);
    user.setAge(23+ i);
    user.setGroup(group);
    users.add(user);
    }
    request.setAttribute("users",users);        
     
    request.getRequestDispatcher("/jstl_core.jsp").forward(request,response);
    }



     

    小结

    JSTL也好,EL表达式也罢,实质都是后台的java代码,只是为了“名正言顺”的体现在jsp页面,以标签的形式展现。这倒和aspx控件类似,虽然是个类,却在页面使用标签表示。

  • 相关阅读:
    Sql Server字符串拆分(Split)方法汇总
    Raid0、Raid1、Raid0+1、Raid3和Raid5 几种磁盘阵列区别
    浅谈sql优化
    python 多进程和异步io的有机结合 Error in atexit._run_exitfuncs
    asp.net.core学习笔记1:swagger的使用和webapi接收Jobject对象
    在windows服务中托管asp.net.core
    人脸识别:face_recognition初尝试
    python 快速搭建局域网文件服务器 SimpleHTTPServer http.server
    sso和oauth2.0的简单了解学习
    python常用删除库的方法
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3040988.html
Copyright © 2011-2022 走看看