【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月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
430 37
|
1月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
33 2
|
1月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
54 5
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
111 2
|
2月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
4月前
|
存储 程序员
JavaWeb之Listener监听器
JavaWeb之Listener监听器
80 0
|
5月前
|
前端开发 JavaScript 算法
javaweb(四)——过滤器与监听器
javaweb(四)——过滤器与监听器
|
5月前
|
存储 JSON 前端开发
JavaWeb中用来定义统一的响应结果的result类
JavaWeb中用来定义统一的响应结果的result类
179 0
|
5月前
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
分享JavaWeb中filter过滤器的案例妙用 - 脏话过滤/编码过滤/代码过滤
39 0
下一篇
无影云桌面