02.Struts2のライブラリとweb.xmlの設定について
概要
ここでは、Struts2で利用するライブラリについてみていきます。
基本的には、最小構成と、注意点を見てみようと思います。
早くStruts2を試してみたい方にはもどかしい記事かもしれませんが、重要な内容ですので最初にお読みいただきたいと思っています。
必要なライブラリ構成
Struts2をダウンロードすると、その struts-x.x.x.x-all.zip ファイルの中には、必要なjarファイルも同梱されています。
現状(2012/01/18)の最新バージョンは、struts-2.3.1.1-all.zip です。
ですので、1つ1つjarファイルをクラスパスに入れてみて、エラーが出なくなれば最小構成ということになるかと思います。
でもそれは面倒かと思いますので、試してみて動作したjarの構成を示します。
・asm-3.3.jar
・asm-commons-3.3.jar
・asm-tree-3.3.jar
・commons-fileupload-1.2.2.jar
・commons-io-2.0.1.jar
・commons-lang-2.5.jar
・commons-logging-1.1.1.jar
・freemarker-2.3.18.jar
・javassist-3.11.0.GA.jar
・ognl-3.0.3.jar
・struts2-convention-plugin-2.3.1.jar
・struts2-core-2.3.1.jar
・struts2-spring-plugin-2.3.1.jar
・xwork-core-2.3.1.jar
上記の構成を作って、後は、SpringとSpringで必要とするjarをインストールしていただければと思います。
以下では参考までに、自分が体験したエラーや、補足事項を記述します。
参考になればうれしいです。
補足: struts2-convention-plugin-2.3.1.jar について
conventionの英訳は、「しきたり」といった意味のようです。
実際、このJarをインストールすれば、ルールに従っていれば設定ファイルを記述しなくても動作します。
具体的には、Actionクラスのpackage上のパスや、JSPファイルのフォルダのパスをURLと合わせるというルールがあります。
※昔のStruts2で同様の機能を提供していたCodebehindプラグイン[struts2-codebehind-plugin -x.x.x.jar]は廃止されたので
インストールしないでください。
補足: SpringのJar について
昔のStruts2では、Spring2.5.6のjarに依存していました。
ですので、昔のStruts2の場合、Spring3を使用する場合でも、Spring2.5.6.jarが必要になっていました。
しかし、この記事で扱っているバージョンのStruts2では問題ありません。
依存関係を解消していますので、Spring3を使用する人はSpring3.xだけを、Spring2.5.6を使用する人はそれだけを
インストールすれば十分です。
エラー内容: NoSuchMethodError: org.objectweb.asm.ClassReader.accept
どうも、上記一覧で赤字で示したASMのフレームワークが古いと、このようなエラーが出るようです。
自分は、asmが2.2.3で上記のエラーが出ました。3.3にしたましたらエラーが出なくなりました。
spring2.0では、ASMの2.2.3を使用することになっていますので、Struts2がSpring2.5以上が使用条件になっているのはこのためと思われます。
web.xmlの設定
次にweb.xmlに記述するフィルタを見ておきます。
以降の記事でのサンプルでは、共通して以下の設定で動作させます。
<!-- Tilesリスナー(Tilesを使用する場合はコメントを外してください) -->
<!--listener>
<listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
</listener>
<context-param>
<param-name>org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG</param-name>
<param-value>/WEB-INF/tiles.xml</param-value>
</context-param-->
<!-- spring用のリスナー -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/applicationContext.xml
</param-value>
</context-param>
<!-- エンコード -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- struts2の設定 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
上記のようにSpringとStruts2の設定を記述すれば終了です。
昔のStruts2では、FilterDispatcherというクラスが使用されていましたが、これはもう廃止されています。
上記のクラスを設定してください。
これ以降の記事では、実際にStruts2とSpringを利用するサンプルや、設定方法の基礎などを見て行こうと思います。
Created Date: 2012/01/18