Struts 1.x入門


1.webプロジェクトを新規作成し、Struts 1.xの依存ライブラリに加入する。
参照
    commons-beanutils-1.8.0.jar:ダイナミックな取得/設定値Java Beanの属性
    commons-digester-1.8.jar:ルールに基づくXMLドキュメント解析は、主にXMLからJavaオブジェクトへのマッピングに使用されます。
    commons-fileupload-1.1.11.jar:strutsでファイルをアップロードするには、必要です。
    commons-validator-1.3.1.jar:strutsの検証フレームワーク
    commons-loging-1.0.4.jar:ログ処理
    commons-chain-1.2.jar:HTTP要求処理の基礎メカニズムを処理する。
    struts-core-1.30.jar:strutsのコアライブラリ
    struts-extres-1.30.jar:strutsの拡張ライブラリ
    オロロ-2.8.8.jar:テキスト処理ツール
    ANtlr-2.7.2.jar:文法アナライザ
2.web.xmlファイルの設定

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	<!-- Standard Action Servlet Configuration -->
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
		<!--      init-param        -->
		<init-param>
			<!--
				       /WEB-INF/struts-config.xml,      ,         struts-config.xml     WEB-INF      
			-->
			<param-name>config</param-name>
			<param-value>/WEB-INF/struts-config.xml</param-value>
		</init-param>
		<init-param>
			<!--    servlet        -->
			<param-name>debug</param-name>
			<param-value>2</param-value>
		</init-param>
		<!--     ,  Servlet      ,      tomcat           -->
		<load-on-startup>2</load-on-startup>
	</servlet>


	<!-- Standard Action Servlet Mapping -->
	<!--   servlet  *.do    -->
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>
3.WEB-INFにstruts-config.xmlファイルを追加する

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
	<form-beans>
		<form-bean name="loginForm" type="com.yx.zzg.form.LoginActionForm" />
	</form-beans>
	<!--        ,              ,       ,                 -->
	<!--  
	<global-forwards>
		<forward name="failure" path="/failure.jsp" />
	</global-forwards>
	-->
	<action-mappings>
		<!-- path  action   ,    “/”   -->
		<!-- type  action       -->
		<!-- name       ActionForm -->
		<!--
			struts  ActionForm  session   ,      scope     request,         <%
			LoginActionForm
			laf=(LoginActionForm)request.getAttribute("loginForm");
			%>  ActionForm
		-->
		<!--   ActionForm  validate    ,          -->
		<!--
			attribute      ,     ActionForm   ActionForm name   ,     attribute   attribute     
		-->
		<action path="/login" type="com.yx.zzg.action.LoginAction"
			name="loginForm" scope="request" validate="false" attribute="loginForm">
			<!--     ,redirect     false,       ,       true       -->
			<forward name="success" path="/success.jsp" />
			<forward name="failure" path="/failure.jsp" />
		</action>
<!--
			         ,               unknown.jsp  ,  .do      。forward            action      ,     
		-->
		<action path="/unknown" forward="/unknown.jsp" unknown="true" />
	</action-mappings>
</struts-config>
4.アクションForm類の作成

package com.yx.zzg.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

/**
 *    ActionForm.
 * ActionForm       
 * ActionForm                 
 * @author toshiba
 *
 */
public class LoginActionForm extends ActionForm {

	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;
	}

	@Override
	public void reset(ActionMapping mapping, HttpServletRequest request) {
		System.out.println("----------LoginActionForm.reset()---------");
	}

	@Override
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		System.out.println("----------LoginActionForm.validate()---------");
		return null;
	}

}
5.異常クラスの作成

package com.yx.zzg.exception;

public class PasswordErrorException extends RuntimeException {

}

package com.yx.zzg.exception;

public class UserNotFoundException extends RuntimeException {

}
6.業務類の作成

package com.yx.zzg.service;

import com.yx.zzg.exception.PasswordErrorException;
import com.yx.zzg.exception.UserNotFoundException;

public class UserManager {
	private static UserManager instance=new UserManager();
	private UserManager(){
		
	}
	public static UserManager getInstance(){
		return instance;
	}
	
	public void login(String username,String password){
		if(!"zzg".equals(username)){
			throw new UserNotFoundException();
		}
		if(!"zzg".equals(password)){
			throw new PasswordErrorException();
		}
	}

}
7.アクション部門の作成

package com.yx.zzg.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.yx.zzg.exception.PasswordErrorException;
import com.yx.zzg.exception.UserNotFoundException;
import com.yx.zzg.form.LoginActionForm;
import com.yx.zzg.service.UserManager;

public class LoginAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		String errorInfo="";
		LoginActionForm laf = (LoginActionForm) form;
		String username = laf.getUsername();
		String password = laf.getPassword();
//		if ("zzg".equals(username) && "zzg".equals(password)) {
//			request.setAttribute("username", username);
//			return mapping.findForward("success");
//		} else {
//			return mapping.findForward("failure");
//		}
		try{
			UserManager.getInstance().login(username, password);
			//request.setAttribute("username", username);
                        return mapping.findForward("success");
		}catch(UserNotFoundException fnfe){
			fnfe.printStackTrace();
			errorInfo="     ";
		}catch(PasswordErrorException pee){
			pee.printStackTrace();
			errorInfo="    ";
		}
		request.setAttribute("errorInof", errorInfo);
		return mapping.findForward("failure");
	}

}
6.試験ページの登録

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
	<head>
		<title>  </title>
	</head>

	<body>
		<form action="login.do" method="post">
			   :
			<input name="username" type="text" />
			  :
			<input name="password" type="password" />
			<input type="submit" value="  " />
		</form>
	</body>
</html>