zoukankan      html  css  js  c++  java
  • EL与JSTL

    EL与JSTL的作用:

          简化JSP问价上java代码开发步骤

    二。jsp主要开发作用

         将域对象中数据读取并写入到响应体

    三。在jsp文件上使用java命令,将域对象中数据读取并写入到响应体开发步骤

        

    <%
         String value = (String)request.getAttribute("key");
         out.write(value);
    %>
        //或<%=value%>
    

      1.从域对象读取数据

            2.对得到的数据进行类型转换

            3.将最终结果写入到响应体

    四。EL工具包

            1.是一个由java开发的工具包

            2.专门用于从域对象读取数据并写入到响应体开发任务

            3.语法格式:

            4.EL工具包自动存在Tomcat中lib(el-api.jar),开发时,可直接使用不需要额外导包

    五。EL的标准格式:

            ${域对象别名 . 关键字}:到指定域对象读取相对应关键字的内容,并自动将内容写入到响应体

             

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
       request.setAttribute("name", "wwww2");
    %>
    ${requestScope.name}

    六。jsp文件中域对象

    1.  application:全局作用域对象
    2. session : 会话作用域对象
    3. request:请求作用域对象
    4. pageContext : 当前页作用域对象

    七。EL表达式域对象别名

             JSP                                   EL

             application                         applicationScope

             session                               sessionScope

             request                               requestScope

             pageContext                      pageScope

    八。EL表达式将高级对象属性写入到响应体

             ${ 域对象别名.关键字.属性名}

              EL表达式使用反射机制,通过调用当前属性对应的get方法读取属性内容

    九。EL表达式简化版

              ${关键字}:可以省略域对象别名

    [简化版工作原理]:

    首先到[pageContext]定位关键字,如果有读取输出并结束执行

    如果[pageContext]没有找到关键字,到[request]定位关键字如果有读取输出并结束执行

    如果[request]没有找到关键字,到[session]定位关键字如果有读取输出并结束执行

    如果[session]没有找到关键字,到[application]定位关键字如果有读取输出并结束执行

    如果[application]没有找到关键字,返回nu11

     

         [弊端]:

    1.增加运行时间。

    比如数据存放applicaiton。使用$ {key}

    执行轨迹

    pageContext---request---session---application

    2.定位错误

        【使用场景】:专门为pageContext读取数据并写入响应体做准备

    十。EL表达式支持的运算

    1.数学运算
    2.关系运算      >     >=    <     <=    ==     !=

                           gt     ge    lt      le     eq     !=
    3.逻辑运算      &&    ||      !

    十一。EL表达式其它内置对象

              1.param:

                       【使用】:${param.请求参数名}

                       【作用】:读取请求协议包参数内容

                       【代替】:String value = request.getParameter("请求参数名");

                                          out.write(value); 

                       【例子】:

                       

    <!-- http://localhost:8080/Test03/test02.jsp?uname=zs&password=123 -->
    //访问地址时在地址栏写入参数
    姓名:${param.uname} 密码:${param.password}

     

    2. paramValues:

                 [作用]:读取请求协议包中关联多个值的请求参数,

               将参数内容保存到数组
    [使用] :$ {paramValues.请求参数名}
    [代替] :
               String array[]= request. getParameterValues ("ck") ;

    【例子】:

    <!-- http://localhost:8080/Test03/test02.jsp?empno=23&empno=22 -->
    编号1:${paramValues.empno[0]}
    编号2:${paramValues.empno[1]}

    3. initParam :

    [代替]:

    String value = application . getInitParameter ("driver") ;
    out. write (value) ;

    [使用] :

    ${initParam.共享数据名}

               

    //先在web.xml中准备如下参数
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      <context-param>
         <param-name>driver</param-name>
         <param-value>jdbc.util.driver</param-value>
      </context-param>
    </web-app>

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    
    ${initParam.driver}

            4.pageContext:

                        通过当前页作用域对象定位JSP中其他内置对象的属性,并把属性写入响应体
                        $ {pageContext . request . contextPath}

                   

    <%
       pageContext.setAttribute("age", 23);
    %>
    ${age}

         

    十二。相对路径与绝对路径
                  1.相对路径与绝对路径区别

                           1)相对路径:以当前文件位置为起点,定位其他的资源文件

                           2)绝对路径:以网站根目录为起点,定位其他的资源文件

                   2.实际开发过程中,建议使用[绝对路径],不建议使用相对路径

                   3.如何禁止相对路径,如何简化绝对路径写法

                              <base href: ="/根目录/">

                   4.如何动态获得网站运行时根目录
                            <%
                               string root = request . getContextPath() ; // /myWeb
                            %>
                           <base href="<%=root %>/">


    十三。EL表达式的缺陷

                1.只能读取域对象数据,不能向域对象中写入数据更改数据

                2.不支持控制语句   if判断   while循环

    **************如果单独使用EL表达式,无法确保jsp文件中所有的java命令都被替换****************

                                                    JSTL标签工具类

    一 【介绍】:

                 1.jsp                Standrad Tag Lib :JSP中标准的标签工具类

                 2.是sun公司提供

                 3.组成:

                          1)核心标签:java在jsp上基本功能进行封装      if     while

                          2)    sql标签:JDBC在jsp上使用功能             (不常用)

                          3) xml标签:DOM4J在jsp上的使用功能

                          4)Format标签:JSP文件格式转换

    二。配置:

                    1.导入jar包:   jstl.jar           standrad.jar              (放入WEB-INF下的lib文件夹)                   

                    2.在jsp文件引入jstl中core包依赖约束

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

     三。标签的使用介绍

               1.<c:set>:

                      【作用】:在jsp文件上设置域对象中共享数据

                      【使用】:<c:set scope="session" var="key" value="10"/>

                      【代替】:<%

                                                    session.setAttribute("key","10");

                                       %>

                       【属性】:scope:指定操作的域对象别名

                                                       scope=“application/session/request/page”

                                          var:声明域对象中关键字

                                          value:存入的共享数据

         

                2. <c:if> :
                          [作用]:在JSP文件. 上控制哪些内容可以写入到响应体

                          [使用]:< Kc:if test=" 通过EL表达式进行判断">

                                      内容

                                   </c:if>

                         [例子]:

                            

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <% pageContext.setAttribute("age",23);%>
    <c:if test="${age>18 }" var="rs">成年</c:if>
    <c:if test="${!rs }">未成年</c:if>

              3. <c: choose>
                      [作用]:在JSP文件. 上实现多分支选择判断,决定哪一个内容能写入到响应体

                      [使用] :

                               <c: choose>
                                       <c:when test="El表达式进行判断">内容1</c:when>
                                       <c:when test="El表 达式进行判断">内容2</c: when>           

                                       <c: otherwise>内谷3</ c: otherwise>

                              </c: choose>

                        [例子]:              

    <c:set scope="session" var="grade" value="90"/>
    <c:choose>
        <c:when test="${sessionScope.grade<60 }">不及格</c:when>
        <c:when test="${sessionScope.grade<80 }">中等</c:when>
        <c:when test="${sessionScope.grade<100 }">优秀</c:when>
        <c:otherwise>满分</c:otherwise>
    </c:choose>

                        

                4. <c: forEach>:
                        [作用]:循环遍历.
                        [第一种使用方式] <c:forEach
                                                        var="声明循环变量名称".
                                                        begin="初始化循环变量"
                                                        end="循环变量可以接收的最大值"
                                                        step="循环变量递增值或则递减值"
                                                     >


                                                       ***step属性可以不写,默认每次递增加一
                                                       ****循环变量被保存在[pageContext]

                                                   </c: forEach>

                                   

    <select>
       <c:forEach var="i" begin="1" end="5" step="1">
           <option>第${i }页</option>
        </c:forEach>
    </select>

                         [第二种使用方式]: <c:forEach
                                                              items="通过EL表达式获得域对象集合"
                                                              var="声明循环变量"
                                                        >
                                                         ${循环变量.对象属性名}
                                                      </c: forEach>

                      

            //假如事先有一个Employee类,有name,gender属性              

    <%@page import="com.Employee"%>
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
          <%
           Employee emp1 = new Employee("zs","man");
           Employee emp2 = new Employee("mike","woman");
           Employee emp3 = new Employee("wwww2","man");
           List<Employee> list = new ArrayList<Employee>();
           list.add(emp1);
           list.add(emp2);
           list.add(emp3);   
           pageContext.setAttribute("list", list);
           %>
         <c:forEach items="${list }" var="emp" >
              姓名:${emp.name }
              性别:${emp.gender }<br>
         </c:forEach>

    <!--
    遍历map: 集合时,每次从map集合得到一一个 [键值对]
    [键值对]交给循环变量
    循环变量.key获得[键值对J中关键字名字班级名称
    循环变量.value获得 [键值对]中内容stu对象
    -->.(这个以后再写)

  • 相关阅读:
    ABP实现文件下载
    sqlserver把查询结果转为json和xml
    使用docker安装nginx
    sqlserver 索引优化 sql语句执行分析
    centos7下安装docker教程
    mysql查看sql的执行计划(是否使用索引等)
    vue计算属性和watch的区别有哪些?
    多表连接的三种方式详解 hash join、merge join、 nested loop
    【Winform】所有的dll都打包到一个exe里
    【异常处理】System.Data.Entity.Core.EntityException: 'The underlying provider failed on Open.'
  • 原文地址:https://www.cnblogs.com/wwww2/p/12457459.html
Copyright © 2011-2022 走看看