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对象
-->.(这个以后再写)

 

posted @ 2020-03-10 19:13  wwww2  阅读(260)  评论(0编辑  收藏  举报