2009年9月 2日

FAQ 『StrutsによるWebアプリケーションスーパーサンプル 第2版』


●質問:サンプル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インストールフォルダ)\webapps\1-1\WEB-INF\lib

に上記のcommons-logging-1.1.1.jarをコピーしていただくことになります。
 上記内容は他のWARでも同様で、

(Tomcatインストールフォルダ)\webapps\x-x\WEB-INF\lib

に上記のcommons-logging-1.1.1.jarをコピーし、Tomocatを再起動することになります。
 x-xはWARファイルの名前の拡張子のないものです。




電子書籍アプリ
Book Village
新書、文庫、学芸書、
コミック

Books Lab HD
IT書、理工書、実用書

サイエンス・アイ HD
専用ブランド本棚

















企業情報広告案内個人情報について