Struts2 さわってみた ( ログイン画面の作成 )

前々から触ってみようと思ってた Struts2、今回ようやく触ってみたので、その時のメモ。

環境情報は以下になります。

[ 環境情報 ]
Windows 7 SP1
Apache Tomcat 7.0.27
Java SE 7 Update 45
Apache Struts 2.3.16 ( 2014/02/19 時点の最新版 )

Struts2 のダウンロードは次のサイトで。

Struts 2 - Welcome
http://struts.apache.org/development/2.x/

ダウンロード資材の中に含まれるライブラリ ( lib 配下 ) を全部パスに通すとエラー出ちゃうので、必要なものだけ通す必要があるみたいです。ひとます、今回の内容だと、以下のライブラリだけパスを通せば動くはずです。

asm-3.3.jar
commons-io-2.2.jar
commons-fileupload-1.3.jar
asm-commons-3.3.jar
ognl-3.0.6.jar
commons-lang3-3.1.jar
javassist-3.11.0.GA.jar
asm-tree-3.3.jar
freemarker-2.3.19.jar
xwork-core-2.3.16.jar
struts2-core-2.3.16.jar

※ おそらく、どのライブラリが必要かってあたりはドキュメントに情報あると思いますが、見つけられてません。以下の stackoverflow にちょこっと情報あったので、こいつを参考にしてます。

java - Struts2 Hello World jsp example error - Stack Overflow
http://stackoverflow.com/questions/14278258/struts2-hello-world-jsp-example-error


環境できたところで、さっそく使ってみます。
今回も定番のログイン画面を作ってみました。
・ログイン成功 -> ユーザ名を表示するページに遷移
・ログイン失敗 -> ログイン画面に遷移
という感じで。


1. 設定ファイルの作成
struts.xml ( WEB-INF/classes/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="test" extends="struts-default">
 
  <action name="login">
    <result>/login.jsp</result>
  </action>
         
  <action name="loginTest" class="test.action.LoginAction" method="execute">
    <result name="success">/loginSuccess.jsp</result>
    <result name="error">/login.jsp</result>
  </action>
  </package>
</struts>

■ 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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        <init-param>
            <param-name>actionPackages</param-name>
            <param-value>com.mycompany.myapp.actions</param-value>
        </init-param>
    </filter>
 
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>


2. 画面の作成
■ login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!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=UTF-8">
</head>
<body>
<s:form action="loginTest">
<s:textfield name="name"/><br>
<s:textfield name="password"/><br>
<s:submit/>
</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 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=UTF-8">
</head>
<body>
<h2>Hello <s:property value="name" /> !!</h2>
</body>
</html>


3. Action クラスの作成
■ LoginAction.java

package test.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
	private String name;
	private String password;

	// name:test, password:test の場合のみログイン成功
	public String execute() throws Exception {
		if ("test".equals(getName()) && "test".equals(getPassword())) {
			return SUCCESS;
		} else {
			return ERROR;
		}
	}

	public String getName() { return name; }
	public void setName(String name) { this.name = name; }

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

※ Struts1 系の ActionForm 的なものが Action クラス内に書けるんですね。


上記で作業完了です。「http://localhost:8080/XXX/login.action」にアクセスして、テキストボックスに "test"、"test" と入力して「Hello test !!」と表示される画面に遷移すれば、無事動いていると思います。

以下のチュートリアルを参考に作成してます。

Hello World Using Struts 2
http://struts.apache.org/development/2.x/docs/hello-world-using-struts-2.html
・web.xml
http://struts.apache.org/development/2.x/docs/webxml.html


設定内容の意味とか、細かい点はこれから調べる必要がありそうです。
ひとまず、しばらくはいろいろ作って遊んでみようと思います。

以上です。