JBuilder2005 実際のJSP切り替え制御(3)
著者:Eve Cole
更新時間:2009-07-02 17:10:13
switch.jsp は、login.jsp フォームの action 属性を通じて応答 JSP ファイルとして指定されているため、ユーザーが login.jsp でログイン ユーザーを選択し、パスワードを入力してフォームを送信すると、クライアントは HTTP リクエストをサーバー、およびサーバー つまり、switch.jsp を呼び出して、このリクエストに応答します。
フォーム内のユーザー名とパスワードのコンポーネントのデータは、HTTP リクエストを通じてサーバーの switch.jsp に渡され、サーバーはこの情報をリクエスト オブジェクトにカプセル化して switch.jsp に渡すため、switch.jsp を取得できます。 request.getParameter(String paraName) を通じてこれら 2 つの値を取得します。
文字列 userId = request.getParameter("userId"); 文字列パスワード = request.getParameter("パスワード"); |
login.jsp のフォームに 10 を超えるデータ コンポーネントがある場合、その値は switch.jsp 内の対応する数の request.getParameter() メソッドを通じて取得する必要があると想像してください。また、データがフィールド文字列型ではなく、整数または浮動小数点数の場合、request.getParameter()メソッドで返される値はすべてStringであるため、この作業だけではなく型変換を行う必要があります。面倒ですが、間違いも発生しやすくなります。
JSP を使用すると、Bean を介して Web フォーム データをマッピング方式で受信できます。Bean は、次のルールに従ってフォーム データをマップします。Bean 属性名 = フォーム データ コンポーネント名。つまり、同じ Bean 属性名を持つすべてのフォーム データ フィールドが自動的に入力されます。 Bean を作成し、データ型の変換を完了します。たとえば、login.jsp フォームには 2 つのデータ コンポーネントがあり、1 つは userId で、もう 1 つはパスワードという名前です。同じ名前の userId 属性とパスワード属性を持つ User.java Bean を定義すると、この Bean は自動的に 2 つのデータ コンポーネントを受け取ります。フォーム内のデータコンポーネントの値。
User.java を書く
まず User.java Bean を記述し、プロジェクト内に User.java を作成します。コードは次のとおりです。
コードリスト 7 User.java
1. パッケージ書店。 2. 3. パブリッククラスのユーザー 4. { 5. プライベート文字列 userId;//userId 6. プライベート文字列パスワード;//パスワード 7. プライベート文字列 userName;// ユーザー名 8. public String getPassword() { 9. パスワードを返却します。 10. } 11. public String getUserId() { 12. ユーザー ID を返します。 13. } 14. public String getUserName() { 15. ユーザー名を返します。 16. } 17. public void setPassword(String パスワード) { 18. this.password = パスワード; 19. } 20. public void setUserId(String userId) { 21. this.userId = ユーザー ID; 22。 } 23. public void setUserName(String userName) { 24. this.userName = ユーザー名; 25. } 26. } |
userId とpassword という 2 つの属性名に加えて、username というユーザー名属性もあります。この属性の値は、ユーザー名とパスワードが正しく検証されると、データから取得されます。 table T_USER テーブルをこのプロパティに保存して、他の場所から参照できるようにするには、このクラスを保存してコンパイルします。
ヒント:
User.java コードは、JBuilder の Bean Express ツールを使用して簡単に作成できます。通常の状況では、Bean Express を使用して Bean プロパティを作成する必要があります。これにより、プロパティのアクセス メソッドが自動的に生成されるだけでなく、Bean の命名規則も確保されます。 |
ライトページプログラム
User.java の Bean を作成した後、switch.jsp を作成し、switch.jsp 内でこの Bean を参照します。
「ファイル」→「新規作成..」→「Web」→「JSP」アイコンをダブルクリックして、JSP 作成ウィザードを開始します。
1. switch.jsp 名を指定します
図10 switch.jspの名前を指定 |
[次へ] を押し続けて、ウィザードのステップ 3 に進みます。
2. User.Java Bean の参照
図11 JSPで参照するBeanの指定 |
次の図に示すように、[Bean の追加...] ボタンをクリックして [クラスの選択] ダイアログ ボックスを表示し、ダイアログ ボックスで bookbook.User クラスを選択します。
図 12 クラスを Bean として選択 |
[OK] をクリックした後、ウィザードの手順 3 のダイアログ ボックスに戻ります。この時点で、ダイアログ ボックスの Bean リストに追加のレコードが表示されます。ID 列に Bean の名前を指定して指定できます。次の図に示すように、スコープ内の Bean のスコープ。
図 13 Bean への参照 |
ユーザーの Bean に userBean という名前を付け、そのスコープをページ ドメインに設定しました。ページ ドメインはページ スコープであり、JSP が応答を返すか、リクエストが他の JSP ページに転送されると、他の 3 つのスコープは使用できなくなります。
・リクエストスコープ:リクエストが生成されると、レスポンスが返されるまでのスコープ内で有効です。例えば、a.jsp内でリクエストスコープとして宣言されたBeanは、a.jspがリクエストをb.jspページに転送する際に有効となります。 <jsp:forward> 年内はまだ入手可能です。
・セッション範囲:ユーザーセッションの周期内で利用可能です。セッション周期は、ユーザーがシステムにログインしてからログアウトするまでです。
・アプリケーションスコープ:このスコープは最も長く、Webコンテナが起動されてから閉じられるまで有効であることを示します。
「次へ」を押して次のステップに進みます。
3.実行構成項目を設定する
ウィザードの最後のステップでは、作成された JSP のランタイム構成項目を生成できます。ウィザードはデフォルト オプションとしてランタイム構成項目を作成しますが、これは適切なデフォルト値ではないと思われるので、キャンセルすることをお勧めします。次の図に示すように、実行時構成設定項目を作成します。JSP 実行構成項目は作成しません。
[完了] ボタンを押して、次のコードを含む switch.jsp ファイルを作成します。
コード リスト 8 ウィザードによって作成された switch.jsp
1. <%@ ページ contentType="text/html; charset=GBK" %> 2. <html> 3. <頭> 4. <タイトル> 5.スイッチ 6. </title> 7. </頭> 8. <jsp:useBean id="userBean"scope="page" class="bookstore.User" /> 9. <jsp:setProperty name="userBean" property="*" /> 10. <本文 bgcolor="#ffffff"> 11. <h1> 12. JBuilder で生成された JSP 13. </h1> 14. </本文> 15. </html> |
8行目はBeanを参照するJSPタグです。9行目はBeanの属性値をフォームデータで埋め込み、つまりリクエストパラメータを名前一致でBeanの属性に埋め込み、同時に型変換を完了します(のみ)。基本データ型またはコンストラクターがサポートしている場合にのみ変換を完了できます)。 9行目を実行すると、userBeanのuserId属性とpassword属性が、login.jspページで送信されたユーザー名とパスワードの値に設定されます。
switch.jsp は制御のみに使用され、クライアントにコンテンツを表示する必要がないため、switch.jsp の HTML コードを削除し、switch.jsp を次のように調整します。
コード リスト 9 静的 HTML コードを削除した後の switch.jsp
1. <%@ ページ contentType="text/html; charset=GBK" %> 2. <jsp:useBean id="userBean"scope="page" class="bookstore.User" /> 3. <jsp:setProperty name="userBean" property="*" /> |
switch.jsp にスクリプトレットを指定して、userId とパスワードをデータベースに送信し、T_USER テーブル内のユーザーと比較して正当なユーザーかどうかを確認し、検証結果に基づいて別のページにリダイレクトします。 switch.jsp の最終コードは次のようになります。
コードリスト 10 最終的な switch.jsp
1. <%@page contentType="text/html; charset=GBK"%> 2. <%@page import="bookstore.*"%> 3. <%@page import="java.sql.*"%> 4. <jsp:useBean id="userBean"scope="session" class="bookstore.User"/> 5. <jsp:setProperty name="userBean" property="*"/> 6.<% 7. 接続 conn = null; 8. {を試してください 9. conn = DBConnection.getConnection(); 10. PreparedStatement pStat = conn.prepareStatement( 11. "USER_ID=?、パスワード = ? の T_USER から USER_NAME を選択します。"); 12. pStat.setString(1, userBean.getUserId()); 13. pStat.setString(2, userBean.getPassword()); 14. ResultSet rs = pStat.executeQuery(); 15. if (rs.next()) { //パスワードは正しい 16. userBean.setUserName(rs.getString(1));//ユーザー名を設定します 17. session.setAttribute("ses_userBean", userBean);//userBeanをSessionオブジェクトに入れる 18. %><jsp:forward page=" welcome.jsp "></jsp:forward> 19. <%} else { //パスワードが間違っています%> 20. <jsp:forward page="fail.jsp"></jsp:forward> 21.<% 22. }} 最後に { 23. if(conn != null) conn.close(); 24。 } 25.%> |
·2行目から3行目でスクリプトレットコードに必要なクラスを導入します。
· コードの 7 行目から 14 行目は、クエリ SQL ステートメントをデータベースに送信し、結果を返します。
· 15 行目は、結果セット内のレコード数をチェックすることにより、ユーザー パスワードが正しいかどうかを間接的に判断します。
· 16 行目から 18 行目は、正しいユーザー パスワードに対する応答コードです。まず、userBean の userName 属性値に結果セットの USER_NAME 属性を入力し、次に userBean オブジェクトを Session に配置し、最後に welcome.jsp ページに移動します。
· ユーザーが間違ったパスワードを入力すると、結果セットにはレコードがありません。このとき、rs.next() は false を返し、プログラムは 20 行目に進みます。20 行目のコードは、ページを間違ったパスワードにリダイレクトします。パスワード入力処理ページfail.jsp。
· 22 ~ 24 行目のコードは、データベース接続を閉じるために使用されます。
おそらく、9 ~ 21 行目で SQLException がスローされますが、標準的な Java プログラムではコンパイル時にエラーが発生することになりますが、JSP では順次コンパイルできることがわかりました。これは、JSP ページ自体が、ページ内でスローされたすべての例外をキャッチするためです。
11 行目の SQL クエリ ステートメントに、ユーザー テーブル名が誤って User (正しくは T_USER) と記述されているなどのエラーがあるとします。switch.jsp が呼び出されると、14 行目で SQLException がスローされ、switch になります。 jsp が表示します。 例外スタック トレースの追跡情報ページは次のとおりです。
図 14 ひどいエラー処理ページ |
上の図に示されているエラー処理ページは、青白い顔で凶暴で非常に不親切であると言えます。この種のエラー報告ページは、多くのエラー追跡情報を提供するため、開発者には適しているかもしれませんが、最終的には不可能です。ユーザーはこの種のエラー ページを受け入れる必要があります。 JSP では、<%@ page errorPage%> を通じてエラー処理専用の JSP ページを指定できるため、エラーをわかりやすく直感的な形式で表示できます。次のセクションでは、エラー処理用の JSP ページを作成します。作成後、switch.jsp にエラー処理用の JSP ページを指定します。