Java-Struts2導入について
の編集
https://erion1107-pukiwiki.erion1107.net/?Java-Struts2%E5%B0%8E%E5%85%A5%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
kiji-template
2018年度学習計画メモ
20180217-01-オフラインインストール発表用メモ
Ansible構成例
AWS認定ソリューションアーキテクト・アソシエーション認定テスト対策
bashコーディング規約
BracketName
CentOS7で自宅サーバー作成勉強用リスト
CentOS 7とSamba4で自宅用Active Directory Domain Controller (AD DC)を構築する① インストール編
CloudflareとLet’s EncryptでWebサイトをHTTPS化
COBOLプログラミング入門
conoHaAPIまとめ
Docker-Command一覧
DockerCommandCheatSheet
Docker_Cmd_List
ERION1107-mywiki
erion1107-mywiki
ERION1107自分用のwiki
ESXiインストールについて
FontPage
FormattingRules
FPGAのアーキテクチャとソフトエラー起因の可用性低下
FrontPage
F#EntryForWeb
F#入門
Help
IaC for Ansible with Windows OS
Install_Redmine3.4_with_CentOS7.3
InterWiki
InterWikiName
InterWikiSandBox
Java-Struts2導入について
JavaSwingコンポーネント
Java入門
Java入門2
Linux 標準教科書に出てくるコマンドリスト
matplotlib-円グラフの作成メモ
MBSAについて
MenuBar
Non-BlockingIOを使ってみよう-Java編
PHP
PowerShell入門
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
pukiwiki記法の書き方入門
python-code-memo
re-view入門
RecentDeleted
SandBox
SoftEther VPN for Linuxについて
SoftEtherVPNについて
Spring解体新書メモ
SQL_Entry
StudyCentOSForWebSiteBuild
Tips作業メモ
UML
UNIXコマンド
Using_Prism.Unity_with_WPF
Vagrant入門
VivlioStyleで行こう!
VPNのススメ
WikiEngines
WikiName
WikiWikiWeb
WindowsPhone開発のためのPrism+ReactiveProperty基本
WindowsとLinuxのオフラインインストールについて調べてみた
WindowsとLinuxのオフラインインストールについて調べてみた 2
wireshark
WSL(Windows Subsystem for Linux)の基本Memo
yaml-sample
YAMLを覚えよう
YukiWiki
ZABBIX
■Redmine On Docker
お仕事用メモ
はじめてのアプリ発注
アプリ開発後に行う動作テストについて
カタン戦術論
デザインパターン23種
プレゼン発表のコツ
レンタルサーバーに独自SSL「Let's Encrypt」導入(Windows10編)
個人アプリ開発のメモ
勉強会発表用メモ
自分用のpukiwiki
記憶術メモ
#contents コミュニティ ユーザ登録ログイン F37fc642e7ac0bf345e6a0d28e497e68 @tarosa0001 2018年02月19日に更新 【超初心者向け】Struts2超入門 - 2018年版 JavaEclipseWebstruts2Servlet,JSP 2 * はじめに [#s08ac405] レガシーという人もいるかも知れませんが、Struts2の入門編の記事です。 最近ではクライアントサイドの新しい技術も発展し、Struts2はおろか、サーバサイドの技術そのものがレガシーという人もいるかも知れません。 しかしながら、現役で動いているものにぶつかってしまったときは、どうしても理解が必要なものです。 筆者は最近そんなパターンにぶつかって、頑張って勉強しました。 HelloWorldを作ろうとした時、中々すべてをカバーする文献が見つからず苦労したので、その時の備忘を兼ねて今回の記事を執筆します。 Struts2は、レガシーと言われても、割とバージョンアップが盛んなようで、まだ新しくなり続けています。 一旦、今回の記事執筆時点で最新のバージョンを使用して、Struts2の開発環境が構築できるものを、HelloWorldを通じて紹介していきたいと思います。 * 1. Strutsとは [#eee39380] Javaで実装するMVCモデルを採用したWebアプリケーションフレームワークです。 MVCモデルとは、Model(データ)、View(画面)、Controller(業務ロジック)を分離して実装しようという考え方です。 ただし、Struts2にはVとCを分離する機能はあっても、MをCから分離する機能は提供されていないので、そこは別にORマッパなどを導入して実現することが多いです。 ** 1.1. Struts2の生い立ち [#pe731458] 以前、Strutsというフレームワークが存在し、一世を風靡した時代がありましたが、Struts2は根本的には別物です。 元々の開発経緯も全く別物で、「WebWork2」という名称で開発されていて、Strutsのサポート終了とともに、その名称がStruts2に変更されたというもののようです。 Struts2は現在もまだサポートが続いており、新しいバージョンも割と頻繁にリリースされています。 ** 1.2. Struts2導入のメリット [#qdd34933] 少し話がそれましたが、企業システムなど、大規模なWebアプリケーションにStruts2を導入することで飛躍的に生産性が向上できます。 また、Struts2に限ったことではありませんが、フレームワークを導入することで、開発者のクセによる実装方針の違いなどを吸収し、平準化すことができます。 ただ、導入に手間がかかるので、小規模の開発には向かないと筆者は考えています。 * 2. 開発環境構築 [#f14b47d1] これから、Struts2でHelloWorldを実現するための、開発環境を構築していきます。 構築方法には、3通りあります。 + 1.自力で構築 + 2.Mavenで構築 + 3.公式の空プロジェクトを使用 今回は、自力で構築します。 2は、まずMavenを勉強する必要があることと、環境によっては使用できないこともあります。 3は、使おうとしても、デフォルトの状態からエラーで起動できないので、使うくらいなら自力で構築したほうが早いです。 ※個人的にはちゃんとエラーのないものを提供してほしいと思ってます… よって、手を動かして覚えることも兼ね、自力で構築しましょう! ** 2.1. Eclipseプロジェクトの作成 [#aebea814] 筆者は基本開発には統合開発環境を使用します。 Java系の開発では基本Eclipseを使用すると思いますが、今回もEclipseを使用します。 筆者が使用している環境は「Eclipse4.4(Luna)」です。 Eclipseのバージョンは同じでなくてもできますので、読者の方々は手近なものを使用してください。 + ①ファイル > 新規 > その他 > Web > 動的Webプロジェクトを選択し次へ進みます。 p1.jpg + ②次の情報を入力して次へ進みます。 設定項目 設定値 プロジェクト名 Struts2HelloWorld ※プロジェクト名は自由に決めていただいて構いません ターゲット・ランタイム Tomcat8 (Java8) 動的webモジュールバージョン 3.1 構成 Tomcat8 (Java8)デフォルト構成 p2.jpg + ③フォルダーの追加で「resources」フォルダを追加して次へ進みます。 p3.jpg + ④web.xmlデプロイメント記述子の生成にチェック入れ、完了します。 p4.jpg + ⑤次の画像のようにプロジェクトができれば、プロジェクト作成完了です。 p5.JPG ** 2.2. Struts2の導入 [#m2cb44e1] 作成したプロジェクトにStruts2を導入します。 *** 2.2.1. Struts2のダウンロード [#b6c9c7d5] こちらからStruts2をダウンロードします。 本記事執筆時点で最新は、「2.5.14.1」のようです。 HelloWorldでは使用しませんが、サンプルアプリケーション付きの「struts-2.5.14.1-all.zip」をダウンロードします。 また、後で必要になるので、「log4j-core-2.9.1.jar」を別にダウンロードしておいてください。 p6.jpg 「struts-2.5.14.1-min-lib.zip」は最少構成でのStruts2の空プロジェクトです。 筆者の環境では、最初からエラーで起動できませんでした。 解決するのも面倒くさかったので、筆者は最初から自力で構築しましたが、こちらをうまく使えるようにできたというかたは、コメントいただけると幸いです。 *** 2.2.2. 必要ライブラリの配置 [#hf4cdeef] プロジェクトにStruts2を導入します。 ダウンロードしたstruts-2.5.14.1-all.zipを解凍し、libフォルダから以下のjarファイルを「プロジェクトルート/Struts2HelloWorld/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.9.1.jar log4j-core-2.9.1.jar 別にダウンロードしたjarファイルです。 ognl-3.1.15.jar struts2-core-2.5.14.1.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.10.jar こちらがStruts2を動かす上での最少ライブラリ構成です。 p7.JPG *** 2.2.3. 設定ファイルの配置 [#ld5d5a1c] 「/Struts2HelloWorld/resources」にStruts2の設定ファイルである、「struts.xml」を作成します。 余談ですがStruts2では、ゼロコンフィギュレーションと言って、XMLによる設定ファイルはなくてもアプリケーションを実装できます。 しかし、開発者はXMLが好きなのかStruts2を導入していても、筆者が見てきたケースは大体XMLが書いてあります。 アプリケーションの設定が、このファイルだけみれば分かるという利点はあるものの、わざわざ設定ファイルを書く手間を考えれば、ないものはないに越したことはないと筆者は考えています。 特にStruts2では、冒頭でも述べたとおり、SpringやORマッパといったほかのフレームワークと組み合わせて使うことが多く、フレームワークごとにXMLによる設定ファイルが必要なので、管理すべきXMLがむちゃくちゃ増えます。 その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> <!-- アクションのパッケージ定義 --> <package name="default" extends="struts-default"> <!-- Hello worldのサンプルアクション --> <action name="hello" class="sample.HelloWorldAction" method="execute"> <result name="success">/view/sample/HelloWorld.jsp</result> </action> </package> </struts> もう一つ、ログ出力ライブラリである「log4j2」の設定ファイル「log4j2.xml」を配置します。 ■log4j2.xmlの記載内容(コメントの部分は任意に復活させてください) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration> <Configuration status="off"> <!-- ログに使用するAppenderの設定 --> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}], %-5p, %t, %c, %m%n</pattern> </PatternLayout> </Console> <RollingFile name="FILE" fileName="./log/appLog.log" filePattern="appLog-%d{yyyy-MM-dd}-%i.log"> <TimeBasedTriggeringPolicy /> <!-- <SizeBasedTriggeringPolicy size="100MB" /> --> <DefaultRolloverStrategy max="3"/> </RollingFile> </Appenders> <!-- 出力に使用するロガーの設定 --> <Loggers> <Root level="DEBUG"> <AppenderRef ref="STDOUT" level="INFO"/> <!-- <AppenderRef ref="FILE" /> --> </Root> </Loggers> </Configuration> これは必要ありませんが、「struts.properties」というファイルを同フォルダに配置し、「struts.ui.theme=simple」と記載しておくとStruts2による自動スタイルシートタグ生成が抑制できるので便利です。 ** 2.3 構成の確認 [#ff1ec868] ここまでで、Struts2の導入が完了しました。 結構な量の作業をしたので、構成したプロジェクトのツリーを記載します。 プロジェクトが以下のツリーになっていれば開発環境の構築は完了です。 ■プロジェクトのツリー構成 アプリケーションルート ├─src ├─resources │ log4j2.xml │ struts.properties │ struts.xml │ ├─build │ └─classes ※ここにはソース・フォルダに配置した資材と同じものが自動で生成されます │ log4j2.xml │ struts.properties │ struts.xml └─WebContent ├─META-INF │ MANIFEST.MF │ └─WEB-INF │ web.xml │ └─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.9.1.jar log4j-core-2.9.1.jar ognl-3.1.15.jar struts2-core-2.5.14.1.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.10.jar * 3. アプリケーションの実装 [#nf0f48d4] 開発環境の構築ができましたので、ここからはアプリケーション本体の実装に入っていきます。 ** 3.1. トップページの準備 [#y577dfa4] アプリケーションアクセス時のトップページを準備します。 今回はJSPを使って実装します。 WebContentを右クリック > 新規 > JSPでダイアログを開きます。 ファイル名に「index.jsp」と入力して完了します。 p8.jpg ■index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- Struts2のタグライブラリを使用可能にする --> <%@ taglib prefix="s" uri="/struts-tags"%> <!-- タイプ宣言はHTML5のものを使用する --> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Struts2でHelloWorld</title> </head> <body> <!-- 入力フォームはStruts2のタグを使用します --> <s:form action="hello"> <s:textfield name="name" /> <s:submit value="HelloWorldページへ行く" /> </s:form> </body> </html> ** 3.2. Actionの実装 [#td333f25] Struts2において、JSPからサブミットされた際など、Webアプリケーションの処理を担うクラスをActionと呼びます。 Actionや、遷移先のページは、struts.xmlに定義しているのですが、その説明は後程行うので、現時点では、下記の通り実装してください。 srcフォルダを右クリック > 新規 > クラスから、次の情報を入力して完了してください。 入力項目 入力値 パッケージ sample 名前 HelloWorldAciton p9.jpg ■HelloWorldAciton package sample; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * [HelloWorldのアクションクラス]<br> * <br> * @author tarosa0001 */ public class HelloWorldAction { /** ロガー */ private Logger logger = LogManager.getLogger(HelloWorldAction.class); /** 名前 */ private String name; /** * [アクション実行処理]<br> * HelloWorldを出力する処理を実行する。<br> * 実行するメソッドは、struts.xmlで指定したメソッド名を使用して実装する。<br> * Struts2ではアクションの処理結果でページの遷移先を決定するが、 * 今回は"success"の固定文字列を返却する。<br> * <br> * @return */ public String execute() { logger.info("入力されたパラメータは「{}」です。", name); return "success"; } /** * [名前取得処理]<br> * 名前を取得します。<br> * Struts2がフォームに入力された値をパラメータとしてする際、 * getterを使用するため、パラメータとして使用したい情報は、 * Actionクラスのプロパティとして宣言しておき、getterを用意する。 * <br> * @return 名前 */ public String getName() { return name; } /** * [名前設定処理]<br> * 名前を設定します。<br> * getter同様、ページ間で受け渡したい値はsetterを用意しておく。<br> * <br> * @param name 名前 */ public void setName(String name) { this.name = name; } } ** 3.3. 遷移先の実装 [#c9ce3f9f] トップページのボタンを押した際の遷移先を実装します。 WebContentディレクトリ内にview/sampleフォルダを作成し、そちらに遷移先ページを配置します。 配置ディレクトリ自体はWebContent内であればどこでもいいのですが、今回は上記ディレクトリとします。 トップページと同様の手順でsampleフォルダ内に「HelloWorld.jsp」を追加してください。 ■HelloWorld.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello Struts2 world!</title> </head> <body> <!-- メッセージの間に渡されたデータを表示します。 --> Hello Struts2 world, <s:property value="name" />さん </body> </html> ** 3.4. アプリケーション設定の更新 [#v09cef9d] ここまでで、アプリケーションの処理自体は実装完了です。 最後に、実装したアプリケーションがStruts2アプリケーションとして動作するための設定を行います。 プロジェクトのWEB-INF内に存在している「web.xml」を次のように変更してください。 Struts2というよりは、Webアプリケーション自体の基礎知識になるので、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> <!-- アプリケーションルートであクセした時の表示ファイル設定 --> <!-- 必要はありませんが、今回はURLの入力間違いも防ぐため、index.jspのみとします。 --> <welcome-file>index.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> ** 3.5. 実装の完了 [#z1dd3d1a] web.xmlの設定も更新し、いよいよStruts2アプリケーションの実装完了です。 確認のため、最終的なツリーを記載します。 ■完成したプロジェクトのツリー プロジェクト・ルート ├─src │ └─sample │ HelloWorldAction.java │ ├─resources │ log4j2.xml │ struts.properties │ struts.xml │ ├─build │ └─classes │ │ log4j2.xml │ │ struts.properties │ │ struts.xml │ │ │ └─sample │ HelloWorldAction.class │ └─WebContent │ index.jsp │ ├─META-INF │ MANIFEST.MF │ ├─view │ └─sample │ HelloWorld.jsp │ └─WEB-INF │ web.xml │ └─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.9.1.jar log4j-core-2.9.1.jar ognl-3.1.15.jar struts2-core-2.5.14.1.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.10.jar * 4. 実行 [#b087b502] さて、ここまでで実装と設定が完了しました。 いよいよ、実装したアプリケーションを動かします。 ** 4.1. Tomcatの準備 [#yb58b492] Webアプリケーションを動作させるためのサーブレットコンテナを準備します。 今回は、Tomcatをサーブレットコンテナとして使用します。 + ①ウィンドウ > ビューの表示 > その他 > サーバを選択し、サービューを表示してください。 p10.jpg + ②表示されたサーバー・ビューの余白を右クリック > 新規 > サーバーを選択し、新規サーバーダイアログを表示します。 「Tomcat v8.0 サーバー」を選択し、次へ進みます。 p11.jpg + ③Struts2HelloWorldを追加して完了します p12.jpg ※Struts2HelloWorldが追加できない場合、プロジェクトの作成に失敗している可能性があります。 プロジェクトの構成がTomcat8に対応しているか確認してください。 ** 4.2. Tomcatの起動 [#b00626f4] Tomcatを起動します。 サーバー・ビューに追加されたTomcatを右クリックし、開始してください。 p13.jpg 以下のような文字列がコンソールに出力されます。 赤字で出てきますが、エラーではありません。 ■コンソールの出力内容 ※警告は無視してください。 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Struts2HelloWorld' did not find a matching property. [火 2 13 00:39:25 JST 2018] 情報: Server version: Apache Tomcat/8.0.20 [火 2 13 00:39:25 JST 2018] 情報: Server built: Feb 15 2015 18:10:42 UTC [火 2 13 00:39:25 JST 2018] 情報: Server number: 8.0.20.0 [火 2 13 00:39:25 JST 2018] 情報: OS Name: Windows 7 [火 2 13 00:39:25 JST 2018] 情報: OS Version: 6.1 [火 2 13 00:39:25 JST 2018] 情報: Architecture: amd64 [火 2 13 00:39:25 JST 2018] 情報: Java Home: C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\eclipse\jre\jre [火 2 13 00:39:25 JST 2018] 情報: JVM Version: 1.8.0_40-b25 [火 2 13 00:39:25 JST 2018] 情報: JVM Vendor: Oracle Corporation [火 2 13 00:39:25 JST 2018] 情報: CATALINA_BASE: C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\sample\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 [火 2 13 00:39:25 JST 2018] 情報: CATALINA_HOME: C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\tomcat\8 [火 2 13 00:39:25 JST 2018] 情報: Command line argument: -Dcatalina.base=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\sample\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 [火 2 13 00:39:25 JST 2018] 情報: Command line argument: -Dcatalina.home=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\tomcat\8 [火 2 13 00:39:26 JST 2018] 情報: Command line argument: -Dwtp.deploy=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\sample\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps [火 2 13 00:39:26 JST 2018] 情報: Command line argument: -Djava.endorsed.dirs=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\tomcat\8\endorsed [火 2 13 00:39:26 JST 2018] 情報: Command line argument: -Dfile.encoding=UTF-8 [火 2 13 00:39:26 JST 2018] 情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\eclipse\jre\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Users/Nakajima/Desktop/Personal/スキルアップ/pleiades/eclipse/jre/bin/../jre/bin/server;C:/Users/Nakajima/Desktop/Personal/スキルアップ/pleiades/eclipse/jre/bin/../jre/bin;C:/Users/Nakajima/Desktop/Personal/スキルアップ/pleiades/eclipse/jre/bin/../jre/lib/amd64;C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\java\8\bin;C:\gradle-4.0\bin;C:\app\Nakajima\product\11.2.0\dbhome_1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Justsystems\JSLIB32\;C:\Program Files (x86)\Sony\VAIO Startup Setting Tool;C:\Program Files (x86)\Common Files\Sony Shared\FeliCaLibrary;C:\Program Files\Common Files\Sony Shared\FeliCaLibrary;C:\Program Files (x86)\Common Files\Sony Shared\FeliCaNFCLibrary;C:\Program Files\Common Files\Sony Shared\FeliCaNFCLibrary;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\maven\bin;C:\Program Files\nodejs\v6.10.2\;C:\cygwin64\bin;C:\Users\Nakajima\AppData\Roaming\npm;C:\ProgramData\Oracle\Java\javapath;;C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\eclipse;;. [火 2 13 00:39:26 JST 2018] 情報: Initializing ProtocolHandler ["http-nio-8080"] [火 2 13 00:39:26 JST 2018] 情報: Using a shared selector for servlet write/read [火 2 13 00:39:26 JST 2018] 情報: Initializing ProtocolHandler ["ajp-nio-8009"] [火 2 13 00:39:26 JST 2018] 情報: Using a shared selector for servlet write/read [火 2 13 00:39:26 JST 2018] 情報: Initialization processed in 951 ms [火 2 13 00:39:26 JST 2018] 情報: サービス Catalina を起動します [火 2 13 00:39:26 JST 2018] 情報: Starting Servlet Engine: Apache Tomcat/8.0.20 [火 2 13 00:39:26 JST 2018] 情報: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [117] milliseconds. [火 2 13 00:39:26 JST 2018] 情報: Starting ProtocolHandler ["http-nio-8080"] [火 2 13 00:39:30 JST 2018] 情報: Starting ProtocolHandler ["ajp-nio-8009"] [火 2 13 00:39:30 JST 2018] 情報: Server startup in 4438 ms [火 2 13 00:39:30 JST 2018] 「Server startup~」と出れば起動完了です。 ** 4.3. アプリケーションにアクセス [#s3243793] ブラウザを起動し、以下のURLを入力し、Webアプリケーションにアクセスします。 「http://localhost:8080/Struts2HelloWorld」 すると、実装したindex.jspの内容が表示されます。 p14.jpg ** 4.4. HelloWorldページに遷移 [#n3d32fa0] では、ここまで長々と実装してきたHelloWorldを実行します。 テキストボックスに任意の値を入力し、「HelloWorldページへ行く」をクリックしましょう。 おめでとうございます!テキストボックスの入力値が受け継がれ、HelloWorldが表示できました! p15.jpg Actionにログを出力する処理を実装しているので、受け渡したデータはコンソールに出力しているログで確認できます。 * 5. アプリケーションの説明 [#paa3cee6] 皆様、お疲れ様でした。 ここまでで、HelloWorldの実装が完了しました。 ここからは、アプリケーションの説明をしていきます。 ** 5.1. JSPとアクション [#n1adf639] Struts2では、MVCモデルを採用しています。 多くの場合、View(画面)は、JSPを用いて実装し、JSPの各フォームやリンクなどの処理は、Javaを用いたクラスで実装します。 *** 5.1.1. Action [#q2737324] Actionとは、Struts2での業務処理を行うクラスです。 JSPのフォームをサブミットしたとき、Struts2の機能により、Actionが呼び出されます。 どのフォームでどんなActionを行うかは、formタグとStruts.xmlに定義します。 今回、HelloWorldのActionは、ここで設定しています。 <!-- formタグのaction属性で実行するActionを指定します。 --> <s:form action="hello"> Struts2では、JSPで使用できるタグライブラリが提供されており、Struts2を使用してアプリケーションを実装する場合、多くはこのStruts2提供のタグライブラリを使用します。 formをサブミットした時に使用するActionは、<s:form>タグの、action属性に指定し、Actionの具体的な設定は、Struts.xmlに記載します。 Struts.xmlについては、後述しますので、そちらで詳しく説明します。 *** 5.1.2. 受け渡すデータ [#b036b00c] 画面上で入力したフォームなど、次の画面やActionクラスで使用するデータは、Actionクラスにプロパティとして保持します。 JSP上のタグに設定したname属性と一致する名称のプロパティを設定しておくと、Struts2の機能でフォームに対応したプロパティに値が設定されます。 今回はindex.jspで入力した名前しか受け渡していませんが、ページが大きくなると受け渡すデータが増えます。 そんな場合に、データを塊として保持するクラスが作りたい場合も出てくるでしょう。 そんな場合は、name属性に「.(ドット)」をつけて「クラス名.プロパティ名」の形式で記載します。 ■例:LoginInfoクラスのnameに値を設定する場合 <s:textfield name="LoginInfo.name" /> ** 5.2. Struts.xml [#scc47419] Struts.xmlは、Struts2の動きを制御する設定ファイルです。 こちらには、先ほど説明したformタグでのActionの設定や、アプリケーションで使用する定数などを定義します。 定数については、少ししか触れていませんが、struts.propertiesにまとめて記載することも出来ます。 他にもいろんな設定がありますが、ここでではHelloWorldで使用したActionのみ説明します。 Struts.xml中、HelloWorldのActionの設定はここです。 ■HelloWorldのアクション設定箇所 <!-- Hello worldのサンプルアクション --> <action name="hello" class="sample.HelloWorldAction" method="execute"> <result name="success">/view/sample/HelloWorld.jsp</result> </action> Struts2では、Actionの名前、使用するクラス、メソッドを設定します。 定義したAction内に、Actionクラスからの戻り値によって、次の遷移先を定義します。 今回は、戻り値が"success"の場合しか定義していませんが、Action内の処理の結果によって遷移先を分けたい場合は、戻り値ごとに<result>タグを記載します。 遷移先のJSPは、WebContentをルート(/)として、それ以降のツリーを記載します。 遷移元のJSPからの相対パスでも設定できますが、ずれたりすることもあるので、アプリケーションルートからの絶対パスで記載する方がよいでしょう。 ** 5.3. web.xml [#c466813b] web.xmlとは、Webアプリケーションの設定を記載するファイルですが、Struts2を使用する場合、Struts2用のサーブレットフィルタとマッピングを定義する必要があります。 こちらは特に変わったことをしない限り、上述したweb.xmlの内容から変わることはありません。 * 最後に [#oea78781] ここまでで、Struts2を使用したWebアプリケーションのサンプルと、アプリケーションの説明はすべてです。 今回はあくまでサンプルですので、本当に最少構成で実装しました。 新規で一からStruts2アプリケーションを構築することは中々ないかもしれませんが、他にもいろんな機能があるので、興味がある方は是非試してみてください。 EX. 参考Web 今回の記事を執筆するに当たり、以下に掲載するWebページを参考にさせていただきました。 ・2014年度版 Eclipse + Struts2 による Java Web アプリ開発入門 http://www.cyokodog.net/blog/first-struts2/ F37fc642e7ac0bf345e6a0d28e497e68 @tarosa0001 tarosa0001です。 いろんなところに散らばっている技術的ノウハウを、勉強したついでに集めて記載していきます。 よろしくお願いいたします。 フォロー ストック いいね2 ツイート Toot あなたもコメントしてみませんか :) ユーザー登録(無料) すでにアカウントを持っている方はログイン © 2011-2018 Increments Inc. 利用規約 プライバシー ヘルプ お問い合わせ Qiitaとは ユーザー タグ 投稿 ブログ API Team ご意見 https://qiita.com/tarosa0001/items/889faa2ab5853005f26b
タイムスタンプを変更しない
#contents コミュニティ ユーザ登録ログイン F37fc642e7ac0bf345e6a0d28e497e68 @tarosa0001 2018年02月19日に更新 【超初心者向け】Struts2超入門 - 2018年版 JavaEclipseWebstruts2Servlet,JSP 2 * はじめに [#s08ac405] レガシーという人もいるかも知れませんが、Struts2の入門編の記事です。 最近ではクライアントサイドの新しい技術も発展し、Struts2はおろか、サーバサイドの技術そのものがレガシーという人もいるかも知れません。 しかしながら、現役で動いているものにぶつかってしまったときは、どうしても理解が必要なものです。 筆者は最近そんなパターンにぶつかって、頑張って勉強しました。 HelloWorldを作ろうとした時、中々すべてをカバーする文献が見つからず苦労したので、その時の備忘を兼ねて今回の記事を執筆します。 Struts2は、レガシーと言われても、割とバージョンアップが盛んなようで、まだ新しくなり続けています。 一旦、今回の記事執筆時点で最新のバージョンを使用して、Struts2の開発環境が構築できるものを、HelloWorldを通じて紹介していきたいと思います。 * 1. Strutsとは [#eee39380] Javaで実装するMVCモデルを採用したWebアプリケーションフレームワークです。 MVCモデルとは、Model(データ)、View(画面)、Controller(業務ロジック)を分離して実装しようという考え方です。 ただし、Struts2にはVとCを分離する機能はあっても、MをCから分離する機能は提供されていないので、そこは別にORマッパなどを導入して実現することが多いです。 ** 1.1. Struts2の生い立ち [#pe731458] 以前、Strutsというフレームワークが存在し、一世を風靡した時代がありましたが、Struts2は根本的には別物です。 元々の開発経緯も全く別物で、「WebWork2」という名称で開発されていて、Strutsのサポート終了とともに、その名称がStruts2に変更されたというもののようです。 Struts2は現在もまだサポートが続いており、新しいバージョンも割と頻繁にリリースされています。 ** 1.2. Struts2導入のメリット [#qdd34933] 少し話がそれましたが、企業システムなど、大規模なWebアプリケーションにStruts2を導入することで飛躍的に生産性が向上できます。 また、Struts2に限ったことではありませんが、フレームワークを導入することで、開発者のクセによる実装方針の違いなどを吸収し、平準化すことができます。 ただ、導入に手間がかかるので、小規模の開発には向かないと筆者は考えています。 * 2. 開発環境構築 [#f14b47d1] これから、Struts2でHelloWorldを実現するための、開発環境を構築していきます。 構築方法には、3通りあります。 + 1.自力で構築 + 2.Mavenで構築 + 3.公式の空プロジェクトを使用 今回は、自力で構築します。 2は、まずMavenを勉強する必要があることと、環境によっては使用できないこともあります。 3は、使おうとしても、デフォルトの状態からエラーで起動できないので、使うくらいなら自力で構築したほうが早いです。 ※個人的にはちゃんとエラーのないものを提供してほしいと思ってます… よって、手を動かして覚えることも兼ね、自力で構築しましょう! ** 2.1. Eclipseプロジェクトの作成 [#aebea814] 筆者は基本開発には統合開発環境を使用します。 Java系の開発では基本Eclipseを使用すると思いますが、今回もEclipseを使用します。 筆者が使用している環境は「Eclipse4.4(Luna)」です。 Eclipseのバージョンは同じでなくてもできますので、読者の方々は手近なものを使用してください。 + ①ファイル > 新規 > その他 > Web > 動的Webプロジェクトを選択し次へ進みます。 p1.jpg + ②次の情報を入力して次へ進みます。 設定項目 設定値 プロジェクト名 Struts2HelloWorld ※プロジェクト名は自由に決めていただいて構いません ターゲット・ランタイム Tomcat8 (Java8) 動的webモジュールバージョン 3.1 構成 Tomcat8 (Java8)デフォルト構成 p2.jpg + ③フォルダーの追加で「resources」フォルダを追加して次へ進みます。 p3.jpg + ④web.xmlデプロイメント記述子の生成にチェック入れ、完了します。 p4.jpg + ⑤次の画像のようにプロジェクトができれば、プロジェクト作成完了です。 p5.JPG ** 2.2. Struts2の導入 [#m2cb44e1] 作成したプロジェクトにStruts2を導入します。 *** 2.2.1. Struts2のダウンロード [#b6c9c7d5] こちらからStruts2をダウンロードします。 本記事執筆時点で最新は、「2.5.14.1」のようです。 HelloWorldでは使用しませんが、サンプルアプリケーション付きの「struts-2.5.14.1-all.zip」をダウンロードします。 また、後で必要になるので、「log4j-core-2.9.1.jar」を別にダウンロードしておいてください。 p6.jpg 「struts-2.5.14.1-min-lib.zip」は最少構成でのStruts2の空プロジェクトです。 筆者の環境では、最初からエラーで起動できませんでした。 解決するのも面倒くさかったので、筆者は最初から自力で構築しましたが、こちらをうまく使えるようにできたというかたは、コメントいただけると幸いです。 *** 2.2.2. 必要ライブラリの配置 [#hf4cdeef] プロジェクトにStruts2を導入します。 ダウンロードしたstruts-2.5.14.1-all.zipを解凍し、libフォルダから以下のjarファイルを「プロジェクトルート/Struts2HelloWorld/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.9.1.jar log4j-core-2.9.1.jar 別にダウンロードしたjarファイルです。 ognl-3.1.15.jar struts2-core-2.5.14.1.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.10.jar こちらがStruts2を動かす上での最少ライブラリ構成です。 p7.JPG *** 2.2.3. 設定ファイルの配置 [#ld5d5a1c] 「/Struts2HelloWorld/resources」にStruts2の設定ファイルである、「struts.xml」を作成します。 余談ですがStruts2では、ゼロコンフィギュレーションと言って、XMLによる設定ファイルはなくてもアプリケーションを実装できます。 しかし、開発者はXMLが好きなのかStruts2を導入していても、筆者が見てきたケースは大体XMLが書いてあります。 アプリケーションの設定が、このファイルだけみれば分かるという利点はあるものの、わざわざ設定ファイルを書く手間を考えれば、ないものはないに越したことはないと筆者は考えています。 特にStruts2では、冒頭でも述べたとおり、SpringやORマッパといったほかのフレームワークと組み合わせて使うことが多く、フレームワークごとにXMLによる設定ファイルが必要なので、管理すべきXMLがむちゃくちゃ増えます。 その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> <!-- アクションのパッケージ定義 --> <package name="default" extends="struts-default"> <!-- Hello worldのサンプルアクション --> <action name="hello" class="sample.HelloWorldAction" method="execute"> <result name="success">/view/sample/HelloWorld.jsp</result> </action> </package> </struts> もう一つ、ログ出力ライブラリである「log4j2」の設定ファイル「log4j2.xml」を配置します。 ■log4j2.xmlの記載内容(コメントの部分は任意に復活させてください) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration> <Configuration status="off"> <!-- ログに使用するAppenderの設定 --> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout> <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}], %-5p, %t, %c, %m%n</pattern> </PatternLayout> </Console> <RollingFile name="FILE" fileName="./log/appLog.log" filePattern="appLog-%d{yyyy-MM-dd}-%i.log"> <TimeBasedTriggeringPolicy /> <!-- <SizeBasedTriggeringPolicy size="100MB" /> --> <DefaultRolloverStrategy max="3"/> </RollingFile> </Appenders> <!-- 出力に使用するロガーの設定 --> <Loggers> <Root level="DEBUG"> <AppenderRef ref="STDOUT" level="INFO"/> <!-- <AppenderRef ref="FILE" /> --> </Root> </Loggers> </Configuration> これは必要ありませんが、「struts.properties」というファイルを同フォルダに配置し、「struts.ui.theme=simple」と記載しておくとStruts2による自動スタイルシートタグ生成が抑制できるので便利です。 ** 2.3 構成の確認 [#ff1ec868] ここまでで、Struts2の導入が完了しました。 結構な量の作業をしたので、構成したプロジェクトのツリーを記載します。 プロジェクトが以下のツリーになっていれば開発環境の構築は完了です。 ■プロジェクトのツリー構成 アプリケーションルート ├─src ├─resources │ log4j2.xml │ struts.properties │ struts.xml │ ├─build │ └─classes ※ここにはソース・フォルダに配置した資材と同じものが自動で生成されます │ log4j2.xml │ struts.properties │ struts.xml └─WebContent ├─META-INF │ MANIFEST.MF │ └─WEB-INF │ web.xml │ └─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.9.1.jar log4j-core-2.9.1.jar ognl-3.1.15.jar struts2-core-2.5.14.1.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.10.jar * 3. アプリケーションの実装 [#nf0f48d4] 開発環境の構築ができましたので、ここからはアプリケーション本体の実装に入っていきます。 ** 3.1. トップページの準備 [#y577dfa4] アプリケーションアクセス時のトップページを準備します。 今回はJSPを使って実装します。 WebContentを右クリック > 新規 > JSPでダイアログを開きます。 ファイル名に「index.jsp」と入力して完了します。 p8.jpg ■index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!-- Struts2のタグライブラリを使用可能にする --> <%@ taglib prefix="s" uri="/struts-tags"%> <!-- タイプ宣言はHTML5のものを使用する --> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Struts2でHelloWorld</title> </head> <body> <!-- 入力フォームはStruts2のタグを使用します --> <s:form action="hello"> <s:textfield name="name" /> <s:submit value="HelloWorldページへ行く" /> </s:form> </body> </html> ** 3.2. Actionの実装 [#td333f25] Struts2において、JSPからサブミットされた際など、Webアプリケーションの処理を担うクラスをActionと呼びます。 Actionや、遷移先のページは、struts.xmlに定義しているのですが、その説明は後程行うので、現時点では、下記の通り実装してください。 srcフォルダを右クリック > 新規 > クラスから、次の情報を入力して完了してください。 入力項目 入力値 パッケージ sample 名前 HelloWorldAciton p9.jpg ■HelloWorldAciton package sample; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * [HelloWorldのアクションクラス]<br> * <br> * @author tarosa0001 */ public class HelloWorldAction { /** ロガー */ private Logger logger = LogManager.getLogger(HelloWorldAction.class); /** 名前 */ private String name; /** * [アクション実行処理]<br> * HelloWorldを出力する処理を実行する。<br> * 実行するメソッドは、struts.xmlで指定したメソッド名を使用して実装する。<br> * Struts2ではアクションの処理結果でページの遷移先を決定するが、 * 今回は"success"の固定文字列を返却する。<br> * <br> * @return */ public String execute() { logger.info("入力されたパラメータは「{}」です。", name); return "success"; } /** * [名前取得処理]<br> * 名前を取得します。<br> * Struts2がフォームに入力された値をパラメータとしてする際、 * getterを使用するため、パラメータとして使用したい情報は、 * Actionクラスのプロパティとして宣言しておき、getterを用意する。 * <br> * @return 名前 */ public String getName() { return name; } /** * [名前設定処理]<br> * 名前を設定します。<br> * getter同様、ページ間で受け渡したい値はsetterを用意しておく。<br> * <br> * @param name 名前 */ public void setName(String name) { this.name = name; } } ** 3.3. 遷移先の実装 [#c9ce3f9f] トップページのボタンを押した際の遷移先を実装します。 WebContentディレクトリ内にview/sampleフォルダを作成し、そちらに遷移先ページを配置します。 配置ディレクトリ自体はWebContent内であればどこでもいいのですが、今回は上記ディレクトリとします。 トップページと同様の手順でsampleフォルダ内に「HelloWorld.jsp」を追加してください。 ■HelloWorld.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello Struts2 world!</title> </head> <body> <!-- メッセージの間に渡されたデータを表示します。 --> Hello Struts2 world, <s:property value="name" />さん </body> </html> ** 3.4. アプリケーション設定の更新 [#v09cef9d] ここまでで、アプリケーションの処理自体は実装完了です。 最後に、実装したアプリケーションがStruts2アプリケーションとして動作するための設定を行います。 プロジェクトのWEB-INF内に存在している「web.xml」を次のように変更してください。 Struts2というよりは、Webアプリケーション自体の基礎知識になるので、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> <!-- アプリケーションルートであクセした時の表示ファイル設定 --> <!-- 必要はありませんが、今回はURLの入力間違いも防ぐため、index.jspのみとします。 --> <welcome-file>index.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> ** 3.5. 実装の完了 [#z1dd3d1a] web.xmlの設定も更新し、いよいよStruts2アプリケーションの実装完了です。 確認のため、最終的なツリーを記載します。 ■完成したプロジェクトのツリー プロジェクト・ルート ├─src │ └─sample │ HelloWorldAction.java │ ├─resources │ log4j2.xml │ struts.properties │ struts.xml │ ├─build │ └─classes │ │ log4j2.xml │ │ struts.properties │ │ struts.xml │ │ │ └─sample │ HelloWorldAction.class │ └─WebContent │ index.jsp │ ├─META-INF │ MANIFEST.MF │ ├─view │ └─sample │ HelloWorld.jsp │ └─WEB-INF │ web.xml │ └─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.9.1.jar log4j-core-2.9.1.jar ognl-3.1.15.jar struts2-core-2.5.14.1.jar xmlpull-1.1.3.1.jar xpp3_min-1.1.4c.jar xstream-1.4.10.jar * 4. 実行 [#b087b502] さて、ここまでで実装と設定が完了しました。 いよいよ、実装したアプリケーションを動かします。 ** 4.1. Tomcatの準備 [#yb58b492] Webアプリケーションを動作させるためのサーブレットコンテナを準備します。 今回は、Tomcatをサーブレットコンテナとして使用します。 + ①ウィンドウ > ビューの表示 > その他 > サーバを選択し、サービューを表示してください。 p10.jpg + ②表示されたサーバー・ビューの余白を右クリック > 新規 > サーバーを選択し、新規サーバーダイアログを表示します。 「Tomcat v8.0 サーバー」を選択し、次へ進みます。 p11.jpg + ③Struts2HelloWorldを追加して完了します p12.jpg ※Struts2HelloWorldが追加できない場合、プロジェクトの作成に失敗している可能性があります。 プロジェクトの構成がTomcat8に対応しているか確認してください。 ** 4.2. Tomcatの起動 [#b00626f4] Tomcatを起動します。 サーバー・ビューに追加されたTomcatを右クリックし、開始してください。 p13.jpg 以下のような文字列がコンソールに出力されます。 赤字で出てきますが、エラーではありません。 ■コンソールの出力内容 ※警告は無視してください。 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Struts2HelloWorld' did not find a matching property. [火 2 13 00:39:25 JST 2018] 情報: Server version: Apache Tomcat/8.0.20 [火 2 13 00:39:25 JST 2018] 情報: Server built: Feb 15 2015 18:10:42 UTC [火 2 13 00:39:25 JST 2018] 情報: Server number: 8.0.20.0 [火 2 13 00:39:25 JST 2018] 情報: OS Name: Windows 7 [火 2 13 00:39:25 JST 2018] 情報: OS Version: 6.1 [火 2 13 00:39:25 JST 2018] 情報: Architecture: amd64 [火 2 13 00:39:25 JST 2018] 情報: Java Home: C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\eclipse\jre\jre [火 2 13 00:39:25 JST 2018] 情報: JVM Version: 1.8.0_40-b25 [火 2 13 00:39:25 JST 2018] 情報: JVM Vendor: Oracle Corporation [火 2 13 00:39:25 JST 2018] 情報: CATALINA_BASE: C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\sample\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 [火 2 13 00:39:25 JST 2018] 情報: CATALINA_HOME: C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\tomcat\8 [火 2 13 00:39:25 JST 2018] 情報: Command line argument: -Dcatalina.base=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\sample\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 [火 2 13 00:39:25 JST 2018] 情報: Command line argument: -Dcatalina.home=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\tomcat\8 [火 2 13 00:39:26 JST 2018] 情報: Command line argument: -Dwtp.deploy=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\sample\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps [火 2 13 00:39:26 JST 2018] 情報: Command line argument: -Djava.endorsed.dirs=C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\tomcat\8\endorsed [火 2 13 00:39:26 JST 2018] 情報: Command line argument: -Dfile.encoding=UTF-8 [火 2 13 00:39:26 JST 2018] 情報: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\eclipse\jre\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Users/Nakajima/Desktop/Personal/スキルアップ/pleiades/eclipse/jre/bin/../jre/bin/server;C:/Users/Nakajima/Desktop/Personal/スキルアップ/pleiades/eclipse/jre/bin/../jre/bin;C:/Users/Nakajima/Desktop/Personal/スキルアップ/pleiades/eclipse/jre/bin/../jre/lib/amd64;C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\java\8\bin;C:\gradle-4.0\bin;C:\app\Nakajima\product\11.2.0\dbhome_1\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\Justsystems\JSLIB32\;C:\Program Files (x86)\Sony\VAIO Startup Setting Tool;C:\Program Files (x86)\Common Files\Sony Shared\FeliCaLibrary;C:\Program Files\Common Files\Sony Shared\FeliCaLibrary;C:\Program Files (x86)\Common Files\Sony Shared\FeliCaNFCLibrary;C:\Program Files\Common Files\Sony Shared\FeliCaNFCLibrary;C:\Program Files (x86)\GtkSharp\2.12\bin;C:\maven\bin;C:\Program Files\nodejs\v6.10.2\;C:\cygwin64\bin;C:\Users\Nakajima\AppData\Roaming\npm;C:\ProgramData\Oracle\Java\javapath;;C:\Users\Nakajima\Desktop\Personal\スキルアップ\pleiades\eclipse;;. [火 2 13 00:39:26 JST 2018] 情報: Initializing ProtocolHandler ["http-nio-8080"] [火 2 13 00:39:26 JST 2018] 情報: Using a shared selector for servlet write/read [火 2 13 00:39:26 JST 2018] 情報: Initializing ProtocolHandler ["ajp-nio-8009"] [火 2 13 00:39:26 JST 2018] 情報: Using a shared selector for servlet write/read [火 2 13 00:39:26 JST 2018] 情報: Initialization processed in 951 ms [火 2 13 00:39:26 JST 2018] 情報: サービス Catalina を起動します [火 2 13 00:39:26 JST 2018] 情報: Starting Servlet Engine: Apache Tomcat/8.0.20 [火 2 13 00:39:26 JST 2018] 情報: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [117] milliseconds. [火 2 13 00:39:26 JST 2018] 情報: Starting ProtocolHandler ["http-nio-8080"] [火 2 13 00:39:30 JST 2018] 情報: Starting ProtocolHandler ["ajp-nio-8009"] [火 2 13 00:39:30 JST 2018] 情報: Server startup in 4438 ms [火 2 13 00:39:30 JST 2018] 「Server startup~」と出れば起動完了です。 ** 4.3. アプリケーションにアクセス [#s3243793] ブラウザを起動し、以下のURLを入力し、Webアプリケーションにアクセスします。 「http://localhost:8080/Struts2HelloWorld」 すると、実装したindex.jspの内容が表示されます。 p14.jpg ** 4.4. HelloWorldページに遷移 [#n3d32fa0] では、ここまで長々と実装してきたHelloWorldを実行します。 テキストボックスに任意の値を入力し、「HelloWorldページへ行く」をクリックしましょう。 おめでとうございます!テキストボックスの入力値が受け継がれ、HelloWorldが表示できました! p15.jpg Actionにログを出力する処理を実装しているので、受け渡したデータはコンソールに出力しているログで確認できます。 * 5. アプリケーションの説明 [#paa3cee6] 皆様、お疲れ様でした。 ここまでで、HelloWorldの実装が完了しました。 ここからは、アプリケーションの説明をしていきます。 ** 5.1. JSPとアクション [#n1adf639] Struts2では、MVCモデルを採用しています。 多くの場合、View(画面)は、JSPを用いて実装し、JSPの各フォームやリンクなどの処理は、Javaを用いたクラスで実装します。 *** 5.1.1. Action [#q2737324] Actionとは、Struts2での業務処理を行うクラスです。 JSPのフォームをサブミットしたとき、Struts2の機能により、Actionが呼び出されます。 どのフォームでどんなActionを行うかは、formタグとStruts.xmlに定義します。 今回、HelloWorldのActionは、ここで設定しています。 <!-- formタグのaction属性で実行するActionを指定します。 --> <s:form action="hello"> Struts2では、JSPで使用できるタグライブラリが提供されており、Struts2を使用してアプリケーションを実装する場合、多くはこのStruts2提供のタグライブラリを使用します。 formをサブミットした時に使用するActionは、<s:form>タグの、action属性に指定し、Actionの具体的な設定は、Struts.xmlに記載します。 Struts.xmlについては、後述しますので、そちらで詳しく説明します。 *** 5.1.2. 受け渡すデータ [#b036b00c] 画面上で入力したフォームなど、次の画面やActionクラスで使用するデータは、Actionクラスにプロパティとして保持します。 JSP上のタグに設定したname属性と一致する名称のプロパティを設定しておくと、Struts2の機能でフォームに対応したプロパティに値が設定されます。 今回はindex.jspで入力した名前しか受け渡していませんが、ページが大きくなると受け渡すデータが増えます。 そんな場合に、データを塊として保持するクラスが作りたい場合も出てくるでしょう。 そんな場合は、name属性に「.(ドット)」をつけて「クラス名.プロパティ名」の形式で記載します。 ■例:LoginInfoクラスのnameに値を設定する場合 <s:textfield name="LoginInfo.name" /> ** 5.2. Struts.xml [#scc47419] Struts.xmlは、Struts2の動きを制御する設定ファイルです。 こちらには、先ほど説明したformタグでのActionの設定や、アプリケーションで使用する定数などを定義します。 定数については、少ししか触れていませんが、struts.propertiesにまとめて記載することも出来ます。 他にもいろんな設定がありますが、ここでではHelloWorldで使用したActionのみ説明します。 Struts.xml中、HelloWorldのActionの設定はここです。 ■HelloWorldのアクション設定箇所 <!-- Hello worldのサンプルアクション --> <action name="hello" class="sample.HelloWorldAction" method="execute"> <result name="success">/view/sample/HelloWorld.jsp</result> </action> Struts2では、Actionの名前、使用するクラス、メソッドを設定します。 定義したAction内に、Actionクラスからの戻り値によって、次の遷移先を定義します。 今回は、戻り値が"success"の場合しか定義していませんが、Action内の処理の結果によって遷移先を分けたい場合は、戻り値ごとに<result>タグを記載します。 遷移先のJSPは、WebContentをルート(/)として、それ以降のツリーを記載します。 遷移元のJSPからの相対パスでも設定できますが、ずれたりすることもあるので、アプリケーションルートからの絶対パスで記載する方がよいでしょう。 ** 5.3. web.xml [#c466813b] web.xmlとは、Webアプリケーションの設定を記載するファイルですが、Struts2を使用する場合、Struts2用のサーブレットフィルタとマッピングを定義する必要があります。 こちらは特に変わったことをしない限り、上述したweb.xmlの内容から変わることはありません。 * 最後に [#oea78781] ここまでで、Struts2を使用したWebアプリケーションのサンプルと、アプリケーションの説明はすべてです。 今回はあくまでサンプルですので、本当に最少構成で実装しました。 新規で一からStruts2アプリケーションを構築することは中々ないかもしれませんが、他にもいろんな機能があるので、興味がある方は是非試してみてください。 EX. 参考Web 今回の記事を執筆するに当たり、以下に掲載するWebページを参考にさせていただきました。 ・2014年度版 Eclipse + Struts2 による Java Web アプリ開発入門 http://www.cyokodog.net/blog/first-struts2/ F37fc642e7ac0bf345e6a0d28e497e68 @tarosa0001 tarosa0001です。 いろんなところに散らばっている技術的ノウハウを、勉強したついでに集めて記載していきます。 よろしくお願いいたします。 フォロー ストック いいね2 ツイート Toot あなたもコメントしてみませんか :) ユーザー登録(無料) すでにアカウントを持っている方はログイン © 2011-2018 Increments Inc. 利用規約 プライバシー ヘルプ お問い合わせ Qiitaとは ユーザー タグ 投稿 ブログ API Team ご意見 https://qiita.com/tarosa0001/items/889faa2ab5853005f26b
テキスト整形のルールを表示する