Strutsのバージョン「1.x」系と「2.x」系の違いについてメモしておきます。
Struts「1.x」の特徴
- 一般的に「Struts」と言えば「1.x」系を指します。
- 2008年12月リリースの1.3.10以降はバージョンアップは停止しています。
- バージョンアップにより安定して利用出来るので多くの開発で利用されています。
- Strutsの構成に「struts-config.xml」ファイルを使用しています。
- ActionForwardオブジェクトを使用しています。
- inputを返すActionについて検証(validateメソッド)の呼び出しが行われるため、検証が不要な場合にこれを抑制するコードを作成する必要があります。
Struts「2.x」の特徴
- 元々「WebWork2」というフレームワークが名称変更されて「Struts 2」となりました。
- 元は設計思想の異なる別物のフレームワークなので「Struts 1.x」系とは根本的に異なる物です。
- 2016年2月現在でバージョン 2.3.24.1までリリースされています。
- Struts 1.xでいう「struts-config.xml」は「struts.xml」に変更されています。
- Struts 1.xでいう「ActionForwardオブジェクト」は「Resultオブジェクト」に置き換わりました。
- inputを返すActionについて検証の呼び出しが行われないため、検証が不要な場合にこれを抑制するコードを作成する必要はありません。
Eclipseでgetter/setterメソッドを自動生成する方法をメモしておきます。
事前にコードテンプレートでgetter/setter用のjavadocを設定しておくとさらに便利です。
環境
- Eclipse 4.2
- Windows7 professional 64bit版
getter/setterメソッドの自動生成手順
- getter/setterを設定したいBeanやDTOなどのクラスを作成しフィールドだけ記述してgetter/setterを挿入したい行へカーソルを合わせます。
- 挿入位置へカーソルを合わせたら右クリックし、「ソース」⇒「getterおよびsetterの生成」を選択します。
- getterおよびsetterの生成画面が表示されたら、生成対象とするフィールドを選択し、「メソッド・コメントの生成」へチェックし「OK」ボタンを選択します。
- 上記手順で以下の様にgetter/setterメソッドが自動生成されて挿入されます。事前にコードテンプレートでgetter/setter用のjavadocを設定しておけばお好みのjavadocへ変更する事も可能です。
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
package Bean; import java.util.Date; /** * <p>[概 要] SampleBean4。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * <p>[環 境] </p> */ public class SampleBean4 { /** * 日付 */ private Date date; /** * 文字列 */ private String str; /** * <p>[概 要] dateを取得する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @return date */ public Date getDate() { return date; } /** * <p>[概 要] dateを設定する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param date */ public void setDate(Date date) { this.date = date; } /** * <p>[概 要] strを取得する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @return str */ public String getStr() { return str; } /** * <p>[概 要] strを設定する。</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param str */ public void setStr(String str) { this.str = str; } } |
-
ここではhttpとhttpsの違いについてメモしておきます。
この2つを理解しやすくするには「http」と「https」の正式名称を思い浮かべるとイメージし易いでしょう。
- http :Hyper Text Transfer Protocol
- https:Hyper Text Transfer Protocol Secure
httpsの「s」とは「セキュア」つまり「安全なhttp」という事です。
httpのホームページでは住所、氏名といった個人情報をそのままサーバへ送信してしまいます。一方httpsでは情報を暗号化してサーバへ送信します。
ブログなどのように相手に読ませるためだけのページであればhttpでも大きな問題にはなりにくいですが、ログイン画面や決済時にクレジットカードなどの個人情報を入力するような画面では「https」になっている事が大前提と言えます。逆に個人情報を入力するのに「http://~」となっているようなサイトであれば、セキュリティに対する認識が甘い企業と見られてしまうでしょう。
httpを使用する場合
- 広告やブログなど不特定多数の人に閲覧されても問題ない場合
httpsを使用する場合
- ログイン情報、住所、氏名、クレジットカード番号などを入力する場合
EclipseでJUnitやDjUnitを実行すると「junit java.lang.OutOfMemoryError: Java heap space」とメモリエラーが表示された場合は「デフォルトのVM引数」を設定する事でこの事象を回避する事が出来るのでその設定方法をご紹介します。
環境
- Eclipse 4.2
- Windows7 professional 64bit版
対処方法
- Eclipseメニューの「ウィンドウ」⇒「設定」を選択します。
- 設定画面で「Java」⇒「インストール済みのJRE」⇒使用しているjdkを選択して「編集」ボタンを選択します。
- JREの編集画面で「デフォルトのVM引数」へ以下の様に設定します。
|
-Xms=1024m -Xmx=1024m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:NewSize=320m -XX:MaxNewSize=320m -XX:SurvivorRatio=2 -XX:TargetSurvivorRatio=80 |
通常JUnitでは1クラスに対して1クラス分のテストケースクラスを作成してテストを実施します。何らかの業務でプロジェクト全体での規模になってくるとその数は何十、何百、時には何千となる事も珍しいことではありません。
こういったプロジェクトでソースに何らかの修正が入り、テストを実施するという場合に1つずつJUnitで確認していたのでは実行するだけで無駄に時間が掛かってしまいます。
こういう場合には「テスト・スイートクラス」を作成して、まとめて実行して確認するのが一般的な手法となります。
環境
pleiades(eclipse4.2)
junit_4.10.0
テスト・スイートクラスの作成手順
- テストケースクラスが保存されているパッケージで右クリックし、「新規」⇒「その他」を選択します。
- ウィザード画面で「JUnit」⇒「JUnitテスト・スイート」を選択し「次へ」ボタンを選択します。
- テストスイートクラスのファイル名(デフォルトではAllTestsとなります)、保存先のフォルダ、テストしたいクラスを設定し、「完了」ボタンを選択します。
- 上記手順で以下の様なテスト・スイートクラスが作成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class) @SuiteClasses({ OverLoadSampleTest.class, OverRideSampleTest.class, SampleClass1Test.class, UtilClassDjUnitTest.class, UtilSample1Test.class, UtilSample1TestDjunit.class }) /** * <p>[概 要] コンストラクタ</p> * <p>[詳 細] テスト・スイートクラスのコンストラクタ。</p> * <p>[備 考] </p> */ public class AllTests { } |
djUnitではメソッドが呼び出された際、強制的に特定のExceptionを発生させる事も可能です。強制的にExceptionを発生させる場合には「addReturnValue」を使用します。
1点注意しておきたいのは「addReturnValue」を使用してExceptionを発生させた時はjunitで「@Test(expected = RuntimeException.class)」の様にアノテーションでは確認出来ないのでTry~catchで確認する必要があります。
Javaソース
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
|
/** * <p>[概 要] URLエンコード処理</p> * <p>[詳 細] </p> * <p>[備 考] </p> * @param str 文字列 * @param enc - 文字コード * @return URLエンコード後の文字列 */ public static String urlEncode(String str, String enc){ String urlEncode = ""; StringBuffer result = new StringBuffer(); try { urlEncode = URLEncoder.encode(str, enc); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e.toString()); } // 半角スペースは「%20」へ置換する for(char c : urlEncode.toCharArray()) { switch (c) { case '+' : result.append("%20"); break; default : result.append(c); break; } } return result.toString(); } |
djUnitサンプル
以下のテストソースでは「URLEncoder」クラスの「encode」メソッドが呼び出された際に「UnsupportedEncodingException」がスローされた事を確認しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
@Test public void testUrlEncode_exception() { // 準備 String str = "/&<>\"\' abc123"; String enc = "utf-8"; // 「URLEncoder.encode()」を実行した際、UnsupportedEncodingExceptionを発生させます。 addReturnValue(URLEncoder.class, "encode", new UnsupportedEncodingException("MESSAGE001")); try { // 実行 UtilSample1.urlEncode(str, enc); fail("この行は、実行されないはず"); } catch (Throwable t) { assertTrue(t instanceof RuntimeException); assertEquals("java.io.UnsupportedEncodingException: MESSAGE001", t.getMessage()); } } |
「駑馬十駕」 IT系情報を中心に調べた事をコツコツ綴っています。