关于Java Servlet中无法使用${}表达式回填数据显示到浏览器页面中的解决方案

Demo介绍

制作了一个简单的登录界面login.jsp,在基本的表单里面填写数据然后点击登录,后端程序LoginAction来进行业务逻辑的编写,从数据库里根据昵称关键字查找密码与读取到的表单数据进行登录验证,登录成功则跳转至成功界面,失败则跳转至失败界面并且使用EL表达式,即${变量名}来展示登录失败的具体原因。

Bug描述

跳转到失败界面时无法展示失败的具体原因,${}表达式失效,并没有读取到回填的具体信息,而直接原样展示变量

如下图所示:

问题根源

低版本的 web.xml 中EL表达式: ${ } 该取值方式是默认关闭的,导致${}表达式失效不可用,在展示时直接被浏览器解析为一个字符串直接输出在了页面上


解决方案

方案一:修改web.xml配置文件

  •  注意这里的修改要根据不同版本的Tomcat/conf/web.xml文件中的具体版本信息来修改
  • 以我的为例,本人使用的是Tomcat 9.0.65

第一步:找到Tomcat/conf/web.xml文件,使用记事本打开(编译器打开也可以)

第二步:对照Tomcat/conf文件夹下的web.xml文件内容重新配置项目中的web.xml文件

  • 在写入新的配置代码前,需要将前面的空行全部删除,否则会报错:Xml declaration should precede all document content 

 

 第三步:重新运行Servlet进行错误的登录,来检测是否能够在浏览器上回填出具体的错误信息

可以看到,登录失败的具体原因已经成功回填到浏览器页面了!问题得到解决!!!


方案二:设置JSP页面头部page参数中设置 isELIgnored="false"

原来在低版本的JSP标准版本中,默认是忽略EL表达式的,现在的这个参数的含义是不忽略EL标签。,从而开启EL表达式的功能

  • JSP原来的头部代码
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
  • JSP修改后的头部代码
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>

若第二种方案不行,那么大概率是web版本过低导致忽略了EL表达式,即造成${}该种取值方式被默认关闭不可用。此时就要使用方案一去修改原来项目中的web.xml配置文件


参考文章

 jsp页面使用${}无法提取出变量内容

EL表达式 (详解)

Xml declaration should precede all document content——问题解决


结语

特此感谢我的朋友三金c_c 博主大晚上帮我进行远程调试,最终精准定位到web.xml文件问题!

 分享Bug解决方案,让搜到我文章的人少走弯路!Bug就此终结!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aricl.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值