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