スポンサードリンク


イントラマートでPOSTやJSONを任意のJavaクラスに自動代入!StrutsのActionForm実装でJSPリクエストをサーブレット処理!アノテーション機能の使い方と意味は?

    イントラマートJava開発で特に必要なものはアクションクラスと呼ばれる基幹クラスと
    ページの構造を構築するJSPファイルの2つになります。

    Java EESAStrutsをベースに設計されているので、
    イントラマートではこの2つの手法を利用しコーディングを行ないます。

    アクションクラスについてはページコンテンツを開いた時に、
    最初にコンパイルされ処理が実行されるクラスで原則作成するページの分だけ必要になります。

    今回の記事では、イントラマート上でウェブコンテンツを作成する基礎をご紹介したいと思います。

    Javaクラスの変数をJSPにデータとして受け渡す仕組みを見ていきます。

     

    Actionクラスの仕組みを理解する

    開発ソフトのe-Builderでプロジェクトを作成します。

    パッケージ名は任意で構いませんが、Webサーバのdiconファイルで
    起動プログラムのパスの設定が必要となります。

    一番初めに作成するものはActionクラスです。
    e-Builder上では以下のようなディレクトリに配置します。

    イントラマート アクション処理

    diconファイルで設定した起動プログラムのパスをルートディレクトリとして、
    その直下に存在するactionディレクトリがイントラマートのURLで言うと、
    相対パスの開始ディレクトリになります。

    なので例の通り、actionディレクトリにSapleAction.javaというクラスを配置すれば、
    イントラマート側ではimart/sample/というURLに変換されて表示処理されます。

     

    javaでJSPを読み込むまでの処理の流れ

    アクションクラスで定義したpublic修飾子のフィールド変数はJSP上で、呼び出しを行なうことが可能です。

    通常、アクションクラスの各メソッドで、戻り値として設定したJSPのパスを元にページ構成が行われます。

    JSP内ではこの時return処理したアクションクラス内のフィールド変数の値しか呼び出せません。
    なので、Javaの変数データをJSPで出力したいなら、フィールド変数を用意する必要がありますね。

    Java JSP出力

    ただし、あくまで変数データを受信する際は問題ありませんが、
    例えばJavaとJSP間によるデータの登録処理などを実装する際、データ送信の仕組みを押さえておかなければなりません。

    というのも、ページの表示処理が完了するとサーバサイドのJavaは、
    一旦、待機状態になります。(実装によっては動的通信。)

    あくまでユーザがページを表示する際にアクション処理として動作するので、
    それ以外の操作では細かいロジックを実装しない限りは、その間はJavaが動作することはありません。

    つまりページの表示処理が完了したら、ユーザが操作するページのベースはHTMLにすぎません。

     

    javaのサーブレットHttpServletRequesクラスの仕組み

    HTMLではFormタグなどによって、Inputタグなどの入力情報を、遷移先ページに送信することができますね。

    主にJavaベースで設計されたウェブシステムでは、
    データの登録処理をする際に、FormタグによってPOSTやJSON形式などで、送信処理を実装します。

    送信時に遷移先のページが表示され、その際にサーバにFormタグ内の入力情報を送信することができます。

    尚、送信される入力情報は各セレクタにname属性を指定したものに限ります。

     

    スポンサードリンク

     

    POSTやJSONで送信されたデータを取得する

    遷移先ページに対応するアクションクラスのメソッドの引数に、HttpServletRequest型の引数を用意します。

    POSTやGET形式などデータを取得し格納することが可能です。


    getParameter(“JSPから送信されたデータのname値”);を利用することで、

    JSPのnameプロパティに格納されたvalueのデータを取得できます。

    交換言語として使われるJSONの場合は、以下のような処理を実装します。

     
    ただ、この機能だけを用いる場合、毎回、送信されたデータを取得する処理を実装しなくてはなりません。
    さらにPOSTやGET、JSONなどデータ送信タイプも考慮して
    コーディングするのは非常に面倒ですし、何よりもコーディングが美しくありません。

    そこでActionFormアノテーションという機能を実装するとかなり便利です。

     

    ActionクラスにActionFormアノテーションを実装する

    そもそもアノテーションとはなんだろうか?

    意味合いとしては「注釈」を表しており、Javaでは変数やメソッド、クラスなどの要素に
    決められた属性を付加させるようなイメージになります。

    アノテーションにも様々な種類があり、ユーザ定義できるものもあるのですが、
    今回は「ActionForm」というアノテーションをご紹介します。

    前述通り、POSTやJSONデータを遷移先ページのアクション処理で、
    変数データとして取得する際はHttpServletRequestクラスを利用します。

    ただ、毎回これを実装するのは少々面倒ですし、
    その後のデータ処理をするには、自動的に一括で変数データを取得できた方が楽ですよね?

    その時に便利なのが「ActionForm」アノテーションです。

     

    ActionFormアノテーションはリクエストデータを対象クラスに自動代入できる!

    アクションクラス内で「ActionForm」というアノテーションを実装することで、
    効率よくJSPのデータをJava側に送信することが可能です。

    仕組みとしてはPOSTやJSON形式による送信処理でページ遷移する際に、
    @ActionFormのアノテーションを実装したフィールド変数のクラスに、そのまま自動的に代入することができます。


    実際にはActionFormとは送信処理時のrequestをサーブレットを通して、

    JSP内のname属性名と遷移作アクションクラスのActionFormに設定したクラスの変数名が一致する場合、
    JSPで送信したデータをそのまま自動的に代入処理を行なうことができます。

    データ送信タイプを意識することなく、自動代入処理を共通化してくれるので、すごく楽です。

    ActioFormアノテーションを実装する時は、「Resource」アノテーションもセットで実装して下さい。
    一応このResourceアノテーションは、コンポーネントという自動起動設定ができます。

    細かい説明をすると難しいので、 今はstaticというどのクラスから呼び出しても値が保持される静的データとしてイメージした方がわかりやすいでしょう。

    ちなみに@resourceを付加した場合は、必ず変数の型名と変数名の名前を合わせておきましょう。

    名前が一致しないと、Java実行時に対象の変数のクラス型の自動起動に失敗してエラーになります。

    一応diconファイルにクラスパスとコンポーネント名を指定すれば、別名も使えますが、面倒なので合わせます。

      The following two tabs change content below.
      よっき プロフィール画像
      パソコンが大好きな青年。職業はプログラマ/SE。 フリーランスとしてウェブサイトの構築・保守の業務に従事。専門学校とパソコンスクールで講師も担当。幼少期からパソコンが大好きで、趣味がそのまま仕事に転じた。自作PCの魅力に惹かれたのは学生時代の頃。自作PC専門ブログで、お得な情報を紹介しています。

      スポンサードリンク


      コメントを残す




      CAPTCHA


      このページの先頭へ