Struts2.2にSpringを導入してサンプルを作成しましたが、同じ事をSeasar2でもやってみました。
前回作成したSeasar2アプリをベースにバージョン変更とサンプル作成を行いました。
バージョン変更
/pom.xmlを変更
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <省略> <properties> <sa-struts.version>1.0.4-sp7</sa-struts.version> <seasar2.version>2.4.45</seasar2.version> </properties> <省略> <dependencies> <省略> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-extension</artifactId> <version>${seasar2.version}</version> </dependency> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-framework</artifactId> <version>${seasar2.version}</version> </dependency> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-tiger</artifactId> <version>${seasar2.version}</version> </dependency> </dependencies> </project>
設定変更
/src/main/resources/app.diconを変更
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd"> <components> <省略> <!-- コンポーネント自動登録 --> <component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"> <property name="autoNaming"> <component class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/> </property> <initMethod name="addClassPattern"> <arg>"ap.service"</arg> <arg>".*Impl"</arg> </initMethod> </component> </components>
サンプル作成
/src/main/webapp/WEB-INF/view/index.jspを削除&作成
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>テスト</title> </head> <body> <p>サニタイズあり:${f:h(message)}</p> <p>サニタイズなし:${message}</p> </body> </html>
/src/main/java/ap/actions/IndexAction.javaを削除&作成
package ap.action; import org.seasar.framework.container.S2Container; import org.seasar.framework.container.factory.SingletonS2ContainerFactory; import org.seasar.struts.annotation.Execute; import ap.service.MessageService; /** * Index画面のActionクラス * @author 作成者名 */ public class IndexAction { /** メッセージ */ private String message; /** * Index画面の初期処理 * @return index.jsp * @throws Exception */ @Execute(validator = false) public String index() { // コンポーネント作成(MessageService) S2Container container = SingletonS2ContainerFactory.getContainer(); MessageService messageService = (MessageService) container.getComponent(MessageService.class); // メッセージ取得&設定 this.setMessage(messageService.getMessage()); return "index.jsp"; } /** * メッセージ取得 * @return message */ public String getMessage() { return message; } /** * メッセージ設定 * @param message */ public void setMessage(String message) { this.message = message; } }
/src/main/java/ap/service/MessageService.javaを作成
package ap.service; /** * messageに関する業務処理インタフェイス * @author 作成者名 */ public interface MessageService { /** * メッセージ取得 * @return メッセージ */ String getMessage(); }
/src/main/java/ap/service/impl/MessageServiceImpl.javaを作成
package ap.service.impl; import org.seasar.struts.util.MessageResourcesUtil; import ap.service.MessageService; /** * messageに関する業務処理実装クラス * @author 作成者名 */ public class MessageServiceImpl implements MessageService { /** メッセージ */ public static final String MESSAGE = "hello.message"; /** * {@inheritDoc} */ @Override public String getMessage() { return MessageResourcesUtil.getMessage(MESSAGE); } }
/src/main/resources/application.propertiesを削除
/src/main/resources/application_ja.propertiesをapplication.propertiesに変更
/src/main/resources/application.propertiesに追加
hello.message=<b>こんにちは!</b>
競合解消
org.seasar.framework.exception.JarDuplicatedException: [ESSR0102]s2-frameworkのJarファイルが複数あります。バージョン=[2.4.40, 2.4.45]
コンソールに上記のエラーが出ます。
旧バージョン(今回は2.4.40)の下記ファイルをエクスプローラー等で削除すれば解消します。
/work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp*/wtpwebapps/seasar2/WEB-INF/lib/s2-extension-2.4.40.jar /work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp*/wtpwebapps/seasar2/WEB-INF/lib/s2-framework-2.4.40.jar /work/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp*/wtpwebapps/seasar2/WEB-INF/lib/s2-tiger-2.4.40.jar
動作確認
http://localhost:8080/seasar2/
※「こんにちは!」と表示されればOK