JSTL标签

使用JSTL首先需要将jstl.jar和standard.jar两个第三方jar包粘贴到你的web项目的WEB-INF中的lib下并add to build path。

导入完包之后,需要在你的jsp页面导入相应的JSTL标签库,使用taglib指令进行导入,如使用JSTL核心库:

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

这里的prefix指的是前缀名,可以理解成别名,随便你自己定义,但规范来说,一般使用“c”来标记核心标签库。

JSTL核心标签库

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

1.out

用来输出常量或者变量,可以与EL表达式结合使用功能更强大。它可以设置默认值,假如变量数据不存在或为null,(不包括空字符串),那么会显示default设置的值。默认情况下,escapeXml="true",value里的值不会被解析成html,当escapeXml="false"时,value里的值会被解析成html。

<%@ page import="test.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>jstl标签</title>
</head>
<body>
<%
    Person person=new Person("猪头",10);
    pageContext.setAttribute("person",person);
%>
<c:out value="你好"/><br/>
<c:out value="${'hello'}"/><br/>
<c:out value="${person}"/><br/>
<c:out value="${person.name}"/><br/>
<c:out value="${name}" default="无名"/><br/>
<c:out value="<font color=red>喜碧</font>" escapeXml="true"/><br/><%--escapeXml属性默认是true--%>
<c:out value="<font color=red>喜碧</font>" escapeXml="false"/><br/>
${"<font color=red>喜碧</font>"}<%--el表达式里的字符串会被解析成html--%>
</body>
</html>

其中,Person类的代码如下:

package test;

public class Person {
    private String name;
    private int age;
    public Person() {
    }

    public Person(String name,int age) {
        this.name = name;
        this.age=age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

运行结果:

2.set

set标签的属性中var、value、scope是一组,例如<c:set var="name" value="mike" scope="session">等同于session.setAttribute("name","mike"),scope默认="page";target、property、value是一组,用于给target对象的property属性赋值value。

<%@ page import="test.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>jstl标签</title>
</head>
<body>
<%
    Person person=new Person("猪头",10);
    pageContext.setAttribute("person",person);
%>

<%--等同于session.setAttribute("person1",pageContext.findAttribute("person")),
这里的findAttribute()是依次在page,request,session(如果有效的话)和application Scope(范围
)查找以person为名的Attribute,找到就返回该对象,都找不到返回null--%>
<c:set var="person1" value="${person}" scope="session"/>
<%--依次在page,request,session,application找键为"person"的对象,找到即返回该对象,没找到返回null--%>
1.${person}<br/>
2.${sessionScope.person1}<br/>

<%--先从session范围里查找键为person2的对象,如果找不到,则创建名为person2的Person对象,将它放入session范围,scope不写默认="page"--%>
<jsp:useBean id="person2" class="test.Person" scope="session"/>
<%--依次从page,request,session,application中查找键为"person2"的对象,找到即返回该对象,并给该对象的name属性赋值“八戒”--%>
<c:set target="${person2}" property="name" value="八戒"/>
3.${person2.name}<br/>

4.<%=session.getAttribute("person2")%><br/>
5.${person2}<br/>

<%
    request.setAttribute("person3",person);
%>
<c:set target="${person3}" property="name" value="悟空"/>
6.${person3.name}<br/>

<%
    Person person4=new Person("测试",0);
%>
7.${person4}

</body>
</html>

运行结果:

1.test.Person@73d1b067
2.test.Person@73d1b067
3.八戒
4.test.Person@68779499
5.test.Person@68779499
6.悟空
7.

3.if

if标签有3个属性

test:里面放条件判断的boolean值,如果为true,则执行if标签的内容

var:存放条件判断结果的变量,该变量放入scope范围中。

scope:var变量放入的范围,默认为page。

<%@ page import="test.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>jstl标签</title>
</head>
<body>
<%
    int age=10;
    request.setAttribute("age",age);
%>
<c:if test="${age>9}" var="result" scope="session">
    <c:out value="${'10>9'}"></c:out>
</c:if>
<br/>
${sessionScope.result}
</body>
</html>

运行结果:

10>9 
true

 4.choose

if标签没有else功能,choose标签可以弥补这个缺点,它可以结when和otherwise标签。

<%@ page import="test.Person" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
    <title>jstl标签</title>
</head>
<body>
<%
    int age=4;
    request.setAttribute("age",age);
%>
<c:choose>
    <c:when test="${age>=10}">
        <c:out value="${'你到达10岁了'}"/>
    </c:when>
    <c:when test="${age<10 && age>5}">
        <c:out value="${'你大于5岁小于等于10岁'}"/>
    </c:when>
    <c:otherwise>
        <c:out value="${'你连5岁都不到!'}"/>
    </c:otherwise>
</c:choose>
</body>
</html>

运行结果:

你连5岁都不到!

 

5.forEach

forEach用来循环遍历数值或者数组或者集合。

begin:元素开始的索引

end:元素结束的索引

step:步长

var:临时存储元素的变量,放在pageScope范围中,仅在forEach标签内有效。

varStatus:循环状态的变量,放在pageScope范围中,仅在forEach标签内有效。

items:需要循环的数组或者集合。

其中varStatus有如下属性:

<%@ page import="test.Person" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="C" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>jstl标签</title>
</head>
<body>
<%
    int age=4;
    pageContext.setAttribute("age",age);
%>
<c:forEach begin="1" end="10" var="i" step="2" varStatus="status">
    ${pageScope.status.index}
    ${status.count}
    ${status.current}
    ${status.first}
    ${status.last}
    ${pageScope.i}
    <%=pageContext.getAttribute("i")%>

    <br/>
</c:forEach>
<hr/>
<%
    String[] strings=new String[]{"hello","world","iloveyou","where","are","you"};
    pageContext.setAttribute("str",strings);
%>
<C:forEach begin="1" end="10" items="${str}" var="s" varStatus="status" step="2">
    ${s}
    <br/>
</C:forEach>
<hr/>
<%
    Map map=new HashMap();
    map.put("i","have");
    map.put("a","dream");
    map.put("but","you");
    map.put("don't","know");
    request.setAttribute("myMap",map);
%>
<c:forEach items='<%=request.getAttribute("myMap")%>' var="m" >
    ${m}
    key:${m.key}
    value:${m.value}
    <br/>
</c:forEach>
</body>
</html>

运行结果:

 

 

JSTL格式化标签库

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

1.数值格式化标签

属性可参考<fmt:formatNumber>标签

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<html>
<head>
    <title>jstl标签</title>
</head>
<body>
    数值<br/>
    <fmt:formatNumber value="001234567.0543200" pattern="#.##"/><br/>
    <fmt:formatNumber value="345500" pattern="00000000.00"/><br/>
    <fmt:formatNumber value="345500" pattern="########.##"/><br/>

    货币<br/>
    <fmt:formatNumber value="345500" type="currency"/><br/>
    <fmt:formatNumber value="345500" pattern="########.##" type="currency"/><br/>

    百分数<br/>
    <fmt:formatNumber value="0.355" type="percent"/><br/>
    <fmt:formatNumber value="0.355" pattern="##.#" type="percent"/><br/>
    <fmt:formatNumber value="0.355" pattern="##.#%" type="percent"/><br/>
</body>
</html>

运行结果:

数值
1234567.05
00345500.00
345500
货币
¥345,500.00
345500
百分数
36%
0.4
35.5%

2.时间格式化标签

属性可参考<fmt:formatDate> 标签

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<head>
    <title>jstl标签</title>
</head>
<body>
<%
    Date date=new Date();
    pageContext.setAttribute("now",date);

%>
${now}<br/>
<fmt:formatDate value="${now}" type="date"/><br/>
<fmt:formatDate value="${now}" type="both" dateStyle="long" timeStyle="long"/><br/>
<fmt:formatDate value="${now}" type="both" pattern="yyyy-MM-dd HH:mm:ss"/>

</body>
</html>

运行结果:

Thu Aug 09 21:52:42 CST 2018
2018-8-9
2018年8月9日 下午09时52分42秒
2018-08-09 21:52:42

 

EL函数库

EL函数库是第三方对EL表达式的扩展,我们现在学习的EL函数库是JSTL添加的,所以要导入JSTL标签库。

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

EL函数库就是定义的一些又返回值的静态方法,然后通过EL语言来调用它们。当然,不止是JSTL可以定义EL函数,我们自己也可以定义。

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<html>
<head>
    <title>jstl标签</title>
</head>
<body>
<%
    String str="hello world";
    String[] strings={"hello","world","你好","世界"};
    List list=new ArrayList();
    list.add(1);
    list.add("hello");
    list.add("world");
    pageContext.setAttribute("list",list);
    pageContext.setAttribute("str",str);
    pageContext.setAttribute("strings",strings);

%>
<b>fn:length(str):</b>${fn:length(str)}<br/>
<b>fn:length(strings):</b>${fn:length(strings)}<br/>
<b>fn:length(list):</b>${fn:length(list)}<br/>
<b>fn:toUpperCase("HHji"):</b>${fn:toUpperCase("HHji")}<br/>
<b>fn:contains("helloAr","Ar" ):</b>${fn:contains("helloAr","Ar" )}<br/>
<b>fn:containsIgnoreCase("helloAr","ar" ):</b>${fn:containsIgnoreCase("helloAr","ar" )}<br/>
<b>fn:contains(strings, "world"):</b>${fn:contains(strings, "world")}<br/>
fn:contains(list, "hello"):${fn:contains(list, "hello")}<br/>
fn:startsWith("abcde","ab" ):${fn:startsWith("abcde","ab" )}<br/>
fn:indexOf("hello","e" ):${fn:indexOf("hello","e" )}<br/>
fn:join(strings, "-"):${fn:join(strings, "-")}<br/>
fn:replace(str, "o", "q"):${fn:replace(str, "o", "q")}<br/>
fn:split(str, " "):${fn:split(str, " ")}<br/>
fn:substring("hello world",1 ,3 ):${fn:substring("hello world",1 ,3 )}<br/>
fn:substring("hello world",1,-1 ):${fn:substring("hello world",1,-1 )}<br/>
fn:substringAfter("hello world"," " ):${fn:substringAfter("hello world"," " )}<br/>
fn:substringBefore("hello world"," " ):${fn:substringBefore("hello world"," " )}<br/>
fn:trim("   hello world   "):${fn:trim("   hello world   ")}<br/>
fn:escapeXml("<font color=red>字体</font>"):${fn:escapeXml("<font color=red>字体</font>")}<br/>
${"<font color=red>字体</font>"}:${"<font color=red>字体</font>"}<br/>

</body>
</html>

运行结果:

fn:length(str):11
fn:length(strings):4
fn:length(list):3
fn:toUpperCase("HHji"):HHJI
fn:contains("helloAr","Ar" ):true
fn:containsIgnoreCase("helloAr","ar" ):true
fn:contains(strings, "world"):false
fn:contains(list, "hello"):true
fn:startsWith("abcde","ab" ):true
fn:indexOf("hello","e" ):1
fn:join(strings, "-"):hello-world-你好-世界
fn:replace(str, "o", "q"):hellq wqrld
fn:split(str, " "):[Ljava.lang.String;@7940e5dd
fn:substring("hello world",1 ,3 ):el
fn:substring("hello world",1,-1 ):ello world
fn:substringAfter("hello world"," " ):world
fn:substringBefore("hello world"," " ):hello
fn:trim(" hello world "):hello world
fn:escapeXml("字体"):<font color=red>字体</font>
字体:字体

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值