一 JSTL
JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。
JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。JSTL主要作用:
(1) 获取数据
EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
(2) 执行运算
利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
(3) 获取web开发常用对象
EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
(4) 调用Java方法
EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。
1 JSTL库的安装
Apache Tomcat安装JSTL 库步骤如下:
Step1 :从Apache的标准标签库中下载的二进包(jakarta-taglibs-standard-current.zip)。
- 官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
- 本站下载地址:jakarta-taglibs-standard-1.1.2.zip
下载jakarta-taglibs-standard-1.1.2.zip 包并解压,将jakarta-taglibs-standard-1.1.2/lib/下的两个jar文件:standard.jar和jstl.jar 文件拷贝到/WEB-INF/lib/下。
也可以使用maven自动从库中下载jstl库, pom.xml
<!-- jstl https://mvnrepository.com/artifact/jstl/jstl --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency>
Step2: 解压缩 jakarta-taglibs-standard-1.1.2.zip,找到解压后的 tld文件,都拷贝到工程的 %/WebProject/webapp/WEB-INF目录下。
Step3 :在 web.xml 文件中添加以下配置
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <jsp-config> <taglib> <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri> <taglib-location>/WEB-INF/fmt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri> <taglib-location>/WEB-INF/fmt-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/core</taglib-uri> <taglib-location>/WEB-INF/c.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri> <taglib-location>/WEB-INF/c-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri> <taglib-location>/WEB-INF/sql.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri> <taglib-location>/WEB-INF/sql-rt.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/x</taglib-uri> <taglib-location>/WEB-INF/x.tld</taglib-location> </taglib> <taglib> <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri> <taglib-location>/WEB-INF/x-rt.tld</taglib-location> </taglib> </jsp-config> </web-app>
2 获取数据
使用EL表达式获取数据语法:"${标识符}"
EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。
EL表达式可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据
el表达式获取数据范例:
jstl.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@page import="com.mobile.domain.Person"%> <%@page import="com.mobile.domain.Address"%> <!DOCTYPE HTML> <html> <head> <title>el表达式获取数据</title> <meta charset="utf-8" /> </head> <body> <% request.setAttribute("name","信平"); %> <%--${name}等同于pageContext.findAttribute("name") --%> 使用EL表达式获取数据:${name} <hr> <!-- 在jsp页面中,使用el表达式可以获取bean的属性 --> <% Person p = new Person(); p.setAge(12); request.setAttribute("person",p); %> 使用el表达式可以获取bean的属性:${person.age} <hr> <!-- 在jsp页面中,使用el表达式可以获取bean中的。。。。。。。。。的属性 --> <% Person person = new Person(); Address address = new Address(); person.setAddress(address); request.setAttribute("person",person); %> ${person.address.name} <hr> <!-- 在jsp页面中,使用el表达式获取list集合中指定位置的数据 --> <% Person p1 = new Person(); p1.setName("张三"); Person p2 = new Person(); p2.setName("李四"); List<Person> list = new ArrayList<Person>(); list.add(p1); list.add(p2); request.setAttribute("list",list); %> <!-- 取list指定位置的数据 --> ${list[1].name} <!-- 迭代List集合 --> <c:forEach var="person" items="${list}"> ${person.name} </c:forEach> <hr> <!-- 在jsp页面中,使用el表达式获取map集合的数据 --> <% Map<String,String> map = new LinkedHashMap<String,String>(); map.put("a","aaaaxxx"); map.put("b","bbbb"); map.put("c","cccc"); map.put("1","aaaa1111"); request.setAttribute("map",map); %> <!-- 根据关键字取map集合的数据 --> ${map.c} ${map["1"]} <hr> <!-- 迭代Map集合 --> <c:forEach var="me" items="${map}"> ${me.key}=${me.value}<br/> </c:forEach> <hr> </body> </html>
Person.java
package com.mobile.domain; public class Person { private String name; private Address address; private Integer age; public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
Address.java
package com.mobile.domain; public class Address { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
参考资料:
http://www.runoob.com/jsp/jsp-jstl.html