【JavaWeb】之JSTL & EL表达式(下)

简介: 【JavaWeb】之JSTL & EL表达式(下)

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个隐含对象

ed63689a50e64346a5bfd693287bf01c.png


(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>

运行结果:


6b8927e903454f0e989441c167ceccf0.png


(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>

运行结果:

8da924800bbc450b903cc22608e12e15.png

(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

7705a90da5f34e8785d9d949154e8be8.png


(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>

运行结果:

fbd8d78a1fd54fdeba57373843506846.png


(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>
    输出&lt;Context-param&gt;username的值:${ initParam.username } <br>
    输出&lt;Context-param&gt;url的值:${ initParam.url } <br>
</body>

运行结果:

dab932f0bfcf4ec39a12de521d60c067.png


后记


Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~

相关文章
|
2月前
|
Web App开发 SQL Java
javaweb实现分页(二)
javaweb实现分页(二)
19 1
|
2月前
|
SQL 关系型数据库 MySQL
javaweb实现分页查询(一)
javaweb实现分页查询(一)
20 0
|
2月前
|
SQL 关系型数据库 MySQL
javaweb中实现分页,持续更新……
javaweb中实现分页,持续更新……
19 1
|
2月前
|
Java Spring 容器
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
|
2月前
JavaWeb 开发之 ServletContext 的和使用
JavaWeb 开发之 ServletContext 的和使用
23 1
|
2月前
|
SQL 前端开发 Java
Java后端进阶之路: JavaWeb(四)
Java后端进阶之路: JavaWeb
35 1
|
XML SQL Java
Java后端进阶之路: JavaWeb(三)
Java后端进阶之路: JavaWeb
34 1
|
3月前
|
设计模式 XML 前端开发
JavaWeb 会话_过滤_监听器
JavaWeb 会话_过滤_监听器
28 0
|
4月前
|
SQL JSON 前端开发
JavaWeb:商品管理系统(Vue版)
JavaWeb商品管理系统是一个使用Java语言开发的,用于管理商品信息的Web应用程序。它提供了一套完整的功能,包括商品的增加、删除、修改和查询等操作。
52 2
JavaWeb:商品管理系统(Vue版)
|
4月前
|
Java 关系型数据库 MySQL