Javaweb-基于JSP的JSTL学习笔记

Javaweb-基于JSP的JSTL学习笔记

JSTL概述

JSP 标准标记库(JSP Standard Tag Library,JSTL)是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断数据管理格式化XML 操作以及数据库访问。既然是第三方的东西,那么就需要导包

导入标签库需要使用taglib指令!

以下是三个必学的标签库

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

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

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

CORE

out和set(重点)

out

<c:out value=”aaa”/> 输出aaa字符串常量
<c:out value=”${aaa}”/> 与${aaa}相同
<c:out value=”${aaa}” default=”xxx”/> 当${aaa}不存在时,输出xxx字符串
<%request.setAttribute("a","< script>alert('hello');< /script>");%><c:out value="${a }" default="xxx" escapeXml="false" /> 当escapeXml为false,不会转换“<”、“>”。这可能会受到JavaScript攻击

set:set标签的var、value、scope是一组

<c:set var=”a” value=”hello”/> 在pageContext中添加name为a,value为hello的数据。
<c:set var=”a” value=”hello” scope=”session”/> 在session中添加name为a,value为hello的数据。

if和choose(重点)

if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行

<c:set var="a" value="hello"/>
<c:if test="${not empty a }">
	<c:out value="${a }"/>
</c:if>

choose标签对应Java中的if/else if/else结构

when标签的test为true时,会执行这个when的内容

当所有when标签的test都为false时,才会执行otherwise标签的内容

<c:set var="score" value="${param.score }"/>
<c:choose>
	<c:when test="${score > 100 || score < 0}">错误的分数:${score }    </c:when>
	<c:when test="${score >= 90 }">A级</c:when>
	<c:when test="${score >= 80 }">B级</c:when>
	<c:when test="${score >= 70 }">C级</c:when>
	<c:when test="${score >= 60 }">D级</c:when>
	<c:otherwise>E级</c:otherwise>
</c:choose>

forEach(重点)

forEach当然就是循环标签了,下面例子中设置域变量i,初始值为1,结束值为10。即i的值从1遍历到10,包含10

<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="10">
	<c:set var="sum" value="${sum + i}" />
</c:forEach>
<c:out value="sum = ${sum }"/>

还可以使用forEach来遍历数据或集合

遍历数组

<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
	<c:out value="name: ${item }"/><br/>
</c:forEach>

遍历List

<%
	List<String> names = new ArrayList<String>();
	names.add("zhangSan");
	names.add("liSi");
	names.add("wangWu");
	names.add("zhaoLiu");
	pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }">
	<c:out value="name: ${item }"/><br/>
</c:forEach>

遍历map

<%
	Map<String,String> stu = new LinkedHashMap<String,String>();
	stu.put("number", "N_1001");
	stu.put("name", "zhangSan");
	stu.put("age", "23");
	stu.put("sex", "male");
	pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item" items="${stu }">
	<c:out value="${item.key }: ${item.value }"/><br/>
</c:forEach>

forEach标签还有一个属性:varStatus,这个属性用来指定接收“循环状态”的变量名,例如:<forEach varStatus=”vs” …/>,这时就可以使用vs这个变量来获取循环的状态了

  • current当前这次迭代的(集合中的)项
  • index当前这次迭代从 0 开始的迭代索引
  • count当前这次迭代从 1 开始的迭代计数
  • first用来表明当前这轮迭代是否为第一次迭代的标志
  • last用来表明当前这轮迭代是否为最后一次迭代的标志
<c:forEach var="item" items="${ns }" varStatus="vs">
	<c:if test="${vs.first }">第一行:</c:if>
	<c:if test="${vs.last }">最后一行:</c:if>
	<c:out value="第${vs.count }行: "/>
	<c:out value="[${vs.index }]: "/>
	<c:out value="name: ${vs.current }"/><br/>
</c:forEach>

格式化标签库fmt

<%--
  Created by IntelliJ IDEA.
  User: JunSIr
  Date: 2020/1/15
  Time: 18:56
  To change this template use File | Settings | File Templates.
--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
数字:<fmt:formatNumber value="1234567890" type="number"/><br/>
定制数字格式时,0表示一位数字,# 表示一位数字前导零和末尾零不展示<br/>
三位分割数字: <br>
数值:<fmt:formatNumber value="1234567890" type="number" pattern="#,#00.0#" /><br/>

货币:<fmt:formatNumber value="35000" type="currency" /><br/>
百分比:<fmt:formatNumber value="0.317" type="percent" /><br/>
</body>
</html>

EL函数库fn

EL函数库是由第三方对EL的扩展,我们现在学习的EL函数库就是由JSTL添加的

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

EL函数库中包含了很多对字符串的操作方法,以及对集合对象的操作。例如:${fn:length(“abc”)}会输出3,即字符串的长度。

我将常用的EL函数库关于字符串的方法列于此处

String toUpperCase(String input):

String toLowerCase(String input):

int indexOf(String input, String substring):

boolean contains(String input, String substring):

boolean containsIgnoreCase(String input, String substring):

boolean startsWith(String input, String substring):

boolean endsWith(String input, String substring):

String substring(String input, int beginIndex, int endIndex):

String substringAfter(String input, String substring):

substringBefore(String input, String substring):

String escapeXml(String input):

String trim(String input):

String replace(String input, String substringBefore, String substringAfter):

String[] split(String input, String delimiters):

int length(Object obj):

String join(String array[], String separator):

不会一一讲解,但还是把应用代码与结果给出来

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: JunSIr
  Date: 2020/1/15
  Time: 18:56
  To change this template use File | Settings | File Templates.
--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<%
String[] strs = {"a", "b","c"};
List list = new ArrayList();
list.add("a");
pageContext.setAttribute("arr", strs);
pageContext.setAttribute("list", list);
%>
${fn:length(arr) }<br/><!--3-->
${fn:length(list) }<br/><!--1-->
${fn:toLowerCase("Hello") }<br/> <!-- 变小写hello -->
${fn:toUpperCase("Hello") }<br/> <!--变大写 HELLO -->
${fn:contains("abc", "a")}<br/><!-- 是否包含true -->
${fn:containsIgnoreCase("abc", "Ab")}<br/><!-- 是否包含(忽略大小写)true -->
${fn:contains(arr, "a")}<br/><!-- true -->
${fn:containsIgnoreCase(list, "A")}<br/><!-- true -->
${fn:endsWith("Hello.java", ".java")}<br/><!-- true -->
${fn:startsWith("Hello.java", "Hell")}<br/><!-- true -->
${fn:indexOf("Hello-World", "-")}<br/><!-- 5 -->
${fn:join(arr, ";")}<br/><!-- a;b;c -->
${fn:replace("Hello-World", "-", "+")}<br/><!-- Hello+World -->
${fn:join(fn:split("a;b;c;", ";"), "-")}<br/><!-- a-b-c -->

${fn:substring("0123456789", 6, 9)}<br/><!-- 678 -->
${fn:substring("0123456789", 5, -1)}<br/><!-- 56789 -->
${fn:substringAfter("Hello-World", "-")}<br/><!-- World -->
${fn:substringBefore("Hello-World", "-")}<br/><!-- Hello -->
${fn:trim("     a b c     ")}<br/><!-- a b c -->
${fn:escapeXml("<html></html>")}<br/> <!-- <html></html> -->
</body>
</html>

在这里插入图片描述

发布了161 篇原创文章 · 获赞 93 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/JunSIrhl/article/details/103995728
今日推荐