EL表达式的隐式对象_动力节点Java学院整理

作者:fjdingsd 时间:2022-10-13 06:04:01 

在使用EL时,其实EL是先看标识符是否是其隐式对象之一,如果不是,才从四个域(page、request、session、application)中顺序搜索(使用pageContext.findAttribute方法)。

EL总共有如下隐式对象:

EL表达式的隐式对象_动力节点Java学院整理

而这里,EL和JSP一样拥有pageContext对象,通过在EL中使用pageContext对象,能获取JSP中其它几个隐式对象,然后再获得这些对象中的属性。例如获取当前web工程的名称的经典EL表达式:${ pageContext.request.contextPath },就是由pageContext先获取request对象(因为在JSP的API中,我们可以看到pageContext有getRequest方法),获取到request对象后,因为request中含有getContextPath方法,因此我们还可以获得request对象中contextPath属性的值。

pageScope、requestScope、sessionScope、applicationScope这四个EL隐式对象分别代表了各自域中的Map对象(每个域以关键字来保存数据或对象,肯定是使用Map集合),这Map对象保存了存在这些域中的键值对。通过EL表达式和这些隐式对象,我们可以直接从指定的域中获取存储的数据。

例1:


<%
     User u = new User();
     u.setUsername("fjdingsd");
     session.setAttribute("user", u);
  %>
欢迎您:${sessionScope.user.username}

在浏览器中观察:

EL表达式的隐式对象_动力节点Java学院整理

对于用户登录这样的案例来说,我们检查用户是否登录肯定只需要从session域中查询,这样使用EL表达式的sessionScope隐式对象就足够了。

param隐式对象:表示所有请求参数的Map集合对象。例如表单提交,那么在请求参数中的数据就以键值对存储在param对象所代表的Map集合中,下面的例子我以get方式来替代post方式来模拟表单请求参数:

例2:


${param.username}

在地址栏上添加URL参数,可以看到:

EL表达式的隐式对象_动力节点Java学院整理

使用param隐式对象同样也能作为数据回显功能,在以前JSP页面提交的表单如果想做出数据回显功能,必须创建一个form的bean对象,当表单校验失败时,重新将这个bean对象通过转发(forward)传回JSP页面再取出。而使用param对象,不需要新建form的bean对象,只需要在表单校验失败时转发回表单所在的JSP页面,通过param对象就可以从请求中取出之前的表单数据。

例3:表单验证失败的数据回显demo

在JSP页面beantag.jsp中:


<form action="${pageContext.request.contextPath}/servlet/FormHandler" method="post">
用户名 <input type="text" name="username" value="${param.username}" />
<input type="submit" value="提交" >
</form>

在处理表单的Servlet中:


//省略表单验证过程,验证失败重新转发到表单页面
request.getRequestDispatcher("/beantag.jsp").forward(request, response);

刚进入表单注册页面:

EL表达式的隐式对象_动力节点Java学院整理

EL表达式的隐式对象_动力节点Java学院整理

假设表单验证失败,则转发请求到表单注册页面,并回显数据:

EL表达式的隐式对象_动力节点Java学院整理

 paramValues隐式对象:也是表示一个保存所有的请求参数的Map集合对象,但是paramValues对象和param对象的区别是,对任何一个参数,paramValues都是以字符串数组(String[])作为保存数据的类型,因此paramValues对象适合在有同名参数的情况下使用。

例4:


${paramValues.name[0]}

浏览器中观察:

EL表达式的隐式对象_动力节点Java学院整理

例5:


${paramValues.name[1]}

浏览器中观察:

EL表达式的隐式对象_动力节点Java学院整理

header隐式对象:表示一个保存了该JSP页面发出请求的请求头字段的Map集合对象。

注意:这个对象只能获取请求头字段的信息,不能获取响应头字段的信息。另外如果头字段中含有小横线的”-”,例如”Accept-Encoding”,则要使用中括号加引号的EL取数据形式,例如 ${ header[‘accept-encoding'] }。

例6:


${header.connection}

在浏览器中观察:

EL表达式的隐式对象_动力节点Java学院整理

例7:


${header['accept-encoding']}

在浏览器中观察:

EL表达式的隐式对象_动力节点Java学院整理

headerValues隐式对象功能类似于header隐式对象,但以字符串数组封装每个保存的请求头字段信息,这点跟paramValues隐式对象是一样的。     

cookie隐式对象:表示一个保存了该请求中所有的Cookie的Map集合对象。

假设在请求中有一个cookie,cookie的键值对为:


JSESSIONID=E9546AE9C86FB722BDBD7AF947157379

例8:


${cookie.JSESSIONID}

在浏览器中观察:

EL表达式的隐式对象_动力节点Java学院整理

可以看到,cookie隐式对象的名称(cookie)是Map集合的名称,而在这个Map集合中,有一个键值对的key命名为JSESSIONID,而通过${cookie.JSESSIONID}获取到的是一个Cookie对象,那么我们如何获取该Cookie的值呢?

之前说过EL表达式都是通过对象的具有的属性来获取属性值,能被称为属性的都有getXXX方法,而Cookie正是具有getName()方法和getValue()方法,因此在EL表达式中获取了Cookie对象后可以再获取这两个属性:

例9:


${cookie.JSESSIONID.name} <br>
${cookie.JSESSIONID.value}  <br>

在浏览器中观察:

EL表达式的隐式对象_动力节点Java学院整理

initParam隐式对象:表示一个保存了所有web应用初始化参数(context-param)的Map集合对象。

<context-param>标签用于配置全局性的web参数,在Servlet中可以使用 ServletContext.getInitParameter方法获取指定参数的值。

而在JSP页面中,我们可以同EL表达式的initParam方法来获取为web应用配置的全局性参数。

例10:

在web.xml文件中配置:


<context-param>

<param-name>username</param-name>

<param-value>fjdingsd</param-value>

</context-param>

在JSP页面中:


${initParam.username }

在浏览器中观察:

EL表达式的隐式对象_动力节点Java学院整理

标签:el,隐式对象
0
投稿

猜你喜欢

  • java中Swing会奔跑的线程侠

    2021-12-14 23:47:36
  • java 动态 代理的方法总结

    2023-08-25 04:00:33
  • C#中怎样从指定字符串中查找并替换字符串?

    2023-09-30 14:26:24
  • MFC程序设计常用技巧汇总

    2023-11-02 20:37:12
  • SpringMVC 域对象共享数据的实现示例

    2021-07-18 15:45:57
  • spring mvc中@PathVariable / 带斜杠方式获取

    2022-09-15 04:47:27
  • SpringBoot整合screw实现数据库文档自动生成的示例代码

    2023-11-29 05:30:15
  • java简易小游戏制作代码

    2023-11-23 19:49:38
  • 如何写好一个Spring组件的实现步骤

    2023-01-08 20:24:12
  • 全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制

    2021-06-25 08:48:48
  • java导出数据库的全部表到excel

    2023-11-25 09:38:33
  • 详解java中float与double的区别

    2021-09-12 11:04:47
  • maven setting.xml文件配置禅定之旅

    2023-01-08 12:07:19
  • Springmvc加ajax实现上传文件并页面局部刷新

    2023-07-31 09:26:47
  • Java数据结构BFS广搜法解决迷宫问题

    2023-12-03 16:04:33
  • Java设计模式之访问者模式使用场景及代码示例

    2021-06-27 13:34:25
  • java设计模式学习之工厂方法模式

    2023-10-12 17:19:04
  • Android客户端与服务端数据加密传输方案详解

    2023-07-14 13:55:37
  • java中Cookie被禁用后Session追踪问题

    2023-10-17 13:44:32
  • 一篇文章轻松搞懂Java中的自旋锁

    2023-06-29 00:00:36
  • asp之家 软件编程 m.aspxhome.com