JSTL学习日记
jstl相当于c++上的stl , 当然不是说用法,只是意义上有很大的相似之处
//开始学习
//第一步 , 先下载并导入jstl的核心库(通过 <@% uri="路径" 去导入)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--通过taglib标签引入所需要的库--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>jstl的使用</title>
<%-- JSTL的使用流程
1: 下载JSTL所需要的jar包(教程很好找,园子或者csdn上应该都有)
(standard.jar)
(jstl.jar)
2: 将jar包导在web目录下的WEB-INF新建lib包,将jar包拷贝进去
3: File -> project Structure -> Modules -> Dependencies -> + 将对应的lib目录加载进来
4: 将需要使用的JSP页面通过taglib标签引入
--%>
</head>
<body>
<%--相当于 if(){}else{} , 比较类似 , 养成阅读代码的好习惯,不然你可能不清楚 <c 是什么东西--%>
<c:if test="${1 == 1}">
HELLO JSTL
</c:if>
</body>
</html>
//初识if标签
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入核心库--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>if标签</title>
<%-- if标签
格式
<c:if test="<boolean>" var="<string> scope="<string>" >
......
</c:if>
提示
无else
操作全部是域对象
若想要else的效果 , 设置两个相反的条件
常用属性
test:条件判断 , 操作域对象 , Boolean类型 (必要属性)
var: 存放在作用域中的变量名 , 接受判断结果 (可选)
scope: 限域变量名的范围: (page , request , session , application) (同上)
所需要的判断条件较少时选用if
--%>
</head>
<body>
<%
//设置数据
request.setAttribute("num",10);
%>
<c:if test="${num > 0}">
数值大于0
</c:if>
<%-- 起到else的效果--%>
<c:if test="${num <= 0}">
数值小于等于0
</c:if>
<c:if test="${num > 100}" var="flag" scope="request">
</c:if>
${flag}-----${sessionScope.flag} (输出了空字符串)
</body>
</html>
//choose标签 , 相当于switch , when标签 , 相当于case , otherwise标签 , 相当于default
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--导入库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>三种类型使用</title>
<%--
choose , when , otherwise
格式:
<c:choose>
<c:when>
....
</c:when>
<c:when>
....
</c:when>
<c:when>
....
</c:when>
</c:choose>
属性:
1:choose标签无属性
2:when必须要有test属性
3:otherwise标签无属性
提示:
1:choose标签中必须至少要有一个when.可以没有otherwise
2:choose标签中otherwise必须放在最后一个when后面
3:choose标签中只能设置when标签与otherwise标签
4:when标签和otherwise标签可以嵌套其他标签
5:otherwise标签会在所有的when标签不执行时才会执行
6:所需要的判断条件较多时使用choose标签
--%>
</head>
<body>
<%
//设置数据
request.setAttribute("score",80);
%>
<c:choose>
<c:when test="${score < 60}">
<h2>你个小渣渣</h2>
</c:when>
<c:when test="${score==60}">
<h2>分不在高,及格就行</h2>
</c:when>
<c:when test="${score>60 && score < 80}">
<h2>哎哟,不错哦</h2>
</c:when>
<c:otherwise>
<h2>你很棒棒哦</h2>
</c:otherwise>
</c:choose>
</body>
</html>
// 这部分的代码牵扯javabean 所以先新建一个User.java文件
// User.java
package org.example.po;
public class User {
private Integer id;
private String name;
private String password;
public User() {
}
public User(Integer id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
//进行forEach学习
<%@ page import="org.example.po.User" %>
<%@ page import="java.util.*" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>forEach标签</title>
</head>
<body>
<%-- forEach
格式:
<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>"
>
</c:forEach>
forEach varStatus:
属性:
index: 当前这次迭代从0开始的迭代索引
count: 当前这次迭代从1开始的迭代计数
first: 用来表明当前这次迭代是否为第一次迭代的标志
last: 用来表明当前这次迭代是否为最后一次迭代的标志
属性:
1:begin 开始数
2:end 结束数
3:step 间隔数
4:var 限域变量名 , 用来接受当前遍历的成员
5:items 要循环的数据 list 数组 map
1: 迭代内容多次:
<c:forEach begin="开始数" end="结束数" step="间隔数" var="限域变量名">
</c:forEach>
相当于Java中的for( int i= 0 ; i < 10 ; i++){}
2: 循环:
<c:forEach items="要被循环的数据" var="限域变量名">
</c:forEach>
相当于java中的foreach
for(String str : list){}
--%>
<%-- 迭代主体内容多次--%>
<c:forEach var="i" begin="1" end="10" step="2">
${i}
</c:forEach>
<hr>
<%-- 循环--%>
<%
//准备数据
List<String> list = new ArrayList<>();
for( int i = 0 ; i < 10 ; i++){
list.add("A: " + i) ;
}
pageContext.setAttribute("list", list);
%>
<c:forEach var="str" items="${list}">
${str}
</c:forEach>
<hr>
<table align="center" border="1" width="800px" style="border-collapse: collapse">
<tr>
<th>名称</th>
<th>当前成员下标</th>
<th>当前成员循环数</th>
<th>是否第一次被循环</th>
<th>是否最后一次被循环</th>
</tr>
<c:forEach items="${list}" varStatus="itemp" var="item">
<tr>
<td>${item}</td>
<td>${itemp.index}</td>
<td>${itemp.count}</td>
<td>${itemp.first}</td>
<td>${itemp.last}</td>
</tr>
</c:forEach>
</table>
<hr>
<%-- 循环对象集合 , 别忘了新建User.java否则这段代码全部都是错误的--%>
<%
//导入数据
List<User> userList = new ArrayList<User>();
User user = new User(1 , "张三" , "123456");
User user1 = new User(2 , "李四" , "123321") ;
User user2 = new User(3 , "王五","654321") ;
userList.add(user);
userList.add(user1);
userList.add(user2);
//将数据设置到作用域中
request.setAttribute("userList", userList);
%>
<%--判断集合是否为空--%>
<%-- 当集合不为空时--%>
<c:if test="${!empty userList}">
<%-- 遍历 --%>
<table align="center" width="800px" border="1" style="border-collapse: collapse">
<tr>
<th>用户编号</th>
<th>用户名称</th>
<th>用户密码</th>
<th>操作</th>
</tr>
<c:forEach items="${userList}" var="user">
<tr align="center">
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.password}</td>
<td><button>修改</button></td>
</tr>
</c:forEach>
</table>
</c:if>
<%--循环map--%>
<%
//准备数据
Map<String, Object> map = new HashMap<>();
map.put("map1","aaa") ;
map.put("map2","bbb") ;
map.put("map3","ccc") ;
pageContext.setAttribute("map", map);
%>
<c:if test="${!empty map}">
<c:forEach items="${map}" var="m">
key: ${m.key}
value ${m.value} <br>
</c:forEach>
</c:if>
</body>
</html>
<%--格式化标签学习 , 简而言之 , 就是把参数原来的数据类型转换成一种因的数据类型 , 或是把现在的数据类型转换成原来的数据类型--%>
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入格式化标签核心库--%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>格式化动作标签</title>
</head>
<body>
<%--
格式化动作标签
formatNumber
讲数值型转换成指定格式的字符串
语法格式:
<fmt: formatNumber
value="<string>"
type="<string>"
var="<string>"
scope="<string>"
/>
常用属性:
value: 要格式化的数值
type: 要格式化的类型 : number: 数值(默认) percent: 百分比 currency: 货币
var: 限域变量名 , 用来接受格式化的结果
scope: var属性的范围 (page request session application)
提示:
如果使用了var属性 , 标签不会输出结果 , 需要使用EL表达式使出结果
formatDate标签
将Date型的数据转化成指定格式的字符串
格式:
<fmt:formatDate
value="<string>"
type="<string>"
dateStyle="<string>"
timeStyle="<string>"
pattern="<string>"
timeZone="<string>"
var="<string>"
scope="<string>"
/>
属性:
value: 要格式化的日期
type: 格式化的类型
date: 日期型 年月日
time: 时间型 时分秒
both 日期时间型 年月日时分秒
dateStyle: 日期格式
timeStyle: 时间格式
pattern: 自定义模式 y M d H/h m s
timeZone:
var:
scope:
parseNumber标签
将指定格式的数值字符串转换成数值型
格式:
<fmt:parseNumber
value="<string>"
type="<string>"
var="<string>"
scope="<string>"
/>
parseDate标签
将日期型的字符串转化成date类型
格式:
<fmt:parseDate
value="<string>"
type="<string>"
dateStyle="<string>"
timeStyle="<string>"
pattern="<string>"
var="<string>"
scope="<string>"
/>
--%>
<fmt:formatNumber value="10" type="number" var="num" /> ${num} <br>
<fmt:formatNumber value="10" type="percent" /> <br>
<fmt:formatNumber value="10" type="currency" /> <br>
<%-- 设置时区 --%>
<fmt:setLocale value="en_US"/>
<fmt:formatNumber value="10" type="currency" /> <br>
<hr>
<%-- 格式化日期--%>
<%
request.setAttribute("MyDate",new Date());
%>
${MyDate}<br>
<fmt:formatDate value="${MyDate}" /> <br>
<fmt:formatDate value="${MyDate}" type="date" /> <br>
<fmt:formatDate value="${MyDate}" type="time" /> <br>
<fmt:formatDate value="${MyDate}" type="both"/> <br>
<fmt:formatDate value="${MyDate}" type="both" dateStyle="FULL"/> <br>
<fmt:formatDate value="${MyDate}" type="both" timeStyle="short"/> <br>
<fmt:formatDate value="${MyDate}" pattern="yyyy-MM-dd hh:mm:ss"/> <br>
<hr>
<fmt:parseNumber value="100"/> <br>
<fmt:parseNumber value="100" type="number" /> <br>
<fmt:parseNumber value="100%" type="percent" /> <br>
<fmt:parseNumber value="$10.00" type="currency" /> <br>
<hr>
<%--下面这两行代码本应该是显示时间的格式化代码, 但是会报500的错,显示时间不能被解析 , 恳请大佬们看看是为啥--%>
<%-- <fmt:parseDate value="2024-06-03" type="date" /> <br>--%>
<%-- <fmt:parseDate value="2024-06-03" pattern="yyyy-MM-dd" /> <br>--%>
</body>
</html>
标签:name,标签,学习,JSTL,User,var,password,public
From: https://www.cnblogs.com/123456-BX/p/18229666