Jsp和JSTL
Jsp
jsp的基础语法
简介
JSP:Java Server Page SUN 公司提供的动态⽹⻚编程技术,是 Java Web 服务器端的动态资源。
它相⽐ html ⽽⾔,html 只能为⽤户提供静态数据,⽽ Jsp 技术允许在⻚⾯中嵌套 java 代码,为⽤户 提供动态数据。
相⽐ servlet ⽽⾔,servlet 很难对数据进⾏排版,⽽ jsp 除了可以⽤ java 代码产⽣动态数据的同时, 也很容易对数据进⾏排版。
不管是 JSP 还是 Servlet,虽然都可以⽤于开发动态 web 资源。但由于这 2 ⻔技术各⾃的特点,在⻓ 期的软件实践中,⼈们逐渐把 servlet 作为 web 应⽤中的控制器组件来使⽤, ⽽把 JSP 技术作为数据显 示模板来使⽤。
其实 Jsp 就是⼀个 Servlet,当我们第⼀次访问 Jsp 的时候,Jsp 引擎都会将这个 Jsp 翻译 成⼀个 Servlet,这个⽂件存放在tomcat(源码⽬录) 中的 work ⽬录中。
注释
在 JSP 中⽀持两种注释的语法操作:
-
⼀种是显示注释,这种注释是允许客户端看⻅的;
-
另⼀种是隐式注释,此种注释是客户端⽆法看⻅ 的
① 显示注释语法:从 HTML ⻛格继承⽽来,可以在客户端看见
② 隐式注释语法:从 JAVA ⻛格继承;JSP ⾃⼰的注释
jsp的三种注释方式:
1) <% // 注释,单⾏注释 /* 多⾏注释*/ %>
2)<!-- HTML⻛格的注释 -->
3)<%-- JSP注释 --%>
Scriptlet
在jsp中最重要的部分就是Scriptlet**(脚本小程序),所有嵌入在HTML代码中的Java程序**。
在jsp中一共有三种Scriptlet代码:都必须使用Scriptlet标记出来
第⼀种:<% %>: java 脚本段,可以定义局部变量、编写语句
第⼆种:<%! %>:声明,可以定义全局(成员)变量、⽅法、类
第三种:<%= %>:表达式,数据⼀个变量或具体内容
<%@ page import="com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>注释</title>
</head>
<body>
<%
//注释1,单行注释
/* 多行注释 */
%>
<!-- HTML风格的注释 -->
<%-- jsp注释--%>
<%-- 局部变量--%>
<%
String str="hello jsp";
System.out.println(str);
response.getWriter().write(str);
response.getWriter().println(str);
response.getWriter().println(str);
%>
<%-- 全局变量--%>
<%!
String string="hello servlet";
%>
<%=string%>
</body>
</html>
jsp的指令标签
使⽤包含操作,可以将⼀些重复的代码包含进来继续使⽤,从正常的⻚⾯组成来看,有时可能分为⼏ 个区域。⽽其中的⼀些区域可能是⼀直不需要改变的,改变的就其中的⼀个具体内容区域。现在有两种 ⽅法可以实现上述功能。
⽅法⼀:在每个 JSP ⻚⾯(HTML)都包含⼯具栏、头部信息、尾部信息、具体内容
⽅法⼆:将⼯具栏、头部信息、尾部信息都分成各个独⽴的⽂件,使⽤的时候直接导⼊
很明显,第⼆种⽅法⽐第⼀种更好,第⼀种会存在很多重复的代码,并且修改很不⽅便,在 JSP 中如 果要想实现包含的操作,有两种做法:静态包含、动态包含,静态包含使⽤ include 指令即可,动态包含则需要使⽤ jsp:include 动作标签。
include静态包含
<%@ include file="要包含的⽂件路径" %> <!-- 相对路径 -->
例如:
<%@include file="include.jsp" %>
或
<%@include file="include.html" %>
静态包含就是将内容进⾏了直接的替换,就好⽐程序中定义的变量⼀样,是在 servlet 引擎转译时, 就把此⽂件内容包含了进去(两个⽂件的源代码整合到⼀起, 全部放到_jspService ⽅法中),所以只 ⽣成了⼀个 servlet,所以两个⻚⾯不能有同名的变量。 运⾏效率⾼⼀点点。耦合性较⾼,不够灵活。
01-静态包含.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>静态包含</title>
</head>
<body>
<%
String str1="name";
%>
<h1>我是头部</h1>
</body>
</html>
02-静态包含.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>静态包含</title>
</head>
<body>
<%
String str="name";
%>
<%@include file="01-静态包含.jsp"%>
<h1>核心内容</h1>
<%!
String name="yang";
%>
<%@include file="03-静态包含.jsp"%>
</body>
</html>
03-静态包含.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>静态内容</title>
</head>
<body>
<h1>我是尾部</h1>
<%
String str3="name";
%>
</body>
</html>
总结:使用静态包含只生成一个servlet文件,即一个class文件,代码冗余度较高,有较多重复的代码,并且不能出现相同名称的全局变量和局部变量。
jsp每次运行后局部的变量都会在生成servlet的_jspService方法中,相当于继承HttpServlet的java文件的service方法;
运行后的生成的servlet文件截图:
include动态包含
动态包含在代码的编译阶段,包含和被包含部分是两个独⽴的部分,只有当运⾏时,才会动态包含进 来,好⽐⽅法的调⽤。
<jsp:include page="include.jsp"></jsp:include>
注意:动态包含,中间不要加任何内容,包括空格,除非确认要使用参数,否则报错!
<jsp:include page="include.html"></jsp:include>
<%
String a = "hello.jsp";
%>
<jsp:include page="<%=a %>"></jsp:include>
使用动态包含还可以通过页面之间传参
接收参数通过request.getParameter(name);
<jsp:include page="hello.jsp" flush="true">
<jsp:param name="uname" value="zhangsan"/>
</jsp:include>
hello.jsp
<!-- 接收参数 -->
<%=request.getParameter("uname")%>
注意:没有这种写法:<%@jsp:include file=“03-动态包含.jsp”%>,写了会报以下错误
JSP的四大域对象
四种属性范围
在JSP中提供了四种属性的保存范围,所谓的属性保存范围,指的就是⼀个设置的对象,可以在多少 个⻚⾯中保存并可以继续使⽤
-
page范围
pageContext : 只在⼀个⻚⾯中保存属性,跳转之后⽆效
-
request范围
request : 只在⼀次请求中保存,服务器跳转后依然有效
-
session范围
session : 在⼀次会话范围中,⽆论何种跳转都可以使⽤
-
application范围
application:在整个服务器上保存
⽅法 | 类型 | 描述 |
---|---|---|
public void setAttribute(String name, Object o) | 普通 | 设置属性的名称及内容 |
public Object getAttribute(String name) | 普通 | 根据属性名称取属性 |
public void removeAttribute(String name) | 普通 | 删除指定的属性 |
验证属性范围的特点
-
page
本⻚⾯取得,服务器端跳转()后⽆效
-
request
服务器跳转(请求与转发)有效,客户端(重定向)跳转⽆效 如果是客户端跳转,则相当于发出了两次请求,那么第⼀次的请求将不存在了;如果希望不管是客 户端还是服务器跳转,都能保存的话,就需要继续扩⼤范围。
-
session
⽆论客户端(请求与转发)还是服务器端(重定向)都可以取得,但是现在重新开启⼀个新的浏览器,则⽆法取得之前设置的 session了,因为每⼀个session只保存在当前的浏览器当中,并在相关的⻚⾯取得。 对于服务器⽽⾔,每⼀个连接到它的客户端都是⼀个session 如果想要让属性设置⼀次之后,不管是否是新的浏览器打开都能取得则可以使⽤application
-
application
所有的application属性直接保存在服务器上,所有的⽤户(每⼀个session)都可以直接访问取得 只要是通过application设置的属性,则所有的session都可以取得,表示公共的内容,但是如果此时服务器重启了,则⽆法取得了,因为关闭服务器后,所有的属性都消失了,所以需要重新设置。
EL表达式的使用
EL表达式的语法
EL(Expression Language) 是为了使 JSP 写起来更加简单。表达式语⾔的灵感来⾃于 ECMAScript 和 XPath 表达式语⾔,它提供了在 JSP 中简化表达式的⽅法,让 Jsp 的代码更加简化。
语法结构⾮常简单: ${expression}
EL 表达式⼀般操作的都是域对象中的数据,操作不了局部变量。
域对象的概念在 JSP 中⼀共有四个:pageContext, request, session, application;范围依次是, 本⻚⾯,⼀次请求, ⼀次会话,整个应⽤程序。
当需要指定从某个特定的域对象中查找数据时可以使⽤四个域对象对应的空间对象,分别是: pageScope, requestScope, sessionScope, applicationScope。
⽽ EL 默认的查找⽅式为从⼩到⼤查找,找到即可。当域对象全找完了还未找到则返回空字符串"",EL表达式不会放回null,没有找到则返回空串,这样对于客户端比较友好,然而getAttribute()没有找到返回null,所以EL表达相对于客户端是相对友好的。
设置域对象中的数据
<%
pageContext.setAttribute("uname","zhangsan"); // page作⽤域
request.setAttribute("uname","lisi"); // request作⽤域
session.setAttribute("uname","wangwu"); // session作⽤域
application.setAttribute("uname","zaholiu"); // application
%>
jsp每次运行后局部的变量都会在生成servlet的_jspService方法中,相当于继承HttpServlet的java文件的service方法;
获取域对象的值(就近原则)
<%-- 获取域对象中的数据:默认查找⽅式为从⼩到⼤,找到即⽌。若四个范围都未找到,则返回空字符
串。--%>
${uname} <!-- 输出结果为:zhangsan -->
获取指定域对象的值:
${pageScope.uname} <!-- page作⽤域 -->
${requestScope.uname} <!-- request作⽤域 -->
${sessionScope.uname} <!-- session作⽤域 -->
${applicationScope.uname} <!-- application作⽤域 -->
获取List
<%
List<String> list = new ArrayList<String>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list", list);
%>
<%--
获取List中指定下标的数据
${list[下标] }
获取集合的⻓度
${list.size()}
注:
list代表的是存在域对象中的变量名(限域变量名)
--%>
${list[1] }
<%@ page import="java.awt.event.InputEvent" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(4);
list.add(1);
//由于是局部变量,所以需要将list集合放入到域中
session.setAttribute("list1",list);
%>
${list1}<br>
${list1[0]}<br>
${list1.size()}
</body>
</html>
获取Map
<%
Map map = new HashMap();
map.put("aaa", "111");
map.put("bbb", 2222);
map.put("ccc-a", 333);
request.setAttribute("map", map);
%>
<%--
获取Map中指定值
${map["key"] } 或 ${map.key }
注:
map代表的是存在域对象中的变量名(限域变量名)
--%>
${map.aaa }
${map["bbb"]}
<%@ page import="java.util.HashMap" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
HashMap<Integer, String> map = new HashMap<>();
map.put(1,"hhh");
map.put(2,"oooo");
map.put(3,"aaaa");
map.put(4,"ppppp");
//加入到作用域中
session.setAttribute("map",map);
%>
${map.size()}
${map}
</body>
</html>
获取Java Bean对象
User.java
package com.ysh.pojo;
public class User {
private Integer id;
private String name;
private Integer age;
public User(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
03-获取User对象集合.jsp
<%@ page import="com.ysh.pojo.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>获取User对象集合</title>
</head>
<body>
<%
List<User> list=new ArrayList<>();
User user1 = new User(1, "yyyy", 19);
User user2 = new User(2, "jjj", 12);
User user3 = new User(3, "pppp", 18);
list.add(user1);
list.add(user2);
list.add(user3);
session.setAttribute("list",list);
%>
<%--判断list集合是否为空,为空返回true ,不为空返回false--%>
${empty list}
${list.size()}<br>
${list[0].id}<br>
${list[0].name}<br>
${list}
</body>
</html>
empty
<%--
empty
判断域对象是否为空。为空,返回true;不为空返回false;
${empty 限域变量名 }
判断对象是否不为空。
${!empty 限域变量名 }
--%>
EL运算
<%
request.setAttribute("a", 10);
request.setAttribute("b", 2);
request.setAttribute("c", "aa");
request.setAttribute("d", "bb");
%>
等值判断
<%--
⽐较两个值是否相等,返回true或false
== 或 eq
--%>
${a == b }
${c == d }
${c eq d }
${a == 5 }
${c == 'aa' }
算术运算
<%--
加法: +
减法: -
乘法: *
除法: / 或 div
--%>
${a + b }
${a / b } 或 ${a div b }
大小比较
<%--
⼤于:>
⼩于:<
⼤于等于:>=
⼩于等于:<=
--%>
${a > b}
${a + 1 > 10 }
${a + b >= 10 }
${a > b && b > 5 }
${a + b > 10 || a - b > 5 }
JSTL
标签的使用
Java Server Pages Standard Tag Libray(JSTL):JSP 标准标签库,是⼀个定制标签类库的集合,⽤于 解决⼀些常⻅的问题,例如迭代⼀个映射或者集合、条件测试、XML 处理,甚⾄数据库和访问数据库操 作等。
在这里我们只讨论 JSTL 中最重要的标签,迭代集合以及格式化数字和⽇期⼏个标签。
为了在JSP页面使用JSTL类库,必须以下格式使用taglib指令:
<%@taglib uri="" prefix="" %>
<%--例如--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
前缀可以是任意内容,遵循规范可以使团队中由不同⼈员编写的代码更加相似;所以,建议使⽤事先设计好的前缀,一般都是使用c作为前缀,然后还需要导入两个jar包:
条件动作标签
条件动作指令⽤于处理⻚⾯的输出结果依赖于某些输⼊值的情况,在 Java 中是利⽤ if、 if…else 和 switch 语句来进⾏处理的。在 JSTL 中也有 4 个标签可以执⾏条件式动作指令:if、 choose、when 和 otherwise。
if标签
if 标签先对某个条件进⾏测试,如果该条件运算结果为 true, 则处理它的主体内容,测试结果保存在 ⼀个 Boolean 对象中,并创建⼀个限域变量来引⽤ Boolean 对象。可以利⽤ var 属性设置限域变量 名,利⽤ scope 属性来指定其作⽤范围。
语法格式
<c:if test="<boolean>" var="<string>" scope="<string>">
...
</c:if>
属性
if 标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
var | ⽤于存储条件结果的变量(限域变量名) | 否 | 无 |
scope | var属性的作⽤域 可取值:page|request|session|application | 否 | page |
实例:
<%@ 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>
<%
request.setAttribute("flag",true); //true
request.setAttribute("msg",1); //如果直接用msg作判断会报错,所以整型需要配合条件表达式
request.setAttribute("str","true"); //相当于true
request.setAttribute("string","dkdd"); //相当于true
request.setAttribute("string01","false");//相当于false
%>
<c:if test="${flag}">
<p>结果集1为true</p>
</c:if>
<c:if test="${msg<0}">
<p>结果集2为true</p>
</c:if>
<c:if test="${str}">
<p>结果集3为true</p>
</c:if>
<c:if test="${flag}">
<p>结果集4为true</p>
</c:if>
<c:if test="${string01}">
<p>结果集5为true</p>
</c:if>
</body>
</html>
运行结果:
注: JSTL中没有else标签,为了模拟 else 的情景,需要使⽤两个 if 标签,并且这两个标签为相反的条 件。
choose、when 和otherwise标签
choose 和 when 标签的作⽤与 Java 中的 switch 和 case 关键字相似,⽤于在众多选项中做出选择。 也就是说:他们为相互排斥的条件式执⾏提供相关内容。
switch语句中有case,⽽choose标签中对应有when,switch语句中有default,⽽choose标签中有 otherwise。
语法格式
<c:choose>
<c:when test="<boolean>">
...
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
属性
- choose标签没有属性;
- when标签只有一个test属性;
- otherwise标签没有属性;
示例
<%@ 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>
<%
request.setAttribute("score",90);
%>
<c:choose>
<c:when test="${score>=90}">
优秀
</c:when>
<c:when test="${score>=80&&score<90}">
良好
</c:when>
<c:when test="${score>=70&&score<80}">
中等
</c:when>
<c:when test="${score>=60&&score<70}">
及格
</c:when>
<c:otherwise>
不及格
</c:otherwise>
</c:choose>
</body>
</html>
注意点:
- choose标签和otherwise标签没有属性,⽽when标签必须设置test属性
- choose标签中必须有⾄少⼀个when标签,可以没有otherwise标签
- otherwise标签必须放在最后⼀个when标签之后
- choose标签中只能有when标签和otherwise标签,when标签和otherwise标签可以嵌套其他标签
- otherwise标签在所有的when标签不执⾏的情况下才会执⾏
迭代标签
forEach 是将⼀个主体内容迭代多次,或者迭代⼀个对象集合。可以迭代的对象包括所有的 java.util.Collection 和 java.util.Map 接⼝的实现,以及对象或者基本类型的数组。他还可 以迭代 java.util.Iterator 和 java.util.Enumeration,但不能在多个动作指令中使⽤ Iterator 或者 Enumeration, 因为 Iterator 或者 Enumeration 都不能重置(reset)。 各属性含义如下:
forEach标签
语法格式:
<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
</c:forEach>
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
items | 要被循环的数据 | 否 | ⽆ |
begin | 开始的元素(0=第⼀个元素,1=第⼆个元素) | 否 | 0 |
end | 最后⼀个元素(0=第⼀个元素,1=第⼆个元素) | 否 | Last element |
step | 每⼀次迭代的步⻓ | 否 | 1 |
var | 代表当前条⽬的变量名称 | 否 | ⽆ |
varStatus | 代表循环状态的变量名称 | 否 | ⽆ |
forEach varStatus属性
- index: 当前这次迭代从 0 开始的迭代索引 ;
- count: 当前这次迭代从 1 开始的迭代计数 ;
- first: ⽤来表明当前这轮迭代是否为第⼀次迭代的标志 ,返回的是一个boolean类型的数据;
- last: ⽤来表明当前这轮迭代是否为最后⼀次迭代的标志 ,返回的是一个boolean类型的数据;
- current:用来表示当前元素,即遍历中的当前元素,如果items中没有赋予值则表示当前遍历的下标位置,比如我当前遍历的泛型为User的集合中元素,使用该属性表示当前遍历的User对象;
- end:用来表示最后一次结束迭代位置;
- begin:用来表示第一个开始的迭代位置;
varStatus中的这些属性都是用来表示在循环中的某个状态,即处于循环中的哪次循环;
<c:forEach items="被循环的集合" var="限域变量名" varStatus="当前成员对象的相关信息">
</c:forEach>
相当于java的foreach循环:
for(String str : list) {
}
示例:
01-forEach的基本使用.jsp
<%@ page import="com.ysh.pojo.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>forEach的使用</title>
</head>
<body>
<%-- 首先对集合中插入数据--%>
<%
List<User> list=new ArrayList<>();
User user1 = new User(1, "yyyy", 19);
User user2 = new User(2, "jjj", 12);
User user3 = new User(3, "pppp", 18);
list.add(user1);
list.add(user2);
list.add(user3);
session.setAttribute("list",list);
%>
<%--判断集合是否为空,为空不生成表格--%>
<%--<c:if test="${empty list}"></c:if>--%>
<c:if test="${list.size()>0&&list!=null}">
<%--创建表格--%>
<table width="600px" border="5px" align="center" style="border-collapse:collapse;">
<tr>
<th>学号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<c:forEach begin="1" items="${list}" end="10" var="item" varStatus="stu" >
<tr align="center">
<td>${item.id}</td>
<td>${item.name}</td>
<td>${item.age}</td>
</tr>
</c:forEach>
</table>
</c:if>
</body>
</html>
02-forEach的基本使用.jsp
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>forEach的基本使用</title>
</head>
<body>
<c:forEach begin="0" step="2" end="10" varStatus="statu" var="i">
${statu.begin}<br>
${statu.first}<br>
${statu.index}<br>
${statu.count}<br>
${statu.current}<br>
${statu.last}<br>
${statu.end}<br>
<p>--------------------</p>
</c:forEach>
</body>
</html>
格式化动作标签
JSTL 提供了格式化和解析数字和⽇期的标签,我们讨论⾥⾯有:formatNumber、formatDate、 parseNumber及parseDate。
formatNumber标签
formatNumber标签⽤于格式化数字,百分⽐,货币。该标签⽤指定的格式或精度来格式化数字。 (将数值型数据转换成指定格式的字符串类型。)
语法格式
<fmt:formatNumber
value="<string>"
type="<string>"
var="<string>"
scope="<string>"/>
属性
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 要显示的数字 | 是 | ⽆ |
type | NUMBER,CURRENCY,或 PERCENT类型 | 否 | Number |
var | 存储格式化数字的变量 | 否 | Print to page |
scope | var属性的作⽤域 | 否 | page |
注意:
- 如果设置了var属性,则格式化后的结果不会输出,需要通过el表达式获取var对应的限域变量名 ;
- 默认的类型(type)的取值为number。可取值:number数值型、percent百分⽐类型、 currency货币型 ;
示例:
<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>
formatDate标签
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 | 否 | date |
dateStyle | FULL, LONG, MEDIUM, SHORT, 或 DEFAULT | 否 | default |
timeStyle | FULL, LONG, MEDIUM, SHORT, 或 DEFAULT | 否 | default |
pattern | ⾃定义格式模式 | 否 | ⽆ |
timeZone | 显示⽇期的时区 | 否 | 默认时区 |
var | 存储格式化⽇期的变量名 | 否 | 显示在⻚⾯ |
scope | 存储格式化⽇志变量的范围 | 否 | ⻚⾯ |
标签格式模式
示例
<%
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" dateStyle="long"/><br/>
<fmt:formatDate value="${myDate }" type="both" dateStyle="short"/><br/>
<fmt:formatDate value="${myDate }" type="both" timeStyle="full"/><br/>
<fmt:formatDate value="${myDate }" type="both" timeStyle="long"/><br/>
<fmt:formatDate value="${myDate }" pattern="HH:mm yyyy/MM/dd"/><br/>
parseNumber标签
parseNumber标签⽤来解析数字,百分数,货币。(parseNumber 标签可以将数字、货币或百分⽐ 类型的字符串转换成数值型。)
语法格式
<fmt:parseNumber
value="<string>"
type="<string>"
var="<string>"
scope="<string>"/>
属性
示例:
<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>
parseDate标签
parseDate标签⽤于解析⽇期。(将指定格式的字符串转换成Date类型。)
语法格式
<fmt:parseDate
value="<string>"
type="<string>"
dateStyle="<string>"
timeStyle="<string>"
pattern="<string>"
var="<string>"
scope="<string>"/>
属性
示例:
<fmt:parseDate value="2020-01-06" type="date" /> <br>
<fmt:parseDate value="2020/01/06" pattern="yyyy/MM/dd" /> <br>
long"/>
<fmt:formatDate value="${myDate }" pattern=“HH:mm yyyy/MM/dd”/>
#### parseNumber标签
parseNumber标签⽤来解析数字,百分数,货币。(parseNumber 标签可以将数字、货币或百分⽐ 类型的字符串转换成数值型。)
##### 语法格式
```jsp
<fmt:parseNumber
value="<string>"
type="<string>"
var="<string>"
scope="<string>"/>
属性
[外链图片转存中…(img-IEQWv2nw-1606137136145)]
示例:
<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>
parseDate标签
parseDate标签⽤于解析⽇期。(将指定格式的字符串转换成Date类型。)
语法格式
<fmt:parseDate
value="<string>"
type="<string>"
dateStyle="<string>"
timeStyle="<string>"
pattern="<string>"
var="<string>"
scope="<string>"/>
属性
示例:
<fmt:parseDate value="2020-01-06" type="date" /> <br>
<fmt:parseDate value="2020/01/06" pattern="yyyy/MM/dd" /> <br>