ログイン画面
JAVA(Struts)での画面遷移の方法を知るための基本ロジック説明です。
したがって、なにを入力されても受け付けます。

しかし、あまりにも単純すぎるのでログインIDが未入力の場合のみ確認をおこなっております。

Javaで必要なファイル
ファイル名概説機能説明
login.jsp表示する画面フォームと項目が一致している必要があります
LoginAction.java処理ロジック
LoginForm.javaフォーム定義アクセッサメソッドの作成・Validateメソッド実装
struts-config.xml動作の関連付けjsp・action・formを連携させる
web.xml基本的な設定
MessageResources.propertiesメッセージ定義
ロジックを作成して、struts-config.xml に動作定義をおこなってはじめて実行されます。

フォームは、画面(jsp)に表示されているテキストエリアなどの値を保存する役割をもちます。
したがって、1対1で完全に対応関係が成立していなくてはなりません。


login.jsp


「 html:form action="/Login" 」のタグが、ボタン押下されたときに実行される処理名です。
動作内容はstruts-config.xmlに記述します。
「 html:errors 」タグを記述するだけでエラーを表示させらます。

LoginForm.java

package frmapl; import org.apache.struts.action.*; import javax.servlet.http.HttpServletRequest; public final class LoginForm extends ActionForm { private String f_id=""; private String f_password=""; public void setId(String value) { this.f_id = value; } public String getId() { return this.f_id; } public void setPassword(String value) { this.f_password = value; } public String getPassword() { return this.f_password; } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request){ ActionErrors errors = new ActionErrors(); if(f_id.equals("") || f_id == null){ errors.add("id_error", new ActionMessage("errors.id")); } return errors; } }

「ID」と「パスワード」のアクセッサを定義します。
validateメソッドを実装して、入力チェックをおこなう処理を記述します。ここでは、ID値の未入力のみを調べています。

LoginAction.java

package frmapl; import frmapl.UserId; import mypackage.NameTable; import java.sql.*; import java.util.*; import javax.sql.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.struts.*; import org.apache.struts.action.*; import org.apache.struts.validator.*; import java.io.*; import javax.naming.*; public final class LoginAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response ) throws Exception, ServletException, IOException { // キャストする LoginForm lgform = (LoginForm)form; InitialContext ic = new InitialContext(); DataSource ds = (DataSource)ic.lookup("java:comp/env/MySQL_DBCP"); Connection conn = ds.getConnection(); // データベースからデータを抽出 { ArrayList refList = new ArrayList(); if (conn != null) { String strSQL = "select * from nametable order by id asc"; PreparedStatement ps = conn.prepareStatement( strSQL ); ResultSet rs = ps.executeQuery(); while (rs.next()) { NameTable refNameTable = new NameTable(); { refNameTable.setId( rs.getString("id") ); refNameTable.setYomigana( rs.getString("yomigana") ); refNameTable.setName( rs.getString("name") ); refNameTable.setTelphone( rs.getString("telphone") ); refNameTable.setFax( rs.getString("fax") ); refNameTable.setZip( rs.getString("zip") ); refNameTable.setAddress( rs.getString("address") ); refNameTable.setRemarks( rs.getString("remarks") ); } refList.add( refNameTable ); } } request.setAttribute( "NameList", refList); } //セッションを作成 HttpSession session; //セッション session = request.getSession(false); //セッション確認 if (session != null) { session = request.getSession(true); //セッション再開始 UserId userId = new UserId(); //ユーザIDを保存する userId.setUserid( userid); session.setAttribute( "UserId", userId); } return (mapping.findForward("success")); } }

これはログインボタンが押されたときに、呼び出されるメソッドです。
●ログインの確認などはおこなっていません、何でも通過させてます。
●データベースから読み出して一覧情報をrequestに設定する。 この値はtop.jspで取り出します。
●セッションを作成して、ID値を保存する。 今後ログイン中はどの画面からも参照可能になります。
●正常終了を返す。
(注意)ここでは基本処理ロジックのみを作成して、エラー処理は組み込んでおりません。

★何でデータベースを読んでいるの? と疑問がでてくると思いますが、トップ画面で必要とするからです。
 ここに記述しない方法でも可能ですが、先ずは基本の「jsp起動」を使ったからです。
 Struts の肝なのですが、案外説明しているサイトは少ないようです。理解していないと上手く動作せずに悩むことになります。
 詳細については、これから順次説明してゆきますので、ここではSturtsには「jsp起動」と「アクションクラス起動」があることを知っておいてください。
 とわ言えこの呼びかたは、私が付けた独自名称ですので違う論理が存在するかもしれませんが。


struts-config.xml


●ログインに関する部分の定義です。
●アクションとフォームを関連付けて、表示するjspを指定します。
また、ここではValidate(入力チェック)をおこなわせる指定をおこなっています。
正常終了(success)ならば、top.jspを表示させます。 もし入力チェック異常ならば、login.jspを表示させます。
●ロジックで異常を検出して"error"などを返す場合には、ここにその定義を入れないと動作できません。
☆これらは全てお約束の記述ですので覚える必要があります。

web.xml


●strutsのサーブレット処理を定義します。
●アクションの方式を定義します。
●login.jsp がエントリーとして起動されます。
ここは一度設定をおこなえば修正することはありません。