初心者向けのストラットチュートリアル
初心者向けStrutsチュートリアルへようこそ。StrutsはJava Webアプリケーションを構築するための最も古いフレームワークの一つです。
ストラットチュートリアル
StrutsはMVCデザインパターンの初期実装であり、JavaやJava EEテクノロジーの最新の向上とともに大きく進化してきました。Strutsのチュートリアル記事は、Struts 2の基本的な詳細と、最初の「Hello World」Struts 2アプリケーションの作成方法を提供することを目的としています。
ストラッツ2
Apache Struts 2は、Java EEウェブアプリケーションを構築するためのオープンソースで業界標準の柔軟で拡張性のあるフレームワークです。Struts 2は、OpenSymphony WebWorkフレームワークを基にしています。Struts 2は開発と設定の面で非常に柔軟であり、Struts 2フレームワークを使用してウェブアプリケーションを開発することがいかに簡単であるかを見ていきます。
Struts 2のアーキテクチャ図
下の図は、ウェブアプリケーションにおけるStruts 2の異なるコンポーネントを示しています。
ストラッツ2のインターセプター
ストラットのインターセプターは、リクエストの処理の前後に実行されるサーブレットフィルターのようなものです。異なるアクションで共通の操作を実行するために使用されます。例えば、ログ記録、セッションの検証、レスポンスに共通のヘッダーを追加するなどです。
Struts 2のValueStackとOGNL。
ValueStackは、Struts 2によってクライアントのリクエストを処理するために、アプリケーションデータが格納されるストレージエリアです。データは、特定のリクエストスレッドに固有の値を持つために、ThreadLocalを使用してActionContextオブジェクトに格納されます。オブジェクトグラフナビゲーション言語(OGNL)は、ValueStackに格納されたデータを操作するために使用される強力な式言語です。アーキテクチャ図で示されているように、インターセプターやリザルトページは、OGNLを使用してValueStackに格納されたデータにアクセスすることができます。
ストラット2アクション
Struts 2のアクションコンポーネントは、クライアントのリクエストを処理します。Struts 2では、さまざまな方法でアクションクラスを作成することができます。
-
- com.opensymphony.xwork2.Action インターフェースを実装することによって。
-
- com.opensymphony.xwork2.ActionSupport クラスを拡張することによって。通常、リクエストを他のリソースに転送するための空のアクションクラスを作成するために使用されます。
-
- クラスに @Action または @Actions アノテーションを付けることによって。
- クラスの命名規則に従い、クラス名は Action で終わり、execute() メソッドを持つ必要があります。
ストラット2の結果
クライアントのレスポンスにビューを作成するために、通常はJSPまたはHTMLページが使用されます。Struts 2は、JSPページで使用できる独自のタグを提供しています。Strutsのタグは、JSPカスタムタグの優れた例です。
ストラット2の宣言的なアーキテクチャと接続設定
Struts 2はアクションクラスとリザルトページのアプリケーション設定に2つの方法を提供しています。
-
- ストラッツXMLファイル:私たちはWEB-INF/classesディレクトリにstruts.xmlファイルを持っており、そこでアプリケーションのアクションクラスと結果ページを設定することができます。
- 注釈:Javaアノテーションを使用してクラスにメタデータ情報を提供することができます。ストラッツ2のコンベンションプラグインを使用して、@Actionと@Resultの注釈を付けることでアクションクラスと関連する結果ページを設定することができます。
アプリケーションの設定方法はどのような方法を選んでも、最終的な結果は常に同じです。
ストラットチュートリアル – Hello World XMLベースのアプリケーション
最初のStruts 2 Hello Worldアプリケーションの作成方法を見てみましょう。まず最初に必要なものはStruts 2のjarファイルですが、一番簡単な方法はStruts 2公式ダウンロードページからダウンロードすることです。ただし、ダウンロードしたアーカイブ内のライブラリを調べると、私たちのシンプルなアプリケーションには必要のないたくさんのjarファイルが含まれていることに気付くでしょう。そのため、私はMavenプロジェクトを作成し、struts-coreの依存関係のみを追加します。他のトランジティブ依存関係のjarファイルは自動的にダウンロードされ、アプリケーションに追加されます。最終的なプロジェクト構造は以下の画像のようになります。Eclipseで新しいDynamic Web Project Struts2XMLHelloWorldを作成し、次に以下の画像のようにMavenプロジェクトに変換します。プロジェクトのルートディレクトリにpom.xmlファイルが追加されていることに気付くでしょう。Eclipseでのプロジェクトのセットアップは完了しましたので、順番に異なるコンポーネントを見ていきましょう。
ポム.xml
pom.xml ファイルを開き、struts core の依存関係を追加してください。最終的な pom.xml は以下のようになります。
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Struts2XMLHelloWorld</groupId>
<artifactId>Struts2XMLHelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.15.1</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
</project>
mavenビルドを行う際にWARファイルにバージョン番号が追加されるのを避けるために、finalName要素を上書きしていることに注意してください。他の部分はEclipse自体が追加しますが、必要な依存関係はstruts2-coreだけで、現在のバージョンは2.3.15.1です(2013年9月10日現在)。アプリケーションをmavenビルドすると、多くのjarファイルがアプリケーションのlibディレクトリに追加され、以下の画像のようにプロジェクトのMaven Dependenciesセクションに表示されます。
Struts 2のweb.xmlの設定
私たちは、org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterフィルタをWebアプリケーションに追加し、Strutsにクライアントのリクエストを処理するURLパターンを指定する必要があります。私たちのweb.xmlは以下のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Struts2XMLHelloWorld</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Struts 2 バージョン 2.1.3 未満の場合、filter-class は org.apache.struts2.dispatcher.FilterDispatcher でした。
ストラットチュートリアル – 結果ページ
アプリケーションで使用されるJSPページは3つあります。私たちは、JSPページを作成するためにStruts 2のタグを使用しています。login.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<%-- Using Struts2 Tags in JSP --%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
</head>
<body>
<h3>Welcome User, please login below</h3>
<s:form action="login">
<s:textfield name="name" label="User Name"></s:textfield>
<s:textfield name="pwd" label="Password" type="password"></s:textfield>
<s:submit value="Login"></s:submit>
</s:form>
</body>
</html>
フォームフィールドの名前が「name」と「pwd」であることに注意してください。これらがActionクラスでどのように使用されるかを見てみましょう。welcome.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Welcome Page</title>
</head>
<body>
<h3>Welcome <s:property value="name"></s:property></h3>
</body>
</html>
request属性を取得するために使用できるstrutsのタグs:propertyに注意してください。その名前はlogin.jspと同じです。error.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Error Page</title>
</head>
<body>
<h4>User Name or Password is wrong</h4>
<s:include value="login.jsp"></s:include>
</body>
</html>
これはシンプルなJSPページです。私たちはエラーメッセージを追加し、レスポンスにログインページを含めています。
ストラットチュートリアル – アクションクラス
私たちのアプリケーションは、Struts 2 Action インターフェースを実装している唯一の Action クラスである LoginAction.java を持っています。
package com.scdev.struts2.action;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
@Override
public String execute() throws Exception {
if("scdev".equals(getName()) && "admin".equals(getPwd()))
return "SUCCESS";
else return "ERROR";
}
//Java Bean to hold the form parameters
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
アクションクラスもlogin.jspと同じ変数とそのゲッターセッターメソッドを持つJava Beanであることに注意してください。Strutsはリクエストパラメータをアクションクラスの変数にマッピングする処理を自動的に行います。
ストラッツチュートリアル – 設定ファイル
私達はアプリケーションのワイアリングにXMLベースの設定を使用しているため、struts.xmlという名前のStruts設定ファイルを作成する必要があります。このファイルはWEB-INF/classesディレクトリの中に配置されます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="user" namespace="/User" extends="struts-default">
<action name="home">
<result>/login.jsp</result>
</action>
<action name="login" class="com.scdev.struts2.action.LoginAction">
<result name="SUCCESS">/welcome.jsp</result>
<result name="ERROR">/error.jsp</result>
</action>
</package>
</struts>
アクション「home」にはActionクラスがなく、結果も1つしかないため、リクエストはlogin.jspページに転送されます。アクション「login」では、LoginActionがアクションクラスとして使用され、execute()メソッドが「SUCCESS」を返すと、リクエストはwelcome.jspで処理されます。また、「ERROR」の場合は、error.jspページに転送されます。namespace=”/User”は重要であり、アクションクラスにアクセスするためのURLに使用されます。これにより、URL https://localhost:8080/Struts2XMLHelloWorld/User/home.actionでアプリケーションにアクセスできます。注意すべきは、URLが.actionで終わっていることで、これはStruts 2のアクションのデフォルトの接尾辞であり、Struts 1の場合は.doとなります。
ストラッツチュートリアル – ストラッツ2の始め方テスト
私たちがアプリケーションを実行すると、以下の応答ページが表示されます。
「Struts2のHello Worldサンプルプロジェクトをダウンロード」
これがStruts 2の初心者向けチュートリアルのすべてです。次の記事では、struts.xmlの設定ファイルを使用せずに、注釈を利用してStruts 2ウェブアプリケーションを作成します。