Struts2によるWebアプリケーション構築手順を徹底解説(第1回)

struts2によるWebアプリケーション構築手順をサンプルソースを作りながら初心者にも分かるよう徹底解説していこうと思います。

また、strutsの書き方を解説するだけでなく、サンプルソースを作りながら学んでいこうと思うので、今回作成したプログラムを改良してみて学びを深めていってほしいです。

★記事を読む上での前提条件
(1)struts2のフレームワークについて概要だけは知っていること
(2)フレームワークとは何か知っていること
(3)Javaの基本的な文法を知っていること

Webアプリケーションの概要

今回は次のようなシンプルなWebアプリケーションを作成していこうと思います。

トップページにログイン画面を表示してIDとパスワードが一致した場合、ログイン成功画面を表示します。また、ログインが失敗した場合は、アラートメッセージを表示してログイン画面を再描画します。

環境構築をしていない人のために

環境構築をしていない人はツールやライブラリのダウンロードをすませておきましょう。

OS : MacOS X
IDE : Eclipse 4.8
フレームワーク : struts2
アプリケーションサーバ : tomcat7.0

プロジェクトの作成

Eclipseを開き、「ファイル」→「新規」→「動的Webプロジェクト」を選択して「プロジェクト名」をLoginAppとしておきましょう。

「次へ」を押下してデフォルトで作成するフォルダを設定します。ここでは「フォルダの追加」から「resources」というフォルダを作成しておきましょう。

ここで「完了」ではなく「次へ」を押下して、Webモジュールの画面で「web.xmlデプロイメント記述子の生成」にチェックをつけて完了にしてください。

次のような構成でプロジェクトが作成できていれば OKです。

Strutsのライブラリをインポートする

次にStrutsのライブラリとConfigファイルの設定をしていきましょう。

strutsを動かすのに必要なライブラリをダウンロードしてLoginApp > WebContent > WEB-INF > libの中に格納します。
★必要なライブラリ
commons-fileupload-1.3.3.jar
commons-io-2.5.jar
commons-lang-2.4.jar
commons-lang3-3.6.jar
commons-logging-1.1.3.jar
freemarker-2.3.26-incubating.jar
javassist-3.20.0-GA.jar
log4j-api-2.10.0.jar
log4j-core-2.9.1.jar
ognl-3.1.15.jar
struts2-core-2.5.16.jar
xmlpull-1.1.3.1.jar
xpp3_min-1.1.4c.jar
xstream-1.4.10.jar

web.xmlの設定

web.xmlにはアプリケーションを起動した時のトップページやサーブレットフィルターを設定することができます。

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

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns="http://xmlns.jcp.org/xml/ns/javaee"

    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

    id="WebApp_ID" version="3.1">

    <display-name>Struts2HelloWorld</display-name>

    <welcome-file-list>

        <welcome-file>/view/sample/Login.jsp</welcome-file>

    </welcome-file-list>

    <!-- Struts2のサーブレットフィルタ -->

    <filter>

        <filter-name>struts2</filter-name>

        <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>

    </filter>

    <!-- URLに対して使用するフィルタの設定 -->

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

</web-app>

Struts.xmlの設定

続いてstruts.xmlの設定をしていきましょう。struts.xmlはLoginApp > Javaリソース > resourcesの中に作成していきます。

<?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>

    <!-- アクションのパッケージ定義 -->

    <package name="default" extends="struts-default">

        <!-- Hello worldのサンプルアクション -->

        <action name="execute" class="action.UserAuthAction" method="execute">

            <result name="success">/view/auth/LoginSuccess.jsp</result>

        </action>

    </package>

</struts>

アクション/サービス/JSP/エンティティの作成

次のディレクトリ構成でアクション/JSP/エンティティを作成していきます。

アクション UserAuthAction.java 送信ボタンのイベントを受け取りサービスクラスを呼び出す
サービス UserAuthService.java

UserAuthServiceImpl.java

アクションから呼び出され受け取ったデータを加工する
エンティティ UserAuthEntity.java ユーザの入力データを格納するためのクラス
JSP Login.jsp
LoginSuccess.jsp
ログイン画面とログインした際に成功したときに遷移する画面

それぞれのクラスの中身は次のようになっています。

UserAuthAction.java

package action;

import entity.UserAuthEntity;
import impl.UserAuthServiceImpl;

public class UserAuthAction {
UserAuthEntity userAuthEntity = new UserAuthEntity();

public String execute() {

UserAuthServiceImpl impl = new UserAuthServiceImpl();

String successFlg = impl.execute(userAuthEntity);

return successFlg;
}
public UserAuthEntity getUserAuthEntity() {
return userAuthEntity;
}
public void setUserAuthEntity(UserAuthEntity userAuthEntity) {
this.userAuthEntity = userAuthEntity;
}
}

UserAuthService.java

package service;

import entity.UserAuthEntity;

public interface UserAuthService {

public String execute(UserAuthEntity entity);

}

UserAuthServiceImpl.java

package impl;

import entity.UserAuthEntity;
import service.UserAuthService;

public class UserAuthServiceImpl implements UserAuthService {
private final static String userId = "MomoEngineer";
private final static String password = "MomoEngineer";

public String execute(UserAuthEntity entity) {
String successFlg = "";
if (entity.getUserId().equals(userId) &&
entity.getPassword().equals(password)) {
entity.setSuccessFlg("success");
entity.setErrorMessage("ログインに成功しました。");
}
else {
entity.setSuccessFlg("failed");
entity.setErrorMessage("IDかパスワードが違います。");
}
successFlg = entity.getSuccessFlg();

return successFlg;
}
}

UserAuthEntity.java

package entity;

public class UserAuthEntity {

// ユーザ名

private String userId;

// パスワード

private String password;

// 成功フラグ

private String successFlg;

// エラーメッセージ

private String errorMessage;

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public String getSuccessFlg() {

return successFlg;

}

public void setSuccessFlg(String successFlg) {

this.successFlg = successFlg;

}

public String getErrorMessage() {

return errorMessage;

}

public void setErrorMessage(String errorMessage) {

this.errorMessage = errorMessage;

}

}

Login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>ログイン画面</title>

</head>

<body>

<h1>ログイン画面</h1>

<s:property value = "userAuthEntity.errorMessage"/><br/>

<s:form action="execute" >

名前 <input type="text" name = "userAuthEntity.userId"><br />

パスワード <input type="text" name = "userAuthEntity.password"><br />

<s:submit value="送信" />

</s:form>

</body>

</html>

LoginSuccess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <%@ taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>ログイン成功</title>

</head>

<body>

<s:bean name="entity.UserAuthEntity">

<s:property value = "userAuthEntity.errorMessage"/><br/>

ユーザID:<s:property value = "userAuthEntity.userId"/><br/>

</s:bean>

</body>

</html>

Tomcatで実行する

先ほど作成したプログラムをTomcat上で動かしてみましょう。

実行結果はこのようになります。

まとめ

今回はStruts2を使ってシンプルなWebアプリケーションの構築をしてみました。

JSPの中で使っているStrutsタグやプログラムを書く上での細かい注意点などは別のタイミングで解説していこうと思います。

みなさんもアプリケーションを動かすところまでやってみてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

某私立有名大学に在学中、有名ポータルサイト企業のハッカソン出場経験複するが、周囲とのプログラミングや技術力の差を実感する。 大学卒業時の就職活動で技術力をアピールするためプログラミングの学習をひたすら行い、現在某有名企業でWebアプリケーションエンジニアとして活躍中。これからは自分が経験した学習方法を発信してプログラミングが分かる楽しさを伝えていきたいと思っています!