EL表达式${}无法获取到servlet中存储的域对象该怎么办?

按CSDN的惯例,首先先描述问题情况:

在servlet中用request.getAttribute()存储的域对象,在进行转发到相应的jsp文件后,在该jsp文件里用EL表达式${域对象的键名},提示找不到该键,用Tomcat启动服务器后,提示HTTP 500异常,异常的位置就在于EL表达式获取域对象那一行。

  • Servlet的关键代码如下(简化后):
		//1.创建字符串
		String hello = "hello";
       //2.将字符串数据存入request域中
        request.setAttribute("hello",hello);
        //3..转发到list.jsp页面中展示
        request.getRequestDispatcher("/list.jsp").forward(request,response);
  • JSP的关键代码如下(简化后):
<h1>${hello}<h1>

如果这时候hello颜色变了并提示无法找到该对象,那么很遗憾地告诉现在看到这篇文章的你们,遇到了和我相同的情况。

我当时查阅了网上很多篇文章,包括CSDN里面的回答,但基本上是说必须先访问servlet文件后jsp才能获得相应的域对象,直接访问jsp会取得空值,也就是null。这么说并没有错,事实上也正是如此。但这些回答都没有解决关键问题,那就是和我出现同样问题的朋友,在jsp中编写的EL表达式中根本无法获取到servlet中传来的域对象

那么,这种情况该如何解决呢?其实很简单。主要在jsp中用jsp指令<% %>获取request域对象,再存入request中即可。

  • 修改后的jsp文件代码如下:
<% 
<%-- 取出servlet中转发来的request域对象,并返回一个object对象,这个Object对象就是转发过来的域对象 --%>
Object hello = request.getAttribute("hello");
<%-- 再存储到request域中 --%>
request.setAttribute("hello",hello);
%>
<%-- 现在EL表达式就可以正常获取到该域对象了 --%>
${hello}

写在最后的一些话:这里我借助的是JSP指令来让间接EL表达式获取域对象,众所周知,EL表达式${域对象的键名}是根据四大域对象从小到大依次查找获取的。在JSP中用<% %>指令存放的域对象EL表达式都能获取到,但从servlet中转发过来的域对象EL不知为何无法直接获取(我用的IDE是IDEA 2019.2)。
作为IT届的小白,第一次写这种类型的博客,希望能帮助到和我遇到同样问题的朋友。如果文中有错误或不当的地方,还望恳请大家多多包涵。倘若有更好的解决办法,也欢迎大家在评论区交流学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值