お役立ち

Struts2入門、Eclipseの設定からHello World~2018年最新~

  • このエントリーをはてなブックマークに追加

はじめに

本記事は、初めてStruts2を学ぶ人向けの入門記事です。
Struts2はメジャーなJavaのWebフレームワークです。
しかし、新しい記事が少ないです。
そのため、入門記事を参考にアプリを作成しても
仕様変更のためHello Worldでさえ表示するのに苦労します。
そこで今回はStruts2の環境構築からHello Worldを表示するアプリの作成までを解説します。

環境構築

環境構築は下記の記事を参考にTomcat+Eclipseまでは済ませておいてください。
http://www.tech-tech.xyz/archives/tomcat-eclipse.html

つくるアプリの説明

Strutsで簡単なWebアプリケーションを作ります。
まず、フォーム画面を表示します。そして、フォームのテキストボックスに名前を入力してフォームを送信すると”Hello 名前”と画面に表示されるアプリをつくります。

プロジェクトの作成

まず、eclipseを開いてプロジェクトを作成しましょう。
File -> New -> Otherと進んでDynamic Web Projectを選択してNextを押しましょう。
(Wizardsに”web”と入力すると探しやすいです。)
dynam
Project nameにプロジェクト名(HelloWorld)を入力してFinishを押しましょう。
dynam3
トップ画面に戻ったら左上のアイコンをクリックしましょう。
するとプロジェクトの画面に遷移します。
ec_project

ビルドパスにservlet-api.jarを追加

servlet-api.jarをビルドパスに追加しましょう。
プロジェクトエクスプローラーのHelloWorldの上で右クリックしてPropertiesを押しましょう。
左ウィンドのJava Build Pathを選択して、Librariesタブを押します。
Add External JARs…を押しましょう。するとファイルエクスプローラーが開かれるので
“C:\Program Files\Apache Software Foundation\Tomcat 8.5\lib\servlet-api.jar”
を選択しましょう。ただし、servlet-api.jarのパスは環境によって異なることがあります。
“Apply and Close”を押してウィンドを閉じましょう。するとエラーが消えます。

プロジェクトにStruts2.5.13を準備

Struts 2をダウンロード

下記のリンクからStruts 2のダウンロードページへ飛びましょう。
Struts 2のダウンロードページ
はじめての方は”struts-バージョン-all.zip”となっているファイルをダウンロードしましょう。
struts
ちなみにファイルは下記のようになっています。

  • struts-2.5.13-apps.zip:サンプルアプリケーション
  • struts-2.5.13-min-lib.zip:Struts+Strutsが最低限動かすために必要なライブラリ
  • struts-2.5.1-lib.zip:Struts+Strutsのすべての機能を動かすために必要なライブラリ
  • struts-2.5.13-docs.zip:Strutsのドキュメント
  • struts-2.5.13-src.zip:Struts本体
  • struts-2.5.13-all.zip:上記全てをまとめたもの

Struts 2を追加

ダウンロードした。struts-2.5.13-all.zipを展開して
struts-2.5.13->libから次の13個のファイルを探しましょう。

  • 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.23.jar
  • javassist-3.20.0-GA.jar
  • log4j-api-2.8.2.jar
  • ognl-3.1.15.jar
  • struts2-core-2.5.13.jar
  • xmlpull-1.1.3.1.jar
  • xpp3_min-1.1.4c.jar
  • xstream-1.4.10.jar

13個のファイルをeclipseのプロジェクトエクスプローラー(左の小窓)上の
WebContent->WEB-INF->libにドラッグ&ドロップしましょう。
するとFile Operationウィンドが開かれるので”OK”を押しましょう。
ec_drag_drop

フォーム画面(index.jsp)を作る

プロジェクトエクスプローラー(左の小窓)のWebContentの上で右クリック
New->JSP Fileを押してJSPファイルを作成しましょう。
下記の画面が表示されるのでFile nameに”index.jsp”と入力して”Finish”を押しましょう。
make_jsp

index.jspの記述

以下のようにフォーム画面(index.jsp)を記述しましょう。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello World!</title>
</head>
<body>
<form action = "hello">
<label for = "name">Please enter your name</label><br/>
<input type = "text" name = "name"/>
<input type = "submit" value = "OK"/>
</form>
</body>
</html>

結果画面を作る(HelloWorld.jsp)

上のフォームによって送信された内容を元に結果を表示するページを作成します。
WebContentの直下にHelloWorld.jspを作成します。
プロジェクトエクスプローラー(左の小窓)のWebContentの上で右クリック
New->JSP Fileを押してJSPファイルを作成しましょう。
作成画面が表示されるのでFile nameに”HelloWorld.jsp”と入力して”Finish”を押しましょう。

HelloWorld.jspの記述

以下のように結果表示画面(HelloWorld.jsp)を記述しましょう。

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello World</title>
</head>
<body>
Hello World, <s:property value="name"/>
</body>
</html>

アクションファイルを作成(フォーム画面と結果画面の仲介役)

一見完成したように思えますがまだ未完成です。
なぜなら、フォーム画面から結果画面へ変数(name)を受け渡す必要があるからです。
そこで、変数の受け渡しを行うアクションファイル(HelloWorldAction.java)を作成します。
HelloWorldAction.javaをsrcの下にパッケージ名をhelloで作成します。
プロジェクトエクスプローラー(左の小窓)のJava Resources->srcで右クリック
daadffddd
New->packageを押してパッケージディレクトリを作成しましょう。
作成画面が表示されるのでName:に”hello”と入力して”Finish”を押しましょう。
New->classを押してHelloWorldAction.javaを作成しましょう。
作成画面が表示されるのでName:に”HelloWorldAction”と入力して”Finish”を押しましょう。
以下のようにHelloWorldAction.javaを記述しましょう。

package hello;
public class HelloWorldAction {
private String name;
public String execute() throws Exception {
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

ルールの記載

「フォームの処理をHelloWorldAction.excecute()で行い戻り値が”success”だったら”HelloWorld.jsp”(結果画面)を表示する」
ルールを明記する必要があります。
それはWebContent->WEB->INF->classes->struts.xmlに記述します。
classesディレクトリとstruts.xmlをプロジェクトエクスプローラーから作成しましょう。
struts.xmlを下記のように記述しましょう。

<?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>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "hello.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>

web.xmlを設定する(ルーティング)

最後にURLのルーティングを設定します。
設定ファイルはWebContent->WEB-INF->web.xmlに作成します。
URLとファイルの対応付けを下記のように記述します。

<?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>HelloWorldStruts2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

アプリケーションの起動

起動する前にファイル構成を確認

起動する前に作ったアプリケーションのファイル構成が下記の通りになっているか確認しましょう。
Hello Worldアプリのファイル構成の画像

eclipseでstruts2アプリを起動

プロジェクトエクスプローラーのHelloWorldの上で右クリック
HelloWorld->Run As->Run on Serverを押します。
インストールされているバージョンのTomcatを選択して”Next”を押します。
runonserver_tom
するとサーバーが設定されてない場合、設定画面になるのでTomcat installation directory:の欄にTomcatのインストールされているディレクトリのパスを入力して”Next”を押しましょう。
下記のような画面が表示されるのでConfiguredにHelloWorldがあるのを確認して”Finish”を押しましょう。
runresult
イクリプス上でブラウザが起動してフォーム画面が表示されます。
helloapp1
適当にフォームを入力(Taroと入力)してOKを押すと下記のように結果が表示されます。
helloapp2

Struts2アプリで404エラーが発生する初心者のつまづきポイント(おまけ)

Struts2のサンプルコードを作っているときにつまずいたところをまとめました。

The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path

先ほども説明しましたがここでもまとめておきます。
これはservlet-api.jarがビルドパスに入っていないことで起きるエラーです。
プロジェクトエクスプローラーのHelloWorldの上で右クリックしてPropertiesを押しましょう。
左ウィンドのJava Build Pathを選択して、Librariesタブを押します。
Add External JARs…を押しましょう。するとファイルエクスプローラーが開かれるので
“C:\Program Files\Apache Software Foundation\Tomcat 8.5\lib\servlet-api.jar”
を選択しましょう。ただし、servlet-api.jarのパスは環境によって異なることがあります。

java.lang.ClassNotFoundException:org.apache.struts2
.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

このエラーはweb.xmlの設定が古いのが原因の可能性が高いです。
次の2つのいずれかを使っている場合

  • org.apache.struts2.dispatcher.FilterDispatcher
  • org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

下記のように書き換えましょう。

org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

それ以外のnot found系

この場合は依存ライブラリが入ってないことが多いと考えられます。
下記のライブラリがlibの下に入っているか確認しましょう。
ファイルはstruts-2.5.13-all.zipを展開したフォルダの
struts-2.5.13->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.23.jar
  • javassist-3.20.0-GA.jar
  • log4j-api-2.8.2.jar
  • ognl-3.1.15.jar
  • struts2-core-2.5.13.jar
  • xmlpull-1.1.3.1.jar
  • xpp3_min-1.1.4c.jar
  • xstream-1.4.10.jar
  • このエントリーをはてなブックマークに追加

コメント

  1. 脳梗塞からの復帰者 より:

    HelloWorld.jspの記述がindex.jspと同じものになってます。

  2. 脳梗塞からの復帰者 より:

    少し記述がおかしいですね。同じものではなくて、結果がこのままだと食い違いませんか

  3. 脳梗塞からの復帰者 より:

    たぶんHelloWorld.jspのbody部はこうですよね。(当方はドイツ語表記にしています)

    Hallo Weld ,

  4. 「ネットサーフィンの壺」管理人 より:

    ご指摘いただきありがとうございます。
    ご指摘いただいだ通りです。
    私が記事へコードをコピーする際に間違ったようです。
    記事の修正をしました。
    「脳梗塞からの復帰者さん」ありがとうございました。

  5. 師子乃 より:

    初めまして。
    最近、strutsを勉強しなおしたかったので、とてもありがたいです。

  6. Toshix より:

    当方、
    Eclipse Version: Oxygen.2 Release (4.7.2)
    struts-2.5.18-all.zip (65MB)
    の環境でも動きました。
    ありがとうございます!

Comments are closed.