ウェブサイト検索

初心者のためのストラッツチュートリアル


初心者向けStrutsチュートリアルへようこそ。Strutsは、Java Webアプリケーションを構築するための最も古いフレームワークの1つです。

ストラッツチュートリアル

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 アーキテクチャ図

下の図は、WebアプリケーションにおけるStruts 2の異なるコンポーネントを示しています。

Struts 2 インターセプター

ストラッツインターセプターは、リクエストが処理される前後に実行されるサーブレットフィルターのようなものです。これらは、異なるアクションのための共通の操作を実行するために使用されます。例えば、ログ記録、セッションのバリデーション、レスポンスに共通のヘッダーを追加するなどです。

Struts 2 バリュースタックとOGNL

ValueStack は、Struts 2 がクライアントのリクエストを処理するためにアプリケーションデータを保存するストレージエリアです。データは、特定のリクエストスレッドに固有の値を持つために ThreadLocal を使用する ActionContext オブジェクトに保存されます。Object-Graph Navigation Language (OGNL) は、ValueStack に保存されたデータを操作するために使用される強力な式言語です。アーキテクチャ図に見られるように、インターセプターと結果ページの両方が、OGNL を使用して ValueStack に保存されたデータにアクセスできます。

Struts 2 アクション

Struts 2のアクションコンポーネントはクライアントのリクエストを処理します。Struts 2はアクションクラスを作成するための異なる方法を提供します。

  1. com.opensymphony.xwork2.Actionインターフェースを実装することによって。
  2. com.opensymphony.xwork2.ActionSupportクラスを拡張することによって。通常、他のリソースにリクエストを転送するための空のアクションクラスを作成するために使用されます。
  3. @Actionまたは@Actionsアノテーションでクラスに注釈を付ける。
  4. クラスの命名規則に従い、名前はActionで終わり、execute()メソッドを持っている必要があります。

Struts 2 の結果

結果コンポーネントは通常、クライアントの応答を作成するためのJSPまたはHTMLページです。Struts 2は、JSPページで応答を作成するために使用できる独自のタグを提供します。StrutsタグはJSPカスタムタグの素晴らしい例です。

Struts 2 宣言型アーキテクチャと配線

Struts 2は、アクションクラスと結果ページのためにアプリケーションを構成する2つの方法を提供します。

  1. Struts XMLファイル: WEB-INF/classesディレクトリにstruts.xmlファイルがあり、そこにアプリケーションのアクションクラスや結果ページを設定できます。
  2. 注釈: クラスに関するメタデータ情報を提供するためにJava アノテーションを使用できます。Struts 2 コンベンションプラグインを使用して、@Action および @Result アノテーションで Java クラスに注釈を付け、アクションクラスと関連する結果ページを作成することができます。

私たちがアプリケーションを構成するために使用する方法に関係なく、最終的な結果は常に同じです。

Struts チュートリアル - Hello World XML ベースのアプリケーション

最初のStruts 2 Hello Worldアプリケーションを作成する方法を見ていきましょう。まず必要なのはStruts 2のjarファイルです。最も簡単な方法はStruts 2の公式ダウンロードページからダウンロードすることです。しかし、ダウンロードしたアーカイブ内のライブラリを確認すると、私たちのシンプルなアプリケーションには必要のない多くのjarファイルが見つかります。そこで、私はmavenプロジェクトを作成し、struts-core依存関係のみを追加します。他のすべての間接依存関係のjarは自動的にダウンロードされ、アプリケーションに追加されます。最終的なプロジェクト構造は下の画像のようになります。

pom.xml

pom.xmlファイルを開いて、Strutsコア依存関係を追加します。最終的な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>

私は finalName 要素をオーバーライドして、Mavenビルドを行う際にWARファイルにバージョン番号が追加されるのを避けるようにしたことに注意してください。他の部分はEclipse自体によって追加され、必要な依存関係はstruts2-coreだけで、現在のバージョンは2.3.15.1(2013年9月10日現在)です。アプリケーションのMavenビルドを実行すると、多くのJARがアプリケーションのlibディレクトリに追加され、プロジェクトのMaven依存関係セクションに次の画像のように表示されます。

Struts 2 web.xml 設定

私たちはウェブアプリケーションにorg.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterフィルターを追加し、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未満の場合、フィルタークラスはorg.apache.struts2.dispatcher.FilterDispatcherでした。

Struts チュートリアル - 結果ページ

アプリケーションで使用される3つのJSPページがあります。私たちは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であり、これらがアクションクラスでどのように使用されるかを見ていきます。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>

リクエスト属性を取得するために使用できる 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 チュートリアル - アクションクラス

私たちのアプリケーションには、Struts 2 Action インターフェースを実装している 1 つの Action クラスしかありません。LoginAction.java

package com.journaldev.struts2.action;

import com.opensymphony.xwork2.Action;

public class LoginAction implements Action {
	
	@Override
	public String execute() throws Exception {
		if("pankaj".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はリクエストパラメータをアクションクラスの変数にマッピングすることを処理します。

Struts チュートリアル - 設定ファイル

私たちのアプリケーションの配線にXMLベースの構成を使用しているので、struts.xmlという名前のStruts構成ファイルを作成する必要があります。このファイルはWEB-INF/classesディレクトリ内に配置します。struts.xml

<?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.journaldev.struts2.action.LoginAction">
	<result name="SUCCESS">/welcome.jsp</result>
	<result name="ERROR">/error.jsp</result>
	</action>

</package>

</struts>

"home" アクションにはアクションクラスがなく、結果は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 のようなものです。

Struts チュートリアル - Struts 2 ハローワールドテスト

アプリケーションを実行すると、以下の応答ページが表示されます。

Struts2 ハローワールド例プロジェクトをダウンロードする

これでStruts 2初心者向けチュートリアルは終了です。次の記事では、struts.xml構成ファイルを使用せずにアノテーションを使用してStruts 2ウェブアプリケーションを作成しますので、ぜひご覧ください。

関連記事: