→[[Java関連]]

→JBoss Seam関連

→DI(依存性注入)

→Webアプリ開発

#contents
----

*Tips [#ec437f51]
-[[サーブレット仕様の認証を使わずにgetRemoteUserやisUserInRoleを使う>http://d.hatena.ne.jp/paulownia/20080918/1221751667]]
--独自の認証機構を使うと自由にログイン処理を記述できる代わりにHttpServletRequestのgetRemoteUserやisUserInRoleは使えない。
--しかし独自の認証でもHttpServletRequestWrapperとFilterを組み合わせれば、getRemoteUserやisUserInRoleを有効にできる。

-[[画面遷移とアクセス制御の方法>http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=8447&forum=12&3]]

-[[Strutsトランザクショントークン>http://www.ne.jp/asahi/hishidama/home/tech/struts/ttoken.html]]
--表示する画面の中にhiddenでランダムなID(トークン)を埋め込んでおき、そのトークンをサーバー側でもセッション内に保持しておく。
--その画面でサブミットされると、hiddenに埋められていたトークンがリクエストに入れられてサーバーに届く。
--サーバーでは、届いたhiddenのトークンとセッション内に保持していたトークンを比較する。一致していれば正しい遷移と判断する。
--別の画面のhiddenには別のトークンが埋められている為、意図しない画面から来た場合はセッション内のトークンとは一致しないので 誤った遷移であると判断できる。
--比較直後にセッション内からトークンを削除しておけば、重複サブミットの二度目の処理を防止できる。
--つまり、連続してサブミットボタンが押されたような場合には同一のトークンが再び届くが、セッションのトークンは既に存在しないので一致しない。すなわち不正なサブミットだと判断できる。

-[[「どのスコープにもBean org.apache.struts.taglib.html.BEAN がありません」というエラー>http://maebashi.cool.ne.jp/kuruchi/memo1.shtml]]
--どっかタグが抜けてたり閉じ忘れてたり。
--formでないのにproperty設定してるタグを使っている。formのネスト内のみ有効のタグは、html:textareaやhtml:textやhtml:passwordなど


*入門記事、リファレンス [#n810abe3]
-[[Strutsを使うWebアプリケーション構築術>http://www.atmarkit.co.jp/fjava/index/index_struts.html]]

-[[忘れっぽいエンジニアのための jakarta Strutsリファレンス>http://struts.wasureppoi.com/]]
-[[Struts>http://www.ne.jp/asahi/hishidama/home/tech/struts/index.html]]



*SAStruts [#b4785db7]
-リクエストのヘッダ情報を参照
 HttpServletRequest req = RequestUtil.getRequest();
 Enumeration<String> e = req.getHeaderNames();
 while(  e.hasMoreElements() ) {
    String s = e.nextElement();
    System.out.println(s + "=" +req.getHeader(s) );
 }

-画像のバイナリイメージをHTTPレスポンスとして出力
 package test.action;
 
 import java.awt.Color;
 import java.awt.Graphics2D;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
 import java.net.URL;
 
 import javax.imageio.ImageIO;
 import javax.imageio.ImageWriter;
 import javax.imageio.stream.ImageOutputStream;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import org.seasar.struts.annotation.Execute;
 import org.seasar.struts.util.ResponseUtil;
 
 public class OutImgAction {
 
   public String id;
 
   //
   // 画像をhttpレスポンスのボディとして出力してみるテスト
   //
   // 呼ぶときは↓こんなふうにします
   // http://localhost:8080/test/outImg/output/1
   //
   @Execute(validator=false, urlPattern = "output/{id}")
   public String output() {
     try {
       URL url = getClass().getResource("../../data/sample.png");
       BufferedImage im = ImageIO.read(url.openStream());
 
       HttpServletResponse response = ResponseUtil.getResponse();
       response.setContentType("image/jpeg");
       ServletOutputStream sos = response.getOutputStream();
           ImageOutputStream ios = ImageIO.createImageOutputStream(sos);
           ImageWriter iw = (ImageWriter)ImageIO.
                       getImageWritersByFormatName("jpeg").next();
           iw.setOutput(ios);
 
           //IDを表示してみる
           Graphics2D g = im.createGraphics();
           g.setColor(Color.BLACK);
           g.drawString("id="+id, 20, 20);
           g.dispose();
 
           iw.write(im);
     } catch (IOException e) {
       e.printStackTrace();
     }
 
     return null;
   }
 
   @Execute(validator = false)
     public String index() {
     return "/";
     }
 }

-[[AJAXでXMLを取得>http://code.nanigac.com/source/wiki/view_title/597/Ajax%E3%81%A7XML%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86]]

-[[SAStruts関連@codeなにがし>http://code.nanigac.com/source/wiki/view/597]]

--[[SAStrutsに関して読んでおきたい資料集>http://code.nanigac.com/source/wiki/view_title/597/SAStruts%E3%81%AB%E9%96%A2%E3%81%97%E3%81%A6%E8%AA%AD%E3%82%93%E3%81%A7%E3%81%8A%E3%81%8D%E3%81%9F%E3%81%84%E8%B3%87%E6%96%99%E9%9B%86]]

--[[DoltengでHello project>http://code.nanigac.com/source/wiki/view_title/597/Dolteng%E3%81%A7%E3%80%8CHello%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%80%8D%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%97%E3%82%87%E3%81%86]]
---Apache+Tomcat連携設定の説明アリ

--[[開発時に気をつけること>http://code.nanigac.com/source/wiki/view_title/597/%E9%96%8B%E7%99%BA%E6%99%82%E3%81%AB%E6%B0%97%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B%E3%81%93%E3%81%A8%E9%9B%86]]
---プロパティ以外でgetXXXXというメソッド名にしない
---セッションスコープにした変数にSerializableをimplementsしてない変数があるとSIllegalArgumentException


-[[サーバ再起動不要のSMART deployとバリデーション>http://www.atmarkit.co.jp/fjava/rensai4/saweb03/saweb03_1.html]]
--SMART deployはDIコンテナである「Seasar」のバージョン2.4から実装されたデプロイ機能で、DI(依存性の注入)の技術が生かされています。
--デプロイ方法には「HOT」「COOL」「WARM」の3種類があります。
--開発時には便利なHOT deployですが、若干パフォーマンスが悪くなります。本番運用のときはソースコードを変える必要はないので、要らない機能となってしまいます。そこでリリース時には、COOL deployで動作させます。
--WARM deployは必要なとき必要なクラスを読み込むもので、HOT deployとCOOL deployの中間のような機能です。例えば、JUnitなどのテスティングフレームワークでテストをするときにはソースコードの変更はありません。しかし、単体テストではすべての機能を動作させるわけではないので、COOL Deployのときのようにプロジェクト全体のすべてのDI設定を行う必要はないはずです。
--すべての設定を行うと、当然それだけ起動が遅くなるので、必要ない部分を読み込みたくないときは、単体テストで必要な最小限の設定を読み込み、オブジェクトが生成できればいいわけです。そうしたときに使用するのがWARM deployです。

-[[JSPでActionに指定したrolesを使う>http://d.hatena.ne.jp/cypher256/20080429/p2]]

-[[SAStrutsでログイン確認インターセプタを使う>http://d.hatena.ne.jp/idesaku/20081226/1230263190]]

-[[SAStrutsタグ>http://www.atmarkit.co.jp/fjava/rensai4/saweb04/saweb04_1.html]]
--<s:form>タグ
--<s:form>タグは、Strutsのカスタムタグの1つ<html:form>タグに代わるものです。<html:form>タグでは、Actionパスの再計算が行われないため、相対パスなどで記述すると同じページにアクセスするたびに、URLがずれてしまう問題がありました。
--SAStrutsで用意されている<s:form>タグではaction属性を設定したリンクのURLを
基準として、パスが「/」で始まっている場合、コンテキストルートから見た絶対パスになります。パスが「/」で始まっていない場合、JSPファイルから見た相対パスが計算されて設定されます。
--この自動計算により、リクエストのパスが「/dept」であっても「/dept/list」で
あっても、相対パスで入力してあっても出力URLがずれたりすることがなくなります。
-- <s:link>タグ
--<s:link>タグは先ほど紹介した<s:form>タグのリンク版です。Strutsの<html:link>タグに代わるものです。href属性を設定するときに<s:form>と同様のパスの計算が行われ同様に出力URLがずれることがなくなります。
-- <s:submit>タグ
--<s:submit>タグはStrutsの<html:submit>タグに代わるものです。
--<s:submit>タグを使用すると、簡単にクライアントバリデーションが設定できます。clientValidate属性にtrueを設定するとクライアントバリデーションができます。

-[[StrutsのXML地獄から開発者を解放するSAStruts@IT>http://www.atmarkit.co.jp/fjava/rensai4/saweb02/saweb02_1.html]]

-[[SAStruts>http://sastruts.seasar.org/]]
-http://wiki.paulownia.jp/java/sastruts
-[[SAStruts入門>http://snowhiro.web.fc2.com/sastruts/]]
-[[SAStrutsPlugin>http://sastruts.seasar.org/sastrutsplugin.html]]

-[[SASTruts チートシート>http://seasar-users.jp/cheatsheet/sastruts]]

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS