求助:导入自定义标签的jar包 出现NoClassDefFoundError:JspException

biye082012 2013-10-18 05:33:06
写了个简单的自定义标签类 把类和tld文件(放在META-INF下)打成jar包 然后导入新的web工程下 访问使用自定义标签的jsp页面出现下面的错误

exception 

javax.servlet.ServletException: java.lang.NoClassDefFoundError: JspException
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:343)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.lang.NoClassDefFoundError: JspException
java.lang.Class.getDeclaredMethods0(Native Method)
java.lang.Class.privateGetDeclaredMethods(Class.java:2521)
java.lang.Class.privateGetPublicMethods(Class.java:2641)
java.lang.Class.getMethods(Class.java:1457)


多刷新几遍 就变成

exception

org.apache.jasper.JasperException: java.lang.NoClassDefFoundError: org.apache.jsp._1_jsp
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:168)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:356)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


root cause

java.lang.NoClassDefFoundError: org.apache.jsp._1_jsp
java.net.URLClassLoader$1.run(URLClassLoader.java:366)
java.net.URLClassLoader$1.run(URLClassLoader.java:355)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:354)



就这两个错误来回变

运行环境 tomcat7.0 jdk1.7
jar包是放在WEB-INF/lib下面
我把standard-1.1.2.jar和jstl.jar放在这个目录下 jsp页面使用jstl标签都正常不报错
打包命令 jar -cvf example.jar cn META-INF
或者是用eclipse打包 都报一样的错误 到底是打包错了 还是哪里错了..
昨天晚上学习时遇到的问题 一直搞到现在都没结果 求大神指点
...全文
326 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
devilhands411 2014-08-21
  • 打赏
  • 举报
回复
在打jar包的工程里必须导入servlet-api.jar和jsp-api.jar使得定义的自定义标签类通过编译,,不能带着错误去打包,否则就会报以上错误,我也是自己第二次打jar包的时候,才发现这个问题。
biye082012 2013-10-19
  • 打赏
  • 举报
回复
问题解决了 是我打jar包时 里面的类出错了 比如这个HtmlFilterTag.class 反编译看了下 里面,没有import import javax.servlet.*; 然后重新打了正确的jar包 一切正常了 谢谢楼上两位了
biye082012 2013-10-18
  • 打赏
  • 举报
回复
引用 7 楼 AA5279AA 的回复:
classnotfound 类未加载吧。 楼主在随便一个servlet的程序中添加 try { Class<?> loadClass = this.getClass().getClassLoader().loadClass("com。Test3");//这里填包名+类名 } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } 看结果,如果报异常的话就是那个类未加载或者类冲突。。
java.lang.ClassNotFoundException: cn.web.example.HtmlFilterTag.class 抛异常了 但是 我把类换成jstl的IfTag标签类 一样抛异常 java.lang.ClassNotFoundException: org.apache.taglibs.standard.tag.rt.core.IfTag.class jsp页面里面用这个标签正常 我用自定义的HtmlFilterTag标签抛的是NoClassDefFoundError 错误
失落夏天 2013-10-18
  • 打赏
  • 举报
回复
classnotfound 类未加载吧。 楼主在随便一个servlet的程序中添加 try { Class<?> loadClass = this.getClass().getClassLoader().loadClass("com。Test3");//这里填包名+类名 } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } 看结果,如果报异常的话就是那个类未加载或者类冲突。。
biye082012 2013-10-18
  • 打赏
  • 举报
回复
引用 5 楼 defonds 的回复:
那就奇怪了。 建议你按照我给你的那个链接重新搞一下。
你发的那个链接是说jsp2.0不用再配置web.xml文件吧 我看的教程上教的是jsp2.0里面的简单标签 也没配置web.xml文件 我按上边说的把tld文件单拿出来放在<appName>/WEB-INF folder下也不行 报错好像是说找不到类文件 JspServlet HttpServlet 但是这两个类在tomcat/lib下面都有
Defonds 2013-10-18
  • 打赏
  • 举报
回复
那就奇怪了。 建议你按照我给你的那个链接重新搞一下。
biye082012 2013-10-18
  • 打赏
  • 举报
回复
引用 3 楼 defonds 的回复:
你要用自定义标签吗? taglib 标签无须再在 web.xml 中声明了。把你的 TLD 文件放到 META-INF 下面,把 jar 包 丢进 WEB-INF/lib。 参考: http://wiki.metawerx.net/wiki/RemovingTaglibFromWeb.xml
我是想把写的自定义标签类打成jar包 在新工程中直接使用jar包 就像用jstl.jar一样 tld文件是放到META-INF下打包的 jar包放在新的web工程WEB-INF/lib下 我没有动web.xml
Defonds 2013-10-18
  • 打赏
  • 举报
回复
你要用自定义标签吗? taglib 标签无须再在 web.xml 中声明了。把你的 TLD 文件放到 META-INF 下面,把 jar 包 丢进 WEB-INF/lib。 参考: http://wiki.metawerx.net/wiki/RemovingTaglibFromWeb.xml
biye082012 2013-10-18
  • 打赏
  • 举报
回复
引用 1 楼 defonds 的回复:
你用的 tomcat 几?然后,把你的 jsp
<%@taglib
标签定义发一下
tomcat-7.0.12

<%@taglib uri="/example" prefix="e"%>
tld文件

<?xml version="1.0" encoding="UTF-8" ?> 
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>e</short-name>
    <uri>/example</uri>
    
    <tag>
    	<name>htmlfilter</name>
    	<tag-class>cn.web.example.HtmlFilterTag</tag-class>
    	<body-content>scriptless</body-content>
    </tag>
</taglib>

Defonds 2013-10-18
  • 打赏
  • 举报
回复
你用的 tomcat 几?然后,把你的 jsp
<%@taglib
标签定义发一下

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧