6.格式化日期标签 —formatDate
格式化日期标签有以下属性:
value:Date类型,指定要格式化的目标;
pattern:自定义的日期格式,例如:yyyy-MM-dd HH:mm:ss;(不考虑多种语言时可使用pattern)
var:存储格式化日期的变量名
type:值:time或date或both。控制仅出现时间,仅出现日期,或者都出现
dateStyle:指定日期显示格式,值:SHORT,MEDIUM,LONG,FULL(默认)
timeStyle:指定时间显示格式 ,值:SHORT,MEDIUM,LONG,FULL(默认)
scope:存储格式化日志变量的范围
代码示例:
<%@ page import="java.util.Date" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%--指定导入的jstl标签库;定义前缀名prefix--%> <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <html> <head> <title>Title</title> </head> <body> <%--将当前时间赋值给请求对象的自定义属性now;--%> <% request.setAttribute("now",new Date()); %> <%--value: 指定要格式化的目标, pattern:设置格式化的格式(规则)--%> <fmt:formatDate value="${now}" pattern="yyyy年MM月dd日 HH时mm分ss秒"/> </body> </html>
启动服务器,页面显示:
2022年10月19日 19时30分45秒
三、EL表达式
1.EL表达式简介
- EL表达式全称:Expression Language,即表达式语言
- EL表达式作用:代替JSP页面中表达式脚本进行数据的输出
- EL表达式比JSP的表达式脚本简洁很多
- EL表达式的格式是:${表达式} ,注:EL表达式写在jsp页面中,表达式一般是域对象的key
代码示例:
<body> <% request.setAttribute("key", "value"); %> <%-- 表达式脚本输出key1的值 --%> <%=request.getAttribute("key1")%> <%-- EL表达式输出key1的值 --%> ${key1} <%-- 表达式脚本输出null值时页面显示null EL表达式输出null值时页面什么都不显示(空串)--%> </body>
启动服务器,页面显示:
null
2.EL表达式搜索域数据的顺序
- EL表达式主要是输出域对象中的数据,当四个域对象都有同一个key的值时,EL表达式会按照四个域对象的范围从小到大进行搜索,找到就输出,与四个域对象声明的先后顺序无关
代码示例:
<body> <% //向四个域对象中都保存相同key的值 request.setAttribute("key", "request"); session.setAttribute("key", "session"); application.setAttribute("key", "application"); pageContext.setAttribute("key", "pageContext"); %> <%-- 使用EL表达式输出key的值 --%> ${key} </body>
启动服务器,页面显示:
pageContext
3.EL表达式输出Java类的属性
代码示例:
创建Person类
public class Person { private String name; private String city; public int age; //以及全参、空参构造器,各属性的getter/setter方法 }
在web目录下创建Test.jsp
<body> <% Person person = new Person(); person.setName("JayChou"); person.setCity("上海"); person.setAge(35); pageContext.setAttribute("p", person); %> <%--EL表达式中对象名.属性名不找属性的值,而是找名字对应的getXxx方法,没有此方法会报错--%> 输出Person:${ p }<br/> 输出Person的name属性:${p.name} <br> 输出Person的city属性:${p.city} <br> 输出Person的age属性:${p.city} <br> </body>
启动服务器,页面显示:
输出Person:Person{name=JayChou,city=上海,age=35} 输出Person的name属性JayChou 输出Person的city属性:上海 输出Person的age属性:35
4.EL表达式的运算
语法:${运算表达式}
EL表达式支持以下运算符:
关系运算
逻辑运算
算数运算
empty运算:empty运算可以判断一个数据是否为空,若为空,输出true,不为空,输出false
三元运算:表达式 1?表达式 2:表达式 3;表达式1为真返回表达式2的值,表达式1为假返回表达式3的值
“.”点运算和“[ ]”中括号运算:点运算可以输出某个对象的某个属性的值(getXxx或isXxx方法返回的值)
中括号运算可以输出有序集合中某个元素的值
5.EL表达式的11个隐含对象
(1) pageScope、requestScope、sessionScope、applicationScope对象的使用
<body> <% pageContext.setAttribute("key1", "pageContext1"); pageContext.setAttribute("key2", "pageContext2"); request.setAttribute("key2", "request"); session.setAttribute("key2", "session"); application.setAttribute("key2", "application"); %> <%-- 获取特定域中的属性 --%> ${ pageScope.key1 } <br> ${ applicationScope.key2 } <%-- 若直接获取key1或key2依然按照之前范围从小到大检索,无法获取指定域 --%> </body>
运行结果:
(2) pageContext对象的使用
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <%-- 先通过pageContext对象获取request、session对象,再获取以下内容 --%> <%-- 获取请求的协议:request.getScheme() 获取请求的服务器ip或域名:request.getServerName() 获取请求的服务器端口号:request.getServerPort() 获取当前工程路径:request.getContextPath() 获取请求的方式:request.getMethod() 获取客户端的ip地址:request.getRemoteHost() 获取会话的唯一标识:session.getId() --%> 1.协议: ${ pageContext.request.scheme }<br> 2.服务器ip:${ pageContext.request.serverName }<br> 3.服务器端口:${ pageContext.request.serverPort }<br> 4.获取工程路径:${ pageContext.request.contextPath }<br> 5.获取请求方法:${ pageContext.request.method }<br> 6.获取客户端ip地址:${ pageContext.request.remoteHost }<br> 7.获取会话的id编号:${ pageContext.session.id}<br> </body> </html>
运行结果:
(3) param、paramValues对象的使用
<body> 获取请求参数username的值:${ param.username } <br> 获取请求参数password的值:${ param.password } <br> 获取请求参数中第一个hobby的值:${ paramValues.hobby[0] } <br> 获取请求参数中第二个hobby的值:${ paramValues.hobby[1] } <br> <%-- 有多个同名的key时使用paramValues的索引值决定获取哪一个,使用param只可获取第一个 --%> 使用param获取hobby的值:${ param.hobby } <br> </body>
运行结果:
浏览器地址栏输入:http://localhost:8080/MyTest/Test.jsp?username=Jaychou&password=123&hobby=sing&hobby=dance
(4) header、headerValues对象的使用
<body> 输出请求头[user-Agent]的值:${ header["User-Agent"] }<br> 输出请求头中第一个[user-Agent]的值:${ headerValues["User-Agent"][0] }<br> </body>
(5) cookie对象的使用
<body> 获取Cookie的名称:${ cookie.JSESSIONID.name } <br> 获取Cookie的值:${ cookie.JSESSIONID.value } <br> </body>
运行结果:
(6) initParam对象的使用
在web.xml中写参数 (修改了web.xml中内容之后,需要重启服务才可生效):
<context-param> <param-name>username</param-name> <param-value>root</param-value> </context-param> <context-param> <param-name>url</param-name> <param-value>jdbc:mysql:///test</param-value> </context-param>
test.jsp:
<body> 输出<Context-param>username的值:${ initParam.username } <br> 输出<Context-param>url的值:${ initParam.url } <br> </body>
运行结果:
后记
Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~