Struts-2-struts-examples

提供:Dev Guides
移動先:案内検索

Struts 2-Hello Worldの例

Struts 2アーキテクチャから既に学んだように、ハイパーリンクをクリックするか、Struts 2 WebアプリケーションでHTMLフォームを送信すると、入力はControllerによって収集され、ActionsというJavaクラスに送信されます。 アクションが実行された後、結果は応答をレンダリングするリソースを選択します。 通常、リソースはJSPですが、PDFファイル、Excelスプレッドシート、またはJavaアプレットウィンドウにすることもできます。

すでに開発環境を構築していると仮定します。 では、最初の Hello World Struts2 プロジェクトの構築に進みましょう。 このプロジェクトの目的は、ユーザーの名前を収集し、「Hello World」の後にユーザー名を表示するWebアプリケーションを構築することです。

Struts 2プロジェクトでは、次の4つのコンポーネントを作成する必要があります-

Sr.No Components & Description
1

Action

完全なビジネスロジックを含むアクションクラスを作成し、ユーザー、モデル、ビュー間の相互作用を制御します。

2

Interceptors

必要に応じてインターセプターを作成するか、既存のインターセプターを使用します。 これはコントローラーの一部です。

3

View

ユーザーと対話して入力を行い、最終メッセージを表示するJSPを作成します。

4

Configuration Files

アクション、ビュー、コントローラーを結合する構成ファイルを作成します。 これらのファイルは、struts.xml、web.xml、struts.propertiesです。

Eclipse IDEを使用して、必要なすべてのコンポーネントが動的Webプロジェクトの下に作成されるようにします。 ダイナミックWebプロジェクトの作成から始めましょう。

動的Webプロジェクトを作成する

Eclipseを起動し、 File> New> Dynamic Web Project でプロジェクト名を HelloWorldStruts2 と入力し、次の画面に示すように残りのオプションを設定します-

Hello World Sturts1

次の画面ですべてのデフォルトオプションを選択し、最後に* Web.xmlデプロイメント記述子の生成*オプションをチェックします。 これにより、Eclipseで動的なWebプロジェクトが作成されます。 今すぐ Windows> Show View> Project Explorer を選択すると、以下のようなプロジェクトウィンドウが表示されます-

Hello World Sturts2

次に、次のファイルをstruts 2 libフォルダー C:\ struts-2.2.3 \ lib からプロジェクトの WEB-INF \ lib フォルダーにコピーします。 これを行うには、次のすべてのファイルをWEB-INF \ libフォルダーにドラッグアンドドロップするだけです。

  • commons-fileupload-x.y.z.jar
  • commons-io-x.y.z.jar
  • commons-lang-x.y.jar
  • commons-logging-x.y.z.jar
  • commons-logging-api-x.y.jar
  • freemarker-x.y.z.jar
  • javassist-.xy.z.GA
  • ognl-x.y.z.jar
  • struts2-core-x.y.z.jar
  • xwork-core.x.y.z.jar

アクションクラスの作成

アクションクラスはStruts 2アプリケーションのキーであり、ほとんどのビジネスロジックをアクションクラスに実装します。 それでは、 Java Resources> src の下に com.finddevguides.struts2 というパッケージ名のJavaファイルHelloWorldAction.javaを作成して、以下の内容を含めます。

ユーザーがURLをクリックすると、Actionクラスはユーザーアクションに応答します。 1つ以上のActionクラスのメソッドが実行され、文字列の結果が返されます。 結果の値に基づいて、特定のJSPページがレンダリングされます。

package com.finddevguides.struts2;

public class HelloWorldAction {
   private String name;

   public String execute() throws Exception {
      return "success";
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

これは、「名前」という1つのプロパティを持つ非常に単純なクラスです。 「name」プロパティ用の標準のゲッターおよびセッターメソッドと、文字列「success」を返すexecuteメソッドがあります。

Struts 2フレームワークは、 HelloWorldAction クラスのオブジェクトを作成し、ユーザーのアクションに応じて実行されたメソッドを呼び出します。 最終的に文字列定数を返すこのメソッド内にビジネスロジックを配置します。 つまり、各URLに1つのアクションクラスを実装する必要があり、そのクラス名をアクション名として直接使用するか、struts.xmlファイルを使用して他の名前にマップすることができます(以下を参照)。

ビューを作成する

最終メッセージを表示するにはJSPが必要です。このページは、事前定義されたアクションが発生したときにStruts 2フレームワークによって呼び出され、このマッピングはstruts.xmlファイルで定義されます。 そこで、EclipseプロジェクトのWebContentフォルダーに以下のjspファイル HelloWorld.jsp を作成しましょう。 これを行うには、プロジェクトエクスプローラーでWebContentフォルダーを右クリックし、[ New> JSP File ]を選択します。

<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>

<html>
   <head>
      <title>Hello World</title>
   </head>

   <body>
      Hello World, <s:property value = "name"/>
   </body>
</html>

taglibディレクティブは、このページが Struts 2 タグを使用し、これらのタグの前に s が付くことをサーブレットコンテナに伝えます。

s:propertyタグは、HelloWorldActionクラスのメソッド* getName()*によって返されるアクションクラスプロパティ「name>」の値を表示します。

メインページを作成

また、WebContentフォルダーに index.jsp を作成する必要があります。 このファイルは、ユーザーがStruts 2フレームワークにHelloWorldActionクラスの定義済みメソッドを呼び出してHelloWorld.jspビューをレンダリングするように指示するためにクリックできる初期アクションURLとして機能します。

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>Hello World</title>
   </head>

   <body>
      <h1>Hello World From Struts2</h1>
      <form action = "hello">
         <label for = "name">Please enter your name</label><br/>
         <input type = "text" name = "name"/>
         <input type = "submit" value = "Say Hello"/>
      </form>
   </body>
</html>

上記のビューファイルで定義された hello アクションは、struts.xmlファイルを使用してHelloWorldActionクラスとその実行メソッドにマッピングされます。 ユーザーが「送信」ボタンをクリックすると、Struts 2フレームワークがHelloWorldActionクラスで定義された実行メソッドを実行し、メソッドの戻り値に基づいて、適切なビューが選択され、応答としてレンダリングされます。

構成ファイル

URL、HelloWorldActionクラス(モデル)、およびHelloWorld.jsp(ビュー)を結び付けるマッピングが必要です。 マッピングは、どのクラスがユーザーのアクション(URL)に応答するか、そのクラスのどのメソッドが実行されるか、メソッドが返すStringの結果に基づいてどのビューをレンダリングするかをStruts 2フレームワークに伝えます。

そこで、 struts.xml というファイルを作成しましょう。 Struts 2では、struts.xmlがクラスフォルダーに存在する必要があります。 したがって、WebContent/WEB-INF/classesフォルダーの下にstruts.xmlファイルを作成します。 Eclipseはデフォルトでは「クラス」フォルダーを作成しません。そのため、これを自分で行う必要があります。 これを行うには、プロジェクトエクスプローラーでWEB-INFフォルダーを右クリックし、*新規>フォルダー*を選択します。 あなたのstruts.xmlは次のようになります-

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name = "struts.devMode" value = "true"/>

   <package name = "helloworld" extends = "struts-default">
     <action name = "hello"
         class = "com.finddevguides.struts2.HelloWorldAction"
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
      </action>
   </package>
</struts>

上記の構成ファイルに関して理解する必要のある言葉はほとんどありません。 ここでは、開発環境で作業しており、有用なログメッセージを表示する必要があるため、定数 struts.devModetrue に設定します。 次に、 helloworld というパッケージを定義します。

パッケージを作成すると、アクションをグループ化するときに便利です。 この例では、アクションに「hello」という名前を付けました。これは、URL /hello.action に対応し、* HelloWorldAction.class によってバックアップされます。 *HelloWorldAction.classexecute メソッドは、URL /hello.action が呼び出されたときに実行されるメソッドです。 executeメソッドの結果が「success」を返す場合、ユーザーを HelloWorld.jsp に移動します。

次のステップは、Struts 2へのリクエストのエントリポイントである web.xml ファイルを作成することです。 Struts2アプリケーションのエントリポイントは、デプロイメント記述子(web.xml)で定義されたフィルターになります。 したがって、web.xmlでorg.apache.struts2.dispatcher.FilterDispatcherクラスのエントリを定義します。 web.xmlファイルは、WebContentの下のWEB-INFフォルダーの下に作成する必要があります。 プロジェクトを作成したときに、Eclipseはすでにスケルトンweb.xmlファイルを作成していました。 したがって、次のように変更するだけです-

<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns = "http://java.sun.com/xml/ns/javaee"
   xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
   http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
   id = "WebApp_ID" version = "3.0">

   <display-name>Struts 2</display-name>

   <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>

   <filter>
      <filter-name>struts2</filter-name>
      <filter-class>
         org.apache.struts2.dispatcher.FilterDispatcher
      </filter-class>
   </filter>

   <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
   </filter-mapping>
</web-app>

index.jspをウェルカムファイルとして指定しました。 次に、すべてのURL(つまり、パターン/*に一致する任意のURL)で実行するようにStruts2フィルターを構成しました

詳細ログを有効にするには

*WEB-INF/classes* フォルダーの下に *logging.properties* ファイルを作成することにより、Struts 2での作業中に完全なログ機能を有効にできます。 プロパティファイルに次の2行を保持します-
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = \
   java.util.logging.ConsoleHandler

デフォルトのlogging.propertiesは、ログをstdoutにルーティングするためのConsoleHandlerとFileHandlerを指定します。 ハンドラーのログレベルのしきい値は、SEVERE、WARNING、INFO、CONFIG、FINE、FINER、FINEST、またはALLを使用して設定できます。

それでおしまい。 Struts 2フレームワークを使用してHello Worldアプリケーションを実行する準備が整いました。

アプリケーションの実行手順

プロジェクト名を右クリックし、[エクスポート]> [WARファイル]をクリックして、WARファイルを作成します。

次に、このWARをTomcatのwebappsディレクトリにデプロイします。

最後に、Tomcatサーバーを起動して、URL http://localhost:8080/HelloWorldStruts2/index.jsp にアクセスしてみます。 これにより、次の画面が表示されます-

Hello World Struts4

値「Struts2」を入力して、ページを送信します。 次のページが表示されます

Hello World Struts5

struts.xmlファイルでアクションとして index を定義できることに注意してください。その場合、 http://localhost:8080/HelloWorldStruts2/index.action としてインデックスページを呼び出すことができます。 アクションとしてインデックスを定義する方法を以下で確認してください-

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
   <constant name = "struts.devMode" value = "true"/>
   <package name = "helloworld" extends = "struts-default">

      <action name = "index">
         <result >/index.jsp</result>
      </action>

      <action name = "hello"
         class = "com.finddevguides.struts2.HelloWorldAction"
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>