初心者向けのStrutsチュートリアルへようこそ。Strutsは、Java Webアプリケーションを構築するための最も古いフレームワークの1つです。
Strutsチュートリアル
StrutsはMVCデザインパターンの初期実装であり、JavaやJava EEの最新の技術の進化に合わせて大きく進化してきました。Strutsチュートリアルの記事は、Struts 2の基本的な詳細と最初の「Hello World」Struts 2アプリケーションの作成方法を提供することを目的としています。
Struts 2
Apache Struts 2は、オープンソースで業界標準の柔軟で拡張可能なJava EEウェブアプリケーションの構築フレームワークです。Struts 2は、OpenSymphony WebWorkフレームワークに基づいています。Struts 2は開発や設定の面で非常に柔軟であり、Struts 2フレームワークを使用してウェブアプリケーションを開発するのは非常に簡単です。
Struts 2 アーキテクチャ図
以下の図は、Webアプリケーション内のStruts 2の異なるコンポーネントを示しています。
Struts 2 インターセプタ
Struts インターセプタは、リクエストが処理される前と後に実行されるServlet フィルターのようなものです。異なるアクションで共通の操作を実行するために使用されます。例えば、ログの記録、セッションの検証、共通のヘッダーの追加などです。
Struts 2 ValueStack および OGNL
ValueStackは、クライアントのリクエストを処理するためにStruts 2によって使用されるアプリケーションデータの格納領域です。データはActionContext
オブジェクトに格納され、これらはThreadLocalを使用して特定のリクエストスレッドに固有の値を持ちます。 Object-Graph Navigation Language(OGNL)は、ValueStackに格納されたデータを操作するために使用される強力な式言語です。アーキテクチャ図に示されているように、インターセプターや結果ページの両方がOGNLを使用してValueStackに格納されたデータにアクセスできます。
Struts 2 Action
Struts 2 Actionコンポーネントはクライアントのリクエストを処理します。 Struts 2はActionクラスを作成するためのさまざまな方法を提供しています。
-
com.opensymphony.xwork2.Action
インターフェースを実装することによって。 -
com.opensymphony.xwork2.ActionSupport
クラスを拡張することによって。通常、これは別のリソースにリクエストを転送するために空のアクションクラスを作成するために使用されます。 - @Actionまたは@Actions注釈をクラスに付けることによって。
- クラスの名前に対する規約に従うことで、名前はActionで終わり、execute()メソッドを持っている必要があります。
Struts 2 の結果
結果のコンポーネントは通常、クライアントのレスポンスのためにビューを作成するための JSP または HTML ページです。Struts 2 は、JSP ページで使用できる独自のタグを提供しています。Struts タグはJSP カスタムタグの優れた例です。
Struts 2 の宣言的アーキテクチャと配線
Struts 2 は、アクションクラスと結果ページを構成するための2つの方法を提供しています。
- Struts XML ファイル: WEB-INF/classes ディレクトリにstruts.xmlファイルがあり、ここでアプリケーションのアクションクラスと結果ページを構成できます。
- アノテーション: Java アノテーションを使用してクラスにメタデータ情報を提供できます。Struts 2 コンベンションプラグインを使用して、Java クラスに@Actionおよび@Resultアノテーションを付けてアクションクラスと関連する結果ページを構成できます。
どのようにアプリケーションを構成しても、最終的な結果は常に同じになります。
Strutsチュートリアル – 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でのプロジェクトのセットアップは完了しましたので、順番に異なるコンポーネントを見てみましょう。
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でビルドするだけで、アプリケーションのlibディレクトリに多くのjarファイルが追加され、以下の画像のようにプロジェクトのMaven Dependenciesセクションに表示されます。
Struts 2 web.xmlの構成
Webアプリケーションに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未満の場合、filter-classは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>
ログイン.jspと同じ名前であるstrutsタグs:propertyに注意してください。 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アクションインターフェイスを実装している唯一のアクションクラスがあります。 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
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;
}
}
アクションクラスもログイン.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 Hello Worldテスト
アプリケーションを実行すると、以下の応答ページが表示されます。
Struts2 Hello World Example Projectをダウンロード
これで、Struts 2初心者向けチュートリアルは終わりです。次の記事では、注釈を使用してstruts.xml構成ファイルを使用せずにStruts 2 Webアプリケーションを作成します。
Source:
https://www.digitalocean.com/community/tutorials/struts-tutorial-for-beginners