今天真是被这个 JasperException 搞得焦头烂额。本来以为是个小问题,结果折腾大半天,现在总算有点眉目,赶紧记录下来,省得以后再踩坑。
我就是像往常一样写 JSP 页面嘛写完之后,放到 Tomcat 里面跑,结果就给我报个 JasperException。我当时还纳闷,心想这代码也没啥特别的,怎么就出错?
于是我第一反应就是去检查 JSP 页面的语法。毕竟这种错误很多时候都是因为一些小细节没注意到,比如标签没闭合,语句结束符少之类的。我仔仔细细地把代码从头到尾看好几遍,连个标点符号都没放过。结果,啥问题都没发现!
这就奇怪。既然语法没问题,那会是什么原因?我想起之前遇到过的一些类似的问题,很多都是因为项目依赖没弄于是我又去检查项目的依赖。
- 我先看看 * 文件(如果你用的是 Maven 的话),确保所有需要的 jar 包都正确引入。
- 然后,我又去检查项目的 lib 目录,看看是不是少什么 jar 包。
这一通检查下来,发现依赖也没问题! 这下我可真是有点懵。
没办法,只能去看看 Tomcat 的日志。日志里面通常会给出更详细的错误信息,说不定能找到点线索。我打开 Tomcat 的 logs 目录,找到 * 文件(不同版本的 Tomcat,日志文件名可能不一样),果然,在里面发现一堆错误信息!
错误信息里面提到一个什么 "absolute uri" 无法解析之类的。我一看,这好像跟 JSTL 标签库有关。我记得我的 JSP 页面里面用到 JSTL 标签,难道是这里出问题?
我赶紧去网上搜一下,发现很多人都遇到过类似的问题。有人说是 JSTL 的 jar 包版本不对,有人说是 Tomcat 的版本不对,还有人说是 * 文件配置有问题。众说纷纭,看得我头都大。
解决问题
我决定一个个试。先是换几个不同版本的 JSTL jar 包,结果都不行。然后,我又试着升级一下 Tomcat 的版本,还是不行。我开始怀疑是 * 文件的问题。
我仔细检查 * 文件,发现里面并没有什么特别的配置。不过我突然想到,之前看到有人说,如果 * 文件里面没有声明 JSTL 标签库的话,也会导致这个问题。于是我在 * 文件里面加几行配置,声明 JSTL 标签库。
改完之后,我重新启动 Tomcat,再次访问我的 JSP 页面。奇迹出现!页面正常显示! 困扰我大半天的问题,终于解决!
现在回想起来,这回遇到的 JasperException,就是一个很小的问题。但是,由于我对 JSTL 标签库的配置不太熟悉,导致走不少弯路。这也提醒我,以后在写代码的时候,一定要注意细节,并且要多解一些常用的配置。这样,才能避免踩坑,提高开发效率。
今天总算是把这个问题给搞定,希望以后别再遇到这种糟心事。
这回的经验告诉我,以后遇到问题先别慌,先去检查一些最基本的东西,比如语法、依赖之类的,然后去看日志找线索,问题总会解决的嘛