トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

SAStruts

SAStruts


基本形

sastruts_test.zip(505)

HelloWorld

 ルートパッケージ名の設定

WEB-INF/classes/convention.dicon


<initMethod name="addRootPackageName">
  <arg>"hogehoge"</arg>
</initMethod>

でルートパッケージ名を設定

 プログラムの配置

以下赤字のファイル名、パス名を合わせることでアクション、フォーム、ビューが結びつく。

アクションクラス

WEB-INF/src/ルートパッケージ/action/HelloWorldAction.java

フォームクラス

WEB-INF/src/ルートパッケージ/form/HelloWorldForm.java

ビュー

WEB-INF/view/helloWorld/hoge.jsp
※helloWorld の最初の1文字が小文字になることに注意!

 ソース

アクションクラス

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package hogehoge.action;

import java.util.*;
import javax.annotation.Resource;
import org.seasar.struts.annotation.ActionForm;
import org.seasar.struts.annotation.Execute;

import hogehoge.form.HelloWorldForm;

public class HelloWorldAction {
  public Integer result;
  
  @ActionForm
  @Resource
  protected HelloWorldForm helloWorldForm;
  
  @Execute(validator = false)
  public String index() {
    return "hoge.jsp";
  }
}

フォームクラス

1
2
3
4
5
6
7
8
9
10
11
12
package hogehoge.form;

import org.seasar.struts.annotation.IntegerType;
import org.seasar.struts.annotation.Required;
import java.util.*;
import org.seasar.framework.beans.util.BeanMap;

public class HelloWorldForm {
  
  @Required
  public String hello;
}

ビュー

helloWorld/hoge.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@page pageEncoding="UTF-8"%>
<html>
  <head>
    <title>HelloWorld</title>
    <link rel="stylesheet" type="text/css" href="${f:url('/css/sa.css')}" />
  </head>
  <body>
    
    <h1>HelloWorld</h1>
    <html:errors/>
    <s:form>
      <html:text property="hello"/>
      = ${f:h(hello)}<br />
      <input type="submit" name="index" value="サブミット"/>
    </s:form>
  </body>
</html>

注意

IllegalAutoBindingPropertyRuntimeException

が出る場合は、クラス名とバインドする変数の名前があっていないことがある。

HelloWorldForm helloWorldForm;

のように、クラス名の最初の1文字を小文字にした変数名を使う。

デプロイの種類と設定

デプロイの設定は

env.txt

で行う。

デフォルトは、ct。
種類 動作 用途
ct リクエストのたびに、必要なコンポーネント「だけ」再デプロイ 結合テスト
ut warm deploy。アプリの変更をhotには認識せず、且つアプリ起動時に全デプロイも行わない。 単体テスト
it cool deploy。アプリ起動時に全デプロイを完了する 本番
env.txtなし it と同じ。 itと同じ

ログ

http://www.nurs.or.jp/~sug/soft/log4j/log4j2.htm
http://sastruts.seasar.org/fileReference.html
WEB-INF/classes/log4j.properties ファイルでログの出力を決める。

log4j.category.org.seasar=DEBUG, C
log4j.additivity.org.seasar=false

log4j.category.tutorial=DEBUG, C
log4j.additivity.tutorial=false

テスト用は DEBUG になっている。
リリース時は、

warn

が無難かな。

本番と開発環境

本番と開発環境で以下の設定が違うはずなので気をつける
設定 開発環境 本番環境
デプロイの種類 ct、ut it
ログ DEBUG WARN
DB接続先 テスト環境 本番環境


tomcat起動時に一回だけ処理をする

http://treeapps.hatenablog.com/entry/20110831/p1
http://blog.mikuriya.biz/archives/171

app.diconに実行するクラスを追記する

<!-- tomcat起動後の初期処理 -->
 <component name="initService" class="treeshop.s2.init.InitService">
   <initMethod name="init">
   </initMethod>
 </component>

1
2
3
4
5
public class InitService {
  public void init(){
    
  }
}

引数が欲しい場合は

<!-- tomcat起動後の初期処理 -->
 <component name="initService" class="treeshop.s2.init.InitService">
   <initMethod name="init">
      <arg>"/home/hoge/sample/property/sys.properties"</arg>
   </initMethod>
 </component>

1
2
3
4
5
public class InitService {
  public void init(String propertyFile){
    
  }
}

ファイルをダウンロードさせる

 パターン1

http://piyopiyocs.blog115.fc2.com/blog-entry-231.html

1
2
3
4
5
6
7
8
9
10
public String download() {
  try {
    ResponseUtil.download(new String(
      "サンプル.txt".getBytes("Shift_JIS"),
      "ISO-8859-1"), "こんにちは".getBytes("Shift_JIS"));
  } catch (IOException e) {
    throw new IORuntimeException(e);
  }
  return null;
}

 パターン2

http://d.hatena.ne.jp/ooharak/20080911/1221144337
ResponseUtil.download(String,InputStream[,length])を使う

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Execute(validator = false)
public String download() {
  File file = new File("c:/temp/large.txt");
  try {
    ResponseUtil.download("hello.txt", 
      new BufferedInputStream(
        new FileInputStream(file)), (int)file.length);
    //ダウンロード中のエラーは
  } catch (IORuntimeException ire) {
    //あえて無視
  } catch (IOException e) {
    throw new IORuntimeException(e);
  }
  return null;
}

 パターン3

http://piyopiyocs.blog115.fc2.com/blog-entry-231.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/** HTTPレスポンス */
@Resource
protected HttpServletResponse response;

(省略)

/**
* CSVファイル出力
* 
*/
private void ouputCsv(){
  try{
    //---------------------------
    // HTTPヘッダ出力
    //---------------------------
    response.setContentType("application/octet-stream");
    response.setHeader("Content-disposition",
      "attachment; filename="hoge.csv");
      
      //---------------------------
      // CSV出力
      //---------------------------
      PrintWriter out = new PrintWriter(
        new OutputStreamWriter(response.getOutputStream(), 
          "Shift_JIS"));
      
      for(i=0; i < 100000; i++) {
        out.println("a,b,c," + i);
      }
      
      out.close();
      
  } catch (IOException e) {
    throw new IORuntimeException(e);
  }

[カテゴリ: プログラミング言語 > Servlet & Struts]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2013年06月02日 23時12分22秒