[本人实测记录]
本文涉及环境:
1、原应用部署环境:Tomcat 6.0.29/6.0.31
2、升级后环境:Tomcat 7.0.26-0
出现的故障现象:
出错提示类似:No tag "set" defined in tag library imported with prefix "c"
“点击这里查看具体错误信息”部分:
org.apache.jasper.JasperException: /index.jsp (line: 3, column: 0) No tag "set" defined in tag library imported with prefix "c" at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42) at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:408) at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:199) at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1215) at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1452) at org.apache.jasper.compiler.Parser.parse(Parser.java:138)
……
问题分析:
看起来是讲标签正确没有定义和引用。但是检查全部相关部分,该有的都有!(不可能没有。因为整个应用程序是从Tomcat 6部署后可以正常使用的Webapps目录下拷贝过来的。刚开始部署War包,出现此问题。后不直接部署War包,改为直接拷贝整个应用至新的Webapps目录下)。其中,涉及到上面报错的每一个JSP文件的头部都有类似:
<%@ taglib prefix='c' uri='http://java.sun.com/jstl/core_rt' %>
这样的的声明。很奇怪。
问题解决:
后经过仔细看Tomcat7下的几个Structs2例子,发现错在上面那句话,看来tomcat新版本采用更高版本相应包后,标签的uri发生了变化,改为下面的uri。页面可以正常显示了。
<%@ taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core' %>
照此方法,修改所有涉及到的文件,问题解决。
================================================================================================
问题解决了。但是在我的实验中,涉及到一个问题。我手头没有源程序,怎么修改好呢?JSP文件可不少啊!
嘿嘿,我用了一个比较简单的办法:
把应用整个目录,放到一个目录下,使用EMEDITOR的“在文件中查找”功能,非常简单地解决了问题。
解决这个问题花了我不少时间,不过解决问题后的感觉不错。