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
