1. EL表达式

EL(Expression Language)表达式语言是JSP2版本中引入的新特性,用于JSP的数据访问。这种表达式可以简化JSP文件中的数据访问的代码。

基本语法:${var}

注意: web.xml 的版本太低可能会引发el表达式无法被解析,所以尝试修改web.xml的根标签为如下 <web-app xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“ xmlns=”http://java.sun.com/xml/ns/javaee“ xmlns:web=”http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd“ xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” id=”WebApp_ID” version=”2.5”>

1.1 访问对象的属性

案例,

  1. 访问Person对象中的name属性
    1. ${person.name}
    2. ${person[name]}
  2. 访问数组元素

${persons[0]}

1.2 EL运算符

我们的EL运算符包括哪些
image.pngimage.png

1.3 隐含对象

EL语言定义了11个隐含对象,其中10个都是java.util.Map类型。都可以直接使用。
image.png
其中最常用的可能就是param对象

1.4 命名变量

EL表达式中的变量称为命名变量,它不是JSP文件中的局部变量或者实例变量,而是存放在特定范围内的属性,命名变量的名字和特定范围内的属性的名字对应。

如果EL表达式不指定上述隐含对象的Scope,则默认使用pageContext对象的findAttribute方法在所有范围内寻找属性值

例如:在页面上输入${person.name}, 和如下代码基本等价

  1. <%
  2. Person person1 = (Person)pageContext.findAttribute("person");
  3. if (person1 != null) {
  4. %>
  5. <%= person1.getName(); %>
  6. <%}%>

1.5 自定义EL函数

EL表达式语言可以访问EL函数,EL访问的函数实际上于Java类中的方法对应。

案例:自定义EL函数,将某字符串类型的命名变量以

标签包裹,并且剧中显示

  1. 首先自定义类, 并且写出对应的函数,例如我自定义一个Tool类

    1. public class TagTool {
    2. public static String showTitle(String title) {
    3. return "<h1 style='text-align:center'>" + title +"</h1>";
    4. }
    5. }
  2. 在某JSP中调用我的方法,注意引入自定义标签库 ```java <%@ taglib prefix=”tool” uri=”/mytaglib”%>

${tool:showTilte(person.name)}


3. 自定义一个mytaglib.tld文件在/WEB-INF/tld目录下,映射EL和对应的方法,内容如下:

```java
<?xml version="1.0" encoding="ISO-8859-1"?>

<taglib 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-jsptaglibrary_2_1.xsd"
        version="2.1">

    <tlib-version>1.0</tlib-version>
    <short-name>myshortname</short-name>
    <uri>http://mycompany.com</uri>

    <!-- Invoke 'Generate' action to add tags or functions -->
    <function>
        <name>showTilte</name>
        <function-class>com.class2.tool.TagTool</function-class>
        <function-signature>java.lang.String showTitle(java.lang.String)</function-signature>
    </function>

</taglib>
  1. 在web.xml中注册我的自定义的标签
    <jsp-config>
     <taglib>
         <taglib-uri>/mytaglib</taglib-uri>
         <taglib-location>/WEB-INF/tld/mytaglib.tld</taglib-location>
     </taglib>
    </jsp-config>
    
    运行后可以看到${tool:showTilte(person.name)}的效果,比如我之前存入person的name值为“漩涡鸣人”
    image.png
    课堂练习: 自定义EL函数showList,将一个数组或者列表以
    • 标签将其列举展示出来

2.JSTL标签库

为了提高Web应用的开发效率,Oracle公司制定了一组标准标签库的最新规范,简称JSTL(JavaServer Pages Standard Tag Library)。

2.1 JSTL标签库简介

JSTL标签库实际上包含五个不同的标签库。JSTL规范为这些标签库的URI和前缀做了约定,URI不要求有效,仅仅表示具有唯一特性的资源标识符

标签库名 前缀 URI 描述
Core c http://java.sun.com/jsp/jstl/core 核心标签库
I18N fmt http://java.sun.com/jsp/jstl/I18N 国际化
Sql sql http://java.sun.com/jsp/jstl/sql 关系型数据库相关标签库
Xml x http://java.sun.com/jsp/jstl/xml 操作xml的标签库
Functaions fn http://java.sun.com/jsp/jstl/funcations 包含了一组通用的EL函数,在EL表达式中可以使用这些EL函数

可以从如下网址获取标签的jar文件:http://tomcat.apache.org/taglibs/standard/
例如我下载了下载:
taglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
并将其加入到工程的lib中

然后在JSP的头部引用我们的标签库就可以了,例如,我引入core库

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

2.2 JSTL Core标签库

2.2.1.

把一个表达式的结果打印在网页上:

<c:out value="表达式" default="默认值">

表达式可以是传统的java表达式,也可以是EL。

2.2.2

  1. 设定String变量的值。
  2. 如果变量名为JavaBean,还可以设定JavaBean的属性值。
  3. 如果命名变量为Map雷星,还可以设定与其中的Key对应的值。
<c:set var="命名变量的名字" scope="page|request|session|application" value="表达式"/>
//或者
<c:set var="命名变量的名字" scope="page|request|session|application">表达式</c:set>

scope属性指定范围的名字,默认为page范围

当要为JavaBean或者map的某个属性赋值的时候,使用target和property属性,target指定操作的对象,property指定该对象需要设置值的属性,例如:

<jsp:useBean id="person" class="com.miao.jsp.entity.Person" scope="application"/>
<c:set target="${person}" property="name" value="马云"/>
<c:out value="${person.name}" default="我爱罗"/>

2.2.3

删除一个命名变量

<c:remove var="user" scope="page|request|session|application" />

2.2.4

捕获异常,把异常对象放在指定的命名变量中,类似于try-catch,例如

<c:catch var="ex">
<%
throw new NullPointerException("空指针异常");
%>
</c:catch>
<c:out value="${ex.message}" />

条件标签

2.2.5

用于实现java中的if功能,属性test中书写表达式。
它有个属性var 和 scope,但是不常用

<c:if test="true">
    你是一头猪
</c:if>

2.2.6

实现Java语言中的if-else功能

<c:choose>
    <c:when test="表达式1">
      结果1
  </c:when>
  <c:when test="表达式2">
      结果2
  </c:when>
  <c:otherwise>
      结果3
  </c:otherwise>
</c:choose>

迭代标签

2.2.7

便利集合中的对象,并且能重复执行标签主体。
属性:

  • var: 代表集合中的一个元素的命名变量名字
  • items: 代表想要遍历的那个集合
  • varStatus: 遍历的状态信息, 他自己也有四个可取的值:
    • count: 当前元素在集合中的序号
    • index:当前元素在集合中的索引
    • first: 当前元素是否是第一个元素
    • last: 当前元素是否是最后一个元素
  • begin, end, step属性: 指定循环的起始索引,结束索引和步长

2.2.8

用于遍历字符串中用特定分割符分割的子字符串,并且能够重复执行目标,例如:

<c:forTokens items="Tom,Mike,Linda" delims="," var="name">
    ${name}
</c:forTokens>

url相关
_

2.2.9

以特定的重写规则重新构造url
将请求重定向

2.3 I18N标签库(自行了解)