●質問:サンプル1-1.warにおける、Tomcat6.0でのエラーに関して
WindowsXPで、j2sdk1.6とTomcat6.0でサンプル実行環境を構築しています。
1-1.warファイルを解凍し、http://localhost:8080/1-1/view/Hello.jspにアクセスしたところ、エラーが発生します。
以下にエラーログを掲載します(長いです)。
< ご注意 >
本書籍のサンプルは、「付録CD-ROMに収録されているサンプルとアプリを使うことで」動作するように書かれています。従って、サンプルやアプリを、外部から導入(アップバージョン)された場合は、正しく動作しない可能性があります。
サンプルやアプリを、外部から導入(アップバージョン)された際には、基本的にはサポート範囲外ですので、ご自分の責任においてお使いくださいますよう、くれぐれもお願いいたします。
type 例外レポート
メッセージ
説明 The server encountered an internal error () that prevented it from fulfilling this request.
例外
org.apache.jasper.JasperException:
javax.servlet.ServletException:
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
org.apache.jasper.servlet.JspServletWrapper.handleJspException
(JspServletWrapper.java:541)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
filter.EncodingFileter.doFilter(EncodingFileter.java:30)
原因
javax.servlet.ServletException:
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:850)
org.apache.jasper.runtime.PageContextImpl.handlePageException(
PageContextImpl.java:779)
org.apache.jsp.view.Hello_jsp._jspService(Hello_jsp.java:85)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
filter.EncodingFileter.doFilter(EncodingFileter.java:30)
原因
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
org.apache.struts.util.MessageResources.<clinit>(MessageResources.java:57)
org.apache.struts.taglib.html.HtmlTag.<clinit>(HtmlTag.java:48)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
java.lang.reflect.Constructor.newInstance(Unknown Source)
java.lang.Class.newInstance0(Unknown Source)
java.lang.Class.newInstance(Unknown Source)
org.apache.jasper.runtime.TagHandlerPool.get(TagHandlerPool.java:126)
org.apache.jsp.view.Hello_jsp._jspx_meth_html_005fhtml_005f0(Hello_jsp.java:97)
org.apache.jsp.view.Hello_jsp._jspService(Hello_jsp.java:78)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
filter.EncodingFileter.doFilter(EncodingFileter.java:30)
原因
java.lang.ClassNotFoundException:
org.apache.commons.logging.LogFactory
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
java.lang.ClassLoader.loadClassInternal(Unknown Source)
org.apache.struts.util.MessageResources.<clinit>(MessageResources.java:57)
org.apache.struts.taglib.html.HtmlTag.<clinit>(HtmlTag.java:48)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
java.lang.reflect.Constructor.newInstance(Unknown Source)
java.lang.Class.newInstance0(Unknown Source)
java.lang.Class.newInstance(Unknown Source)
org.apache.jasper.runtime.TagHandlerPool.get(TagHandlerPool.java:126)
org.apache.jsp.view.Hello_jsp._jspx_meth_html_005fhtml_005f0(Hello_jsp.java:97)
org.apache.jsp.view.Hello_jsp._jspService(Hello_jsp.java:78)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
filter.EncodingFileter.doFilter(EncodingFileter.java:30)
●回答:
ご質問いただいた件ですが、ログを拝見したところ、
java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
とありますのでLogFactoryクラスが見つかっていないために例外が発生している状況です。
このクラスはJakarta Commons Loggingに含まれているクラスです。
Tomcat5.0.xでは共通のものとして含まれていたようですが、5.5以降は含まれておらず上記のエラーがでます。
対応策としては
http://www.meisei-u.ac.jp/mirror/apache/dist/commons/logging/binaries/commons-logging-1.1.1-bin.zip
にアクセスいただき、対象のJarファイルが含まれているZIPファイルをダウンロードします(直接リンクになっています)。
解凍していただくといくつかのファイルが含まれていますが、そのうちのcommons-logging-1.1.1.jarファイルを配置していただいたTomcatのWARファイルに含めていただき、Tomocatを再起動することで動作が可能です。
具体的な手順としては、
(Tomcatインストールフォルダ)webapps1-1WEB-INFlib
に上記のcommons-logging-1.1.1.jarをコピーしていただくことになります。
上記内容は他のWARでも同様で、
(Tomcatインストールフォルダ)webappsx-xWEB-INFlib
に上記のcommons-logging-1.1.1.jarをコピーし、Tomocatを再起動することになります。
x-xはWARファイルの名前の拡張子のないものです。