JSTL核心标签超详细

1.JSTL介绍

JSTL(JavaServer Pages Standard Tag Library,JSP标准标签库)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。


2.JSTL的使用及分类

要使用JSTL,首先要先下载好jar包,点击这里进行下载,下载好后,导入项目的WEN-INF的lib目录下即可,当然,要在jsp中使用JSTL,还得使用@taglib标签,不过不同的分类情况不一样,下面我们来看看JSTL标签的分类。

可以分为4大类和JSTL函数

  • 核心标签
  • 格式化标签
  • SQL标签
  • XML标签
  • JSTL函数

本文主要介绍核心标签和JSTL函数。


3.五类标签的简介

核心标签:

在JSP文件开头使用如下语法

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

JSTL核心标签超详细_第1张图片

格式化标签:

在JSP文件开头使用如下语法

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

JSTL核心标签超详细_第2张图片

SQL标签:

在JSP文件开头使用如下语法

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

JSTL核心标签超详细_第3张图片

XML标签:

在JSP文件开头使用如下语法

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

JSTL核心标签超详细_第4张图片

JSTL函数:

在JSP文件开头使用如下语法

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

JSTL核心标签超详细_第5张图片

下面正式开始介绍核心标签。


4.JSTL核心标签

核心标签库共有14个标签,从功能上分为4类

  • 表达式控制标签:out,set,remove,catch
  • 流程控制标签:if,choose,when,otherwise
  • 循环标签:forEach,forTokens
  • URL操作标签:import,url,redirect,param

下面开始一个一个介绍。都配代码。

1. out标签的用法

用于在JSP中显示数据,就像<%= … >
JSTL核心标签超详细_第6张图片


<c:out value="第一个JSTL小程序">c:out>
<% 
    String name = "CodeTiger"; 
    request.setAttribute("name", name); 
%>
 
<c:out value="${name1}" default="error">c:out><br> 
 
<c:out value="<CodeTiger>" escapeXml="false">c:out><br>

输出

第一个JSTL小程序 
error

2.set标签的用法

用于保存数据
JSTL核心标签超详细_第7张图片

 
<c:set var="person1" value="CodeTiger" scope="page">c:set> 
<c:out value="${person1}">c:out><br> 
 
<c:set var="person2" scope="session">liuc:set> 
<c:out value="${person2}">c:out><br>


<c:set target="${people}" property="username" value="CodeTiger">c:set> 
<c:set target="${people}" property="address" value="NJUPT">c:set> 
<c:out value="${people.username}">c:out>   
<c:out value="${people.address}">c:out><br>

输出

CodeTiger
liu
CodeTiger   NJUPT



3.remove标签的用法

用于删除数据
JSTL核心标签超详细_第8张图片

 
<c:set var="firstName" value="xiaop">c:set> 
<c:out value="${firstName}">c:out> 
<c:set var="lastName" value="liu">c:set> 
 
<c:remove var="lastName"/> 
<c:out value="${lastName}">c:out><br>

输出

xiaop



4.catch标签的用法

用来处理产生错误的异常状况,并且将错误信息储存起来
JSTL核心标签超详细_第9张图片

 
<c:catch var="error"> 
    
    <c:set target="${Code}" property="Tiger">CodeTigerc:set> 
c:catch> 
<c:out value="${error}">c:out><br>

输出

javax.servlet.jsp.JspTagException



5.if标签的用法

与我们在一般程序中用的if一样
JSTL核心标签超详细_第10张图片

 
<form action="index.jsp" method = "post"> 
     
    <input type = "text" name = "score" value = "${param.score}"> 
    <input type = "submit" value = "提交"> 
form> 
 
<c:if test="${param.score >= 90}" var="grade" scope="session"> 
    <c:out value="恭喜,成绩优秀">c:out> 
c:if> 
<c:if test="${param.score >= 80 && param.score < 90}"> 
    <c:out value="恭喜,成绩良好">c:out> 
c:if> 
<c:out value="${sessionScope.grade}">c:out>

输出
这里写图片描述



6.choose,when,otherwise标签的用法

这三个合在一起讲,有点类似switch case default。

choose:本身只当做的父标签

when的子标签,用来判断条件是否成立

otherwise的子标签,接在标签后,当标签判断为false时被执行
JSTL核心标签超详细_第11张图片
接上面的form表单

 
<c:choose> 
    <c:when test="${param.score >= 90 && param.score <= 100}"> 
        <c:out value="优秀">c:out> 
    c:when> 
    <c:when test="${param.score >= 80 && param.score < 90}"> 
        <c:out value="良好">c:out> 
    c:when> 
    <c:when test="${param.score >= 70 && param.score < 80}"> 
        <c:out value="中等">c:out> c:when> 
    <c:when test="${param.score >= 60 && param.score < 70}"> 
        <c:out value="及格">c:out> 
    c:when> 
    <c:when test="${param.score >= 0 && param.score < 60}"> 
        <c:out value="不及格">c:out> 
    c:when> 
    <c:otherwise> 
        <c:out value="输入的分数不合法">c:out> 
    c:otherwise> 
c:choose> 
<c:choose> 
    <c:when test="${param.score == 100}"> 
        <c:out value="您是第一名">c:out> 
    c:when> 
c:choose><br>

输出
这里写图片描述这里写图片描述



7.forEach标签的用法

基础迭代标签,接受多种集合类型
JSTL核心标签超详细_第12张图片

 
<% 
    List<String> names = new ArrayList<String>(); 
    names.add("liu"); 
    names.add("xu"); 
    names.add("Code"); 
    names.add("Tiger"); 
    request.setAttribute("names", names); 
%> 
 
<c:forEach var="name" items = "${requestScope.names}"> 
    <c:out value="${name}">c:out><br> 
c:forEach> 
<c:out value="========================">c:out><br> 
 
<c:forEach var="name" items = "${requestScope.names}" begin="1" end="3"> 
    <c:out value="${name}">c:out><br> 
c:forEach> 
<c:out value="========================">c:out><br> 
 
<c:forEach var="name" items = "${requestScope.names}" begin="1" end="3" step = "2"> 
    <c:out value="${name}">c:out><br> 
c:forEach> 
<c:out value="========================">c:out><br> 
 
<c:forEach var="name" items = "${requestScope.names}" begin="0" end="3" varStatus="n"> 
    <c:out value="${name}">c:out><br> 
    <c:out value="index:${n.index}">c:out><br> 
    <c:out value="count:${n.count}">c:out><br> 
    <c:out value="first:${n.first}">c:out><br> 
    <c:out value="last:${n.last}">c:out><br> 
    <c:out value="-----------------">c:out><br> 
c:forEach> 
<c:out value="========================">c:out><br>

输出

liu
xu
Code
Tiger
========================
xu
Code
Tiger
========================
xu
Tiger
========================
liu
index:0
count:1
first:true
last:false
-----------------
xu
index:1
count:2
first:false
last:false
-----------------
Code
index:2
count:3
first:false
last:false
-----------------
Tiger
index:3
count:4
first:false
last:true
-----------------
========================

上面的varStatus属性,有index、count、first、last这几个状态。



8.forTokens标签的用法

根据指定的分隔符来分隔内容并迭代输出
JSTL核心标签超详细_第13张图片

 
<c:forTokens items="010-12345-678" delims="-" var="num"> 
    <c:out value="${num}">c:out><br> 
c:forTokens>

输出

010
12345
678

9.import标签的用法

检索一个绝对或相对 URL,然后将其内容暴露给页面
JSTL核心标签超详细_第14张图片
该标签和的区别:只能包含同一个web应用中的文件,而可以包含其他web应用中的文件,甚至是网络上的资源。

该标签只是把URL属性中的资源加载到页面中,URL地址栏的地址不会改变。

 
<c:catch var="error1"> 
    <c:import url="http://www.codeliu.com">c:import> 
c:catch> 
<c:out value="${error1}">c:out><br> 
 
<c:catch var="error2"> 
    <c:import url="test.txt" charEncoding="gbk" scope="session" var="test">c:import> 
c:catch> 
<c:out value="${error2}">c:out> 
<c:out value="${sessionScope.test}">c:out><br> 
 
<c:catch var="error3"> 
    <c:import url="/index.jsp" context="/MyFirstJSP">c:import> 
c:catch> 
<c:out value="${error3}">c:out><br>



10.redirect,param标签的用法

redirect:重定向至一个新的URL.同时可以在url中加入指定的参数
JSTL核心标签超详细_第15张图片
param:用来给包含或重定向的页面传递参数
JSTL核心标签超详细_第16张图片

 
<c:redirect url="rec.jsp"> 
    <c:param name="username" value="liu">c:param> 
    <c:param name="password" value="123456">c:param> 
c:redirect>

该标签会使URL地址栏的地址发生改变。可通过EL表达式的param对象来获取传递的参数值。

out value="${param.username}">out>
out value="${param.password}">out>

输出

liu
123456



11.url标签的用法

使用可选的查询参数来创造一个URL
JSTL核心标签超详细_第17张图片
标签将URL格式化为一个字符串,然后存储在一个变量中。

这个标签在需要的时候会自动重写URL。

var属性用于存储格式化后的URL。

标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括中指定的参数。

 
<a href = "<c:url value = "http://www.codeliu.com"/>">这个链接通过<c:url>生成a>

输出

这个链接通过<c:url>生成

我们看看网页源代码
这里写图片描述


5.JSTL函数的使用

函数在上面已经列出来了,我就选了几个写了一下,其实和String的都差不多。不过要记得先在前面引入

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

测试以下几个函数

out value="${fn:contains('Hello world', 'Hello')}">out>
out value="${fn:contains('Hello world', 'aaaa')}">out>
out value="${fn:containsIgnoreCase('Hello world', 'hello')}">out>

输出

true
false
true



好了,大概也就说这么多了。

个人博客http://www.codeliu.com,欢迎各位志同道合的小伙伴!

你可能感兴趣的:(JavaWeb,Java学习之旅,JSTL核心标签,总结)