Java >> Java チュートリアル >  >> Java

初心者向けStrutsチュートリアル

Apache ストラット Java Enterprise Web アプリケーションを開発するためのオープン ソース フレームワークです。 Java Servlet API を使用して、Model-View-Controller (MVC) デザイン パターンに基づいて Web アプリケーションを実装します。

現在、Struts の最新バージョンは Struts 2 であるため、ここでは Struts 2 フレームワークについて説明します。

1. Struts の仕組み

Struts 2 MVC は、アクション、結果、および ServletFilter という 3 つのコア フレームワーク コンポーネントによって実現されます。以下の図は、これら 3 つのコンポーネントがどのように相互作用するかを示しています。

1.1.サーブレット フィルタ

サーブレット フィルターは、Struts 2 のコントローラーとして機能します。サーブレット フィルターは、各着信要求を調べて、どの Struts 2 アクションがその要求を処理する必要があるかを判断します。フレームワークは、アプリケーションのすべてのコントローラー作業を処理します。すべてのリクエスト URL は、XML ベースの構成ファイルまたは Java 注釈を使用してアクションにマップする必要があります。

1.2.インターセプター

インターセプターは、リクエスト処理の前後に実行されます。それらは分野横断的なタスクを提供するため、簡単に再利用できるだけでなく、他のアーキテクチャの問題から分離することもできます。たとえば、ログイン アクションを呼び出す前の検証パラメーター。

1.3.アクション

Action は、クライアントの要求を 2 つの異なる方法で処理します。まず、アクションは、JSP であるか他のタイプの結果であるかに関係なく、リクエストからビューへのデータ転送において重要な役割を果たします。第二に、アクションは、リクエストへのレスポンスで返されるビューをレンダリングする必要がある結果をフレームワークが決定するのを支援する必要があります。

1.4.結果

結果は、クライアント応答のビューを作成するための JSP または HTML ページです。 Struts 2 は、応答を作成するために JSP ページで使用できる独自のタグを提供します。 Struts タグは、JSP カスタム タグの好例です。

2. Struts の簡単なログインの例

それでは、Struts2 で簡単な例を作成してみましょう。次の例は、Eclipse 3.6 で実装され、tomcat 8 で実行されます。

まず、Eclipse で動的 Web プロジェクトを作成します。

次に、プロジェクトを Maven プロジェクトに変換します。 Maven pom ファイルは、プロジェクトのルート ディレクトリに生成されます。

それでは、pom.xml ファイルを見てみましょう。

2.1. pom.xml

pom.xml を開く ファイルを開き、ここで必要な唯一の依存関係である Struts2 コア依存関係を追加します。最後の pom.xml 以下のようになります。

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>Struts2tutorial</groupId>
    <artifactId>Struts2tutorial</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.apache.Struts</groupId>
            <artifactId>Struts2-core</artifactId>
            <version>2.3.24</version>
        </dependency>
        <dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
    </dependencies>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
            <resource>
                <directory>src/com/java/code/geeks/resources</directory>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</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>

依存関係を追加し、fileName をオーバーライドしました。 maven ビルド中に WAR ファイルにバージョン番号が追加されないように、fileName が変更されました。また、リソース フォルダーはここで構成されます。次に、maven ビルド中にリソース ファイルが /WEBINF/classes にコピーされます これにより、Web アプリケーションでリソースを使用できるようになります。

ここで、アプリケーションの Maven ビルドを行うと、必要なすべての jar がアプリケーションの lib ディレクトリに追加され、プロジェクトの Maven 依存関係セクションに表示されます。

2.2. web.xml

web.xml 、Web アプリケーション記述子ファイルは Java Web アプリケーションのコアを表すため、Struts フレームワークのコアの一部でもあることが適切です。 web.xml で ファイルで、Struts はコントローラを定義します。これは、Struts フレームワークを初期化し、すべてのリクエストを処理するサーブレット フィルタ クラスです。このフィルターには、追加の構成ファイルが読み込まれる場合に影響を与える初期化パラメーターと、フレームワークの動作方法を含めることができます。

org.apache.Struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter を設定します ここで Web アプリケーションへのサーブレット フィルターとして。次に、Struts 2 ディスパッチャを /* にマッピングしました。 であるため、Struts 2 にはすべての着信要求にクラックがあります。

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" 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>Struts2tutorial</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>

  <welcome-file-list>
    <welcome-file>/login.jsp</welcome-file>
  </welcome-file-list>
</web-app>

ヒント

ディスパッチャ フェーズを分割するために、Struts 2.1.3 以降、FilterDispatcher は非推奨になりました。古いバージョンで作業する場合は、org.apache.Struts2.dispatcher.FilterDispatcher を使用する必要があります .

2.3.アクション クラス

Action を実装するアクション クラスは 1 つだけです。 インターフェース。 LoginAction execute を実装する必要があります クライアントのリクエストを処理し、適切な結果を返すメソッド。

LoginAction.java

package com.java.code.geeks.action;

import com.opensymphony.xwork2.Action;

public class LoginAction implements Action {

    @Override
    public String execute() throws Exception {
        if (validateString(getUsername()) && validateString(getPassword()))
            return "SUCCESS";
        else return "ERROR";
    }

    //Java Bean to hold the form parameters
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    private boolean validateString(String str) {
        if (str != null && !str.equals(""))
            return true;
        return false;
    }
}

LoginAction getter メソッドと setter メソッドを含む Java Bean としても機能します。 Struts は、リクエスト パラメータからアクション クラス変数へのマッピングを処理します。

2.4.結果ページ

このチュートリアルには、Web アプリケーションで使用される 3 つの Jsps があります。 Struts タグを使用して Jsp ページを作成しています。

2.4.1.ログインページ

フォーム フィールドが username になっていることがわかります そして password .それらは LoginAction で使用されます クラス。

login.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ 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 to Struts 2 Login Tutorial</h3>
    <s:form action="home">
        <s:textfield name="username" label="User Name"></s:textfield>
        <s:textfield name="password" label="Password" type="password"></s:textfield>
        <s:submit value="Login"></s:submit>
    </s:form>
    </body>
</html>

2.4.2.ようこそページ

Struts タグ s:property ここではユーザー名であるリクエスト属性を取得するために使用されます。

welcome.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="/Struts-tags" prefix="s"%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
        <title>Welcome To Struts 2 Tutorial</title>
    </head>
    <body>
        <h3>Welcome <s:property value="username"></s:property>!</h3>
    </body>
</html>

2.4.3.エラーページ

これは単純な JSP です エラー を含むページ メッセージに応答してログインページを含めます。

error.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="/Struts-tags" prefix="s"%>
<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>

2.5. Struts.xml

Struts.xml src の resources フォルダーに作成されます。 Struts 構成は、action のマッピングを担当します。 と result ウェブアプリケーションで。

Struts.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://Struts.apache.org/dtds/Struts-2.3.dtd">
<Struts>
    <package name="default" namespace="/" extends="Struts-default">
        <action name="login">
            <result>/login.jsp</result>
        </action>
        <action name="home" class="com.java.code.geeks.action.LoginAction">
            <result name="SUCCESS">/welcome.jsp</result>
            <result name="ERROR">/error.jsp</result>
        </action>
    </package>
</Struts>

アクション ログインの場合、Action クラスはなく、結果は 1 つだけです。クライアントのリクエストは login.jsp に転送されます ログイン アクションが要求されたときのページ。

アクション ホームの場合、LoginAction はアクション クラスで、execute() の場合 メソッドは SUCCESS を返します リクエストは welcome.jsp によって処理されます ERROR の場合 error.jsp に転送されます ページ。 namespace="/" Struts のルート名前空間です。

これで、URL http://localhost:8080/Struts2tutorial/login.action でアプリケーションにアクセスできます . URL が .action で終わっていることに注意してください これは、.do のような Struts 2 アクションのデフォルトの接尾辞です。 ストラット用 1.

最終的な Web プロジェクトは、次のフォルダー構造になります。

2.6. Tomcat で Web アプリケーションを実行する

アプリケーションを Tomcat サーバーにデプロイした後、以下の結果を確認できます。

2.6.1.ログインページ

2.6.2.ようこそページ

2.6.3.エラーページ

3.コード プロジェクトをダウンロード

これは eclipse.struts の Struts 2 の例でした

Java タグ