JSP动态网页编程技术、JSTL标签库

导读:本篇文章讲解 JSP动态网页编程技术、JSTL标签库,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、JSP基础语法

1.理解

JSP:Java Server Page SUN 公司提供的动态网页编程技术,是 Java Web 服务器端的动态资源。

Jsp 就是一个 Servlet,当我们第一次访问 Jsp 的时候,Jsp 引擎都会将这个Jsp 翻译 成一个 Servlet,这个文件存放在 Tomcat 中的 work 目录中。

​ 相比 html 而言,html 只能为用户提供静态数据,而 Jsp 技术允许在页面中嵌套 java 代码,为用户提供动态数据。

2.准备工作

1、修改JSP页面的编码
​ 选择”Window”,选择”Preferfences”,搜索”JSP”,选择”JSP Files”,设置编码为UTF-8(默认是ISO-8859-1)
2、修改模板
​ 将模板中html4修改html5

3.注释

两类三种
​ 第一类:隐式注释
​ 在浏览器中看不见的注释
​ 1.Jsp自己的注释 <%–JSP注释–%>
​ <%–JSP注释 –%>
​ 2.继承java风格的注释
​ //单行注释
​ /多行注释/
​ 第二类:显示注释
​ 在浏览中审查元素或者查看源代码可以看到的注释
​ 继承HTML风格的注释 <!–html注释–>

<!-- JSP页面中写Java代码 -->		
<%
	/*
		Java代码
	*/
	// 定义变量
	String str = "Hello";
%>		

4.Scriptlet

Scriptlet脚本小程序
所有嵌入在 HTML 代码中的 Java 程序。
​ JSP一种有三种脚本小程序:
第一种:Java脚本段,可以定义局部变量、写java语句
​ 生成的源码在编译后的Servlet类中的service方法体中
​ 格式:<% //Java代码 %>
​ <% %>
第二种:声明,可以声明全局变量、方法、类等
​ 生成的源码在编译后的Servlet类体中
​ 格式:<%! //声明 %>
​ <%! %>
第三种:输出,可以输出变量或字面量
​ 格式:<%=变量或字面量 %>
​ <%=1 %>

<!-- 第一种:Java脚本段,可以定义局部变量、写java语句等 -->		
<%
	// 定义变量
	int a = 1;
	// 定义集合
	List<String> list = new ArrayList<>();
	list.add("Hello");
	// 输出
	System.out.println(list.get(0));
	
	// 输出
	System.out.println(num);
	// 输出到浏览器
	out.print(num);
	
	List<String> list2 = null;
	
%>	

<%
 	if (1 > 0) {
%>
	<h2>哈哈哈哈哈</h2>
<%		
 	}
%>

<!-- 第二种:声明,可以声明全局变量、方法、类等  -->	
<%!
	// 声明全局变量
	int num = 100;
	// 定义方法
	// 定义类
%>
<br>
<!-- 第三种:输出,可以输出变量或字面量 -->
<%=a %>
<br>
<!-- jsp注释的内容不会被编译 -->
<%-- <%=list2.get(0) %>  --%>
	 
</body>
</html>

二、JSP的指令标签

1.page指令

格式:
​ <%@ page 属性名=“属性值” 属性名=“属性值”%>
常用属性:(多个属性之间用空格隔开)
​ language:语言,目前只有java
​ contentType:响应类型及编码格式
​ pageEncoding:页面编码格式
​ 页面的编码以contentType中的charset的值为准,若charset未设置,则以pageEncoding的属性值为准;
​ 如果pageEncoding的属性也未设置则使用默认编码ISO-8859-1。
​ import:导包。只有该属性可以在page指令中出现多次。
​ errorPage:当页面报错时,跳转的页面(与isErrorPage属性结合使用)
​ isErrorPage:是处理报错的页面,默认是false (与errorPage属性结合使用)

<%@page import="java.util.*" import="java.io.*" %>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" errorPage="error.jsp"%>

2.taglib标签

当使用到第三方标签库时需要通过 taglib 标签进行导入。

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

3.include静态包含

格式:
​ <%@ include file=“要包含的文件路径” %> 相对路径

特点:
​ 相当于将内容直接复制
​ 只会生成一个源码文件,不能有同名变量。
​ 运行效率快一点点,耦合度高,不够灵活。

<!-- 静态包含 -->
 	<%@include file="header.jsp" %>
 
 	<div style="background-color: green;height: 200px">
		<h2>我是主体!</h2>
		<%-- <%
			int a =1;
		
		%> --%>
	</div>
	
	<!-- 静态包含 -->
 	<%@include file="footer.jsp" %>

4.include动态包含

格式:
​ <jsp:include page=“要包含的页面”></jsp:include>
有参数:
​ <jsp:include page=“要包含的页面”>
​ <jsp:param value=“参数值” name=“参数名”/>
​ <jsp:param value=“参数值” name=“参数名”/>
​ </jsp:include>
​ value:参数值,可以接收表达式
​ name:参数名,字符串,不接受任何表达式
​ 取值方式:request.getparameter(“参数名”);
特点:
​ 相当于方法的调用
​ 会生成多个源码文件,可以有相同的变量名。
​ 灵活,耦合度低。
动态包含和静态包含的区别:
​ 1、静态包含相当于将内容进行直接的复制,动态包含相当于方法的调用。
​ 2、静态包含只会生成一个源码文件,而动态包含会生成多个源码文件。
​ 3、静态包含不能有同名变量,而动态包含可以有同名变量。
​ 4、静态包含不能传递参数,而动态包含可以。
​ 5、静态包含耦合度高,而动态包含耦合度低。​

注:
​ 当使用动态包含没有设置参数时,jsp:include双标签中不要有任何内容,包括空格和换行。

<%
		String str = "admin";
%>
	<!-- 动态包含 -->
	<jsp:include page="header.jsp"></jsp:include>
	<!-- 动态包含并传递参数 -->
	<jsp:include page="header.jsp">
		<jsp:param value="zhangsan" name="uname"/>
		<jsp:param value="<%=str %>" name="uname2"/>
	</jsp:include>
	
	<div style="background-color: green;height: 200px">
		<h2>我是主体!</h2>
		<%
			int a =20;
		%>
	</div>
	
	<jsp:include page="footer.jsp"></jsp:include>

三、九大内置对象

1.内置对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-afgytqVQ-1582809367948)(C:\Users\Hello Word\AppData\Roaming\Typora\typora-user-images\1582804488275.png)]

九大内置对象
四大域对象:
​ pageContext 当前JSP页面有效,跳转页面后无效
​ request 一次请求,请求转发跳转(服务端跳转)有效,重定向跳转(客户端跳转)无效
​ session 一次会话,无论是服务端跳转还是客户端,都有效;session对象销毁后失效。
​ application 整个应用,只有服务器不关闭都不会失效

	public void setAttribute(String name, Object o)		设置属性的名称及内容
	public Object getAttribute(String name)				根据属性名称取属性
	public void removeAttribute(String name)			删除指定的属性


两个输出对象
​ response 响应对象
​ out 输出对象

一个配置对象
​ config 获取配置信息

一个异常对象
​ exception 只有设置过isErrorPage=”true”的页面才能使用

一个页面对象
​ page 指代jsp页面本身

四、EL表达式

1.EL表达式

​ EL 表达式一般操作的都是域对象中的数据操作不了局部变量。(通过限域变量名获取域对象中的值。)
格式:
​ **

p

a

g

e

{限域变量名}** ​ **取值范围:** ​ page作用域:

page{pageScope.限域变量名}
​ request作用域:

r

e

q

u

e

s

t

S

c

o

p

e

.

s

e

s

s

i

o

n

{requestScope.限域变量名} ​ session作用域:

requestScope.session{sessionScope.限域变量名}
​ application作用域:${applicationScope.限域变量名}
默认取值方式:
​ EL表达式在取值时,会自动从小范围到大范围查找,找到即止;
从page->request->session->application,如果四个域范围都未找到,则返回空字符串。

<%
 	// 设置域对象
 	pageContext.setAttribute("uname", "zhangsan");
	request.setAttribute("uname", "lisi");
	session.setAttribute("uname", "wangwu");
	application.setAttribute("uname", "zhaoliu");
%>
<h4>EL表达式 取值</h4>
获取域对象的值:${uname } <br>
request作用域:${requestScope.uname }<br>
session作用域:${sessionScope.uname }<br>
application作用域:${applicationScope.uname }<br>

2.EL表达式使用

EL表达式取值:
1、判断域对象是否为空

e

m

p

t

y

J

a

v

a

B

e

a

n

L

i

s

t

M

a

p

{empty 限域变量名}** ​ 该域对象可以是字符串、JavaBean对象、List集合、Map等 ​ **

emptyJavaBeanListMap{!empty 限域变量名}
​ 判断域对象不为空
​ a、字符串:
​ 如果字符串是null或空字符串,返回true
​ b、JavaBean对象
​ 如果JavaBean是null,返回true
​ c、List集合
​ 如果集合为null或集合的长度不大于0,返回true
​ d、Map
​ 如果map对象为null或map没有内容,返回true

2、获取JavaBean对象
​ a、获取对象

b

{限域变量名 }** ​ b、获取类中的属性 ​ **

b{限域变量名.属性名 } 或

.

g

e

t

(

)

c

{限域变量名.get属性名() }** ​ c、获取对象中的对象的属性 ​ **

.get()c{限域变量名.属性名.属性名}
​ 注:JavaBean中属性需要提供getter方法

3、获取List集合
​ a、获取集合对象

b

{限域变量名 }** ​ b、获取集合中的元素 ​ **

b{限域变量名[下标] }
​ c、获取集合的长度

.

s

i

z

e

(

)

4

M

a

p

a

m

a

p

k

e

y

{限域变量名.size() }** ​ **4、获取Map对象** ​ a、通过map的key获取值 ​ **

.size()4Mapamapkey{限域变量名.key} 或 ${限域变量名[“key”]}

EL表达式运算:
运算:
​ ${限域变量名1 + 限域变量名2}
​ ${限域变量名1 + 字面量}
比较:
等值比较:
​ a、 ==
​ ${限域变量名1 == 限域变量名2} 或 ${限域变量名1 == 字面量}
​ b、eq
​ ${限域变量名1 eq 限域变量名2} 或 ${限域变量名1 eq 字面量}
大小比较:
​ ${限域变量名1 > 限域变量名2}
​ ${限域变量名1 >= 限域变量名2}

1

+

>

=

2

{限域变量名1 + 字面量 >= 限域变量名2} ​ ​ 注:所有的运算和比较都必须写在表达式里面,即

1+>=2{}里面

<%
// 字符串
	String str = "Hello";
	String str2 = null;
	String str3 = "";
	request.setAttribute("str", str);
	request.setAttribute("str2", str2);
	request.setAttribute("str3", str3);
	
	// JavaBean对象
	User user = new User();
	user.setUserId(1);
	user.setUserName("Lisa");
	Dog dog = new Dog();
	dog.setName("张二狗");
	dog.setAge(1);
	user.setDog(dog);
	
	User user2 = null;
	User user3 = new User();
	request.setAttribute("user", user);
	request.setAttribute("user2", user2);
	request.setAttribute("user3", user3);
		
	// List集合
	List<String> list = new ArrayList<>();
	list.add("aaa");
	list.add("bbb");
	List<User> userList = new ArrayList<>();
	userList.add(user);
	List list2 = null;
	List list3 = new ArrayList<>();
	request.setAttribute("list", list);
	request.setAttribute("list2", list2);
	request.setAttribute("list3", list3);
	request.setAttribute("userList", userList);
	
	// Map
	Map<String,Object> map = new HashMap<>();
	map.put("uname","admin");
	map.put("user",user);
	map.put("userList",userList);
	Map map2 = null;
	Map map3 = new HashMap<>();
	request.setAttribute("map", map);
	request.setAttribute("map2", map2);
	request.setAttribute("map3", map3);
 
 %>
<h4>判断域对象是否为空</h4>
字符串:${empty str }  --  ${empty str2 }  --  ${empty str3 }<br>
JavaBean对象:${empty user }  --  ${empty user2 }  --  ${empty user3 }<br>
List集合:${empty list }  --  ${empty list2 }  --  ${empty list3 }<br>
Map:${empty map }  --  ${empty map2 }  --  ${empty map3 }<br>

<h4>获取JavaBean</h4>
获取对象:${user } <br>
获取JavaBean的属性:${user.userName }  -- ${user.getUserName() } <br>
获取对象中的对象的属性:${user.dog.name }

<h4>获取List集合</h4>
获取集合对象:${list }<br>
获取集合中的元素:${list[0] }<br>
获取集合的长度:${list.size() }<br>
获取对象集合:${userList }  -- ${userList[0] } -- ${userList[0].userName }


<h4>获取Map对象</h4>
过map的key获取值:${map.uname } -- ${map["user"].userName } -- ${map.userList[0].userName }

<%
	request.setAttribute("num", 10);
	request.setAttribute("num2", 2);
	request.setAttribute("s1", "aa");
	request.setAttribute("s2", "bb");
	
%>
<h4>EL表达式运算</h4>
${num+1 } -- ${num + num2 }<br>
${num/num2 } -- ${num div num2 }<br>
${num > 1 } -- ${num+num2 > 10 }<br>
${num == num2 } -- ${s1 == s2 }  -- ${s1 == "aa" } -- ${s1 eq s2 }

五、JSTL标签库

1.标签的使用

1、将jstl所需的两个jar包拷贝到项目的WEB-INF的lib目录下
2、在需要使用标签库的页面引入对应库

<%--核心签库--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
					prefix表示该库的前缀,可以是任意字符,但一般使用"c"
<%--格式化标签库--%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

2.条件动作标签

1)if标签

​ 无主体内容
​ <c:if test=“条件” var=“限域变量名” scope=“域范围”></c:if>
​ 有主体内容
​ <c:if test=“条件” var=“限域变量名” scope=“域范围”>
​ 内容
​ /c:if>
常用属性:
test:if判断的条件,一般结合el表达式操作域对象
​ **var:**条件判断后的返回结果(true|false),存在一个域对象中
​ **scope:**域对象的范围,默认是page。可以取值page|request|session|application

注:if标签没有else标签,所以如果需要else的效果,需要写一个完全相反的条件

<%
		// 后台将数据存到request作用域中
		request.setAttribute("score", 59);
%>
<c:if test="${score > 100 }" var="flag" scope="request"></c:if>${requestScope.flag } <br>
	<c:if test="${'1' == '1'}" var="flag2" ></c:if>${flag2 }   <br>
	<c:if test="${'1==1'}" var="flag3" ></c:if>${flag3 }  <br>
	<c:if test="1==1" var="flag4" ></c:if>${flag4 }  <br>
	<%-- <c:if test="${1 == '1'}" var="flag5" ></c:if>${flag5 }   <br> --%>
	<c:if test="${score == '59'}" var="flag6" ></c:if>${flag6 }   <br>
	<hr>
	
	<c:if test="${score >1 }">
		<h2>值大于1</h2>
	</c:if>
	<c:if test="${score <= 1 }">
		<h2>值小于等于1</h2>
	</c:if>
	
	<!-- 使用JSTL的if标签 -->
	<c:if test="${score < 60 }">
		<h2>你个渣渣!</h2>
	</c:if>
	<c:if test="${score == 60 }">
		<h2>分不在高,及格就行!</h2>
	</c:if>
	
	<!-- 页面需要从作用域中将数据获取  -->
	<%
		Integer score = (Integer)request.getAttribute("score");
		// 判断分数
		if (score < 60) {
	%>
			<h2>你个渣渣!</h2>
	<%
		} else if (score == 60) {
	%>
			<h2>分不在高,及格就行!</h2>
	<%		
		}
	%>
2)choose、when、otherwise标签

choose 和 when 标签的作用与 Java 中的 switch 和 case 关键字相似。

注意点:
1、choose、otherwise标签没有属性,但是when标签必须要有test属性
​ 2、choose标签中只能嵌套otherwise和when标签,otherwise和when标签中可以嵌套其他标签

​ Illegal “c:if” after “c:otherwise” tag in “c:choose” tag.
​ 3、choose标签中至少有一个when标签,可以没有otherwise标签
​ Illegal “choose” without child “when” tag
​ 4、otherwise标签必须放在最后一个when标签之后
​ Illegal “c:when” after “c:otherwise” tag in “c:choose” tag.
​ 5、otherwise标签会在所有的when标签不执行时,执行

<%
		// 后台将数据存到request作用域中
		request.setAttribute("score", 60);
%>
<c:choose>
		<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>
3)forEach标签

forEach标签
迭代内容多次
​ <c:forEach begin=“开始数” end=“结束数” var=“限域变量名” step=“间隔数” ></c:forEach>
循环
​ <c:forEach items=“要遍历的对象(集合、map等)” var=“限域变量名” varStatus=“当前成员的相关信息”></c:forEach>

<%
	 	request.setAttribute("start", 0);
	 	request.setAttribute("end", 10);
	 %>
	 
	 <!--迭代主体内容多次  -->
	 <c:forEach var="i" begin="${start }" end="${end }" step="2">
	 	 <h4>${i }</h4>
	 </c:forEach>
	 
	 <hr>
	 
	 <%
	 	List list = new ArrayList();
		for (int i = 0; i < 10; i++) {
			list.add("A:" + i);
		}
		pageContext.setAttribute("li", list);
		
	 %>
	 <!-- 遍历集合  -->
	 <c:forEach items="${li }" var="item">
	 	${item } <br>
	 </c:forEach>

	 <%---varStatus--%>

	<h2>forEach</h2>
	 <table>
		<tr>
			<td>List内容</td>
			<td>当前下标</td>
			<td>成员总数</td>
			<td>是/否first成员</td>
			<td>是/否为last成员</td>
		</tr>
		<c:forEach items="${li}" var="item" begin="0" end="9" varStatus="idx">
			<tr>
				<td><b>${item}</b></td>
				<td>${idx.index}</td>
				<td>${idx.count }</td>
				<td>${idx.first }</td>
				<td>${idx.last}<br /></td>
			</tr>
		</c:forEach>
	</table>

<%
		// Map
		Map<String,Object> map = new HashMap<>();
		map.put("uname","admin");
		map.put("user",user);
		map.put("userList",userList);
		request.setAttribute("map", map);
	 %>
	 <!-- 迭代map  -->
	 <c:forEach items="${map }" var="item">
	 	${item.key } -- ${item.value } <br>
	 </c:forEach>

<%--九九乘法表--%>
	 <table border="1" style="border-collapse: collapse;">
		<c:forEach begin="1" end="9" var="i">
			<tr>
				<c:forEach begin="1" end="${i }" var="j">
					<td>${j } * ${i } = ${i*j }</td>
				</c:forEach>
			</tr>
		</c:forEach>
	</table>

3.迭代标签

forEach标签
迭代内容多次
<c:forEach begin="开始数" end="结束数" var="限域变量名" step="间隔数" ></c:forEach>

循环
​ <c:forEach items=“要遍历的对象(集合、map等)” var=“限域变量名” varStatus=“当前成员的相关信息”></c:forEach>

<%
	 	request.setAttribute("start", 0);
	 	request.setAttribute("end", 10);
	 %>
	 
	 <!--迭代主体内容多次  -->
	 <c:forEach var="i" begin="${start }" end="${end }" step="2">
	 	 <h4>${i }</h4>
	 </c:forEach>
	 
	 <hr>
	 
	 <%
	 	List list = new ArrayList();
		for (int i = 0; i < 10; i++) {
			list.add("A:" + i);
		}
		pageContext.setAttribute("li", list);
		
	 %>
	 <!-- 遍历集合  -->
	 <c:forEach items="${li }" var="item">
	 	${item } <br>
	 </c:forEach>

	 <%---varStatus--%>

	<h2>forEach</h2>
	 <table>
		<tr>
			<td>List内容</td>
			<td>当前下标</td>
			<td>成员总数</td>
			<td>是/否first成员</td>
			<td>是/否为last成员</td>
		</tr>
		<c:forEach items="${li}" var="item" begin="0" end="9" varStatus="idx">
			<tr>
				<td><b>${item}</b></td>
				<td>${idx.index}</td>
				<td>${idx.count }</td>
				<td>${idx.first }</td>
				<td>${idx.last}<br /></td>
			</tr>
		</c:forEach>
	</table>

<%
		// Map
		Map<String,Object> map = new HashMap<>();
		map.put("uname","admin");
		map.put("user",user);
		map.put("userList",userList);
		request.setAttribute("map", map);
	 %>
	 <!-- 迭代map  -->
	 <c:forEach items="${map }" var="item">
	 	${item.key } -- ${item.value } <br>
	 </c:forEach>

<%--九九乘法表--%>
	 <table border="1" style="border-collapse: collapse;">
		<c:forEach begin="1" end="9" var="i">
			<tr>
				<c:forEach begin="1" end="${i }" var="j">
					<td>${j } * ${i } = ${i*j }</td>
				</c:forEach>
			</tr>
		</c:forEach>
	</table>

4.格式化动作标签

1)formatNumber
将数值型的数据转换成指定格式的数值字符串
有主体内容
​ <fmt:formatNumber type=“类型” var=“限域变量名” >
​ 要格式化的数据(接收表达式)
​ </fmt:formatNumber
无主体内容
​ <fmt:formatNumber type=“percent” value=“要格式化的数据(接收表达式)” />
常用属性:
​ type:格式化后的格式
​ percent 百分比类型
​ number 数值型
​ currency 货币型
​ var:限域变量名
​ 用来接收格式化后的结果。如果设置了var属性,格式化后的结果不会输出,需要通过el表达式获取var属性的值

2)formatDate

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TYjDvpcU-1582809367951)(C:\Users\Hello Word\AppData\Roaming\Typora\typora-user-images\1582806649877.png)]

​ 将日期型的数据转换成指定格式的字符串
​ var:限域变量名
​ 用来接收格式化后的结果。如果设置了var属性,格式化后的结果不会输出,需要通过el表达式获取var属性的值
​ type:日期类型
​ date 日期型,默认
​ time 时间型
​ both 日期+时间
​ dateStyle:日期型的格式
​ timeStyle:时间型的格式
​ pattern:具体的时间格式
​ y 年
​ M 月
​ d 日
​ H 时(0-24)
​ h 时(0-12)
​ m 分
​ s 秒

3)parseNumber
​ 将指定格式的数值字符串转换成数值型数据

4)parseDate
​ 将指定格式的字符串转换成日期型的数据

<%
		request.setAttribute("num", 1);
	%>
	<h4>formatNumber</h4>
	<fmt:formatNumber type="percent" >10</fmt:formatNumber> <br>
	<fmt:formatNumber type="percent" var="num1" >10</fmt:formatNumber> ${num1 }<br>
	<fmt:formatNumber type="percent" var="num2" >${num }</fmt:formatNumber> ${num2 }<br>
	<fmt:formatNumber type="percent" value="${num }"  /><br>
	<fmt:formatNumber type="currency" value="${num }"  /><br>
	<fmt:formatNumber type="number" value="${num }"  /><br>
	<!--设置地区  -->
	<fmt:setLocale value="en_US"/>
	<fmt:formatNumber type="currency" value="${num }"  /><br>
	<hr>
	
	<%
		request.setAttribute("myDate", new Date());
	%>
	<h4>formatDate</h4>
	${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 }" dateStyle="short"/><br>
	<fmt:formatDate value="${myDate }"  type="both" dateStyle="short" timeStyle="short"/><br>
	<fmt:formatDate value="${myDate }" pattern="yyyy-MM-dd HH:mm:ss"/><br>
	<fmt:formatDate value="${myDate }" pattern="yyyy/MM/dd HH:mm:ss"/><br>
	<fmt:formatDate value="${myDate }" pattern="yyyy年MM月dd日 HH:mm:ss"/><br>
	
	<h4>parseNumer</h4>
	<fmt:parseNumber type="number">100</fmt:parseNumber> <br>
	<fmt:parseNumber type="percent">100%</fmt:parseNumber> <br>
	<%
		request.setAttribute("n", "$1.00");
	%>
	<fmt:parseNumber value="${n }" type="currency" /><br>
	
	<h4>parseDate</h4>
	<fmt:parseDate pattern="yyyy-MM-dd">2017-03-04</fmt:parseDate>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/121468.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!