Java EE 6.0使用JSTL常见异常解决方法

来源:互联网 发布:c语言解析教程哪里有卖 编辑:程序博客网 时间:2024/06/06 12:21

很久没搞开发了,突然想玩玩就心血来潮下了个MyEclipse,版本居然已经到10了,N年前哥还是用的5.5,只能感叹时间过得太快,好了,废话不多说,直接正题。


如果创建Web Project时J2EE版本的是Java EE 6,那么JSTL库为jstl-impl.jar,MyEclipse 10并不会将它拷贝到项目的lib目录下,只是引用,若以前的项目的JSP页面中使用了jstl 1.1或jstl 1.2的版本,导入到Java EE 6环境中运行会报错,以下是我调试过程中出现的错误和解决方法,唉,本来不想写的,由于网上找了半天找不到一篇像样的文章,于是决定自己写下来:


软件环境:MyEclipse 10 + Tomcat 7


异常1、org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application

如果在JSP中已经对声明了对JSTL的引入<%@ taglib ... %>,而在页面中没用使用JSTL标签,就会出现上述错误,原因是没有在web.xml中配置JSTL的引用路径或没有在lib目录的jar中找到对JSTL的引用,早期的JSTL版本是需要在web.xml配置tld的路径的,1.2版本就不需要配置了,只需将jstl-1.2.jar拷贝到lib目录中。可以查看jstl-impl.jar中内容,包名都是org.apache.taglibs开头的,显然和jstl-1.x版本不一致,jstl-1.x所使用的包名为javax.serlvet.jsp.jstl开头,所以即使把jstl-impl.jar拷贝到lib下还是会报错,由于找不到标签库使用的类。

解决方法:下载jstl-1.2.jar或从MyEclipse 10安装目录下查找jstl-1.2.jar,将其拷贝到项目的lib目录下


异常2、javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/xxx (xxx为标签所对应的类)

如果在JSP中已经对声明了对JSTL的引入<%@ taglib ... %>并且已经在页面中使用了JSTL,就会出现上述异常2,原因也是跟异常1一样,由于Tomcat在执行JSTL时找不到标签库jar包。

解决方法:同上


不知道Java EE 6中jstl-impl.jar是如何使用的,百度谷歌了半天也没找到相关资料,下了个Java EE 6 Tutorial中也没提到,这个以后再研究了...

原创粉丝点击