Compass Travel J2EE アプリケーション

Compass Travel チュートリアルアプリケーションでは、アドベンチャー旅コースの説明、予約情報、旅行予約を参照できます。アプリケーションのスタティックおよびダイナミックな部分を作成するには、HTML、サーブレット、JSP、Java Beans、および EJB を使用します。

ログインサーブレットのコーディング

サーブレットとは、サーバサイド Java プログラムで、Web サーバの機能を拡張します。サーブレットを使用してダイナミックなコンテンツやロジックを HTML ページに適用します。通常は、Java を使用して、データベースへのアクセスなどの複雑なデータ操作を行うサーブレットを作成します。

サーブレットをテストまたはデプロイするにはサーブレットをコンパイルする必要があります。JRun で WEB-INF/classes ディレクトリのサーブレットのソースコードを変更すると、JRun が呼び出されたときに自動的にサーブレットがリコンパイルおよびリロードされます (この動作はデフォルトで有効になっています)。

次の手順では、ログオンサーブレットをコーディングします。logon.jsp 内のユーザーが入力したユーザー ID およびパスワードを確認します。ログインが有効であれば、home.jsp が表示されます。それ以外の場合は、LogonError.htm が表示されます。この手順では、データベースにアクセスするサーブレットを記述する方法について説明します。

ログオンサーブレットをコーディングするには

  1. テキストエディタまたは Java IDE を開き、次のコードをコピーしてペーストします。
    package compass;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.sql.*;
    import javax.sql.DataSource;
    import javax.naming.InitialContext;
    
    public class Logon extends HttpServlet {
      private String validLogonPage;
      private String invalidLogonPage;
    public void init() throws ServletException {
    
    /* web.xml の初期化パラメータを読み取ります。
      - validLogonPage は、ログオンが有効な場合の移動先ページを指定します。
      - invalidLogonPage は、ログオンが無効な場合の移動先ページを指定します。
      この技法を使用すると、サーブレットにページ名をハードコーディングする必要がなく、
      サーブレットの再利用度が高くなります。 */
    
    validLogonPage = getInitParameter("validLogonPage");
    if (validLogonPage==null) throw new ServletException
    ("web.xml エラー:初期化パラメータ 'validLogonPage' が見つかりません。
    ");
    invalidLogonPage = getInitParameter("invalidLogonPage");
    if (validLogonPage==null) throw new ServletException
    ("web.xml エラー:初期化パラメータ 'invalidLogonPage' が見つかりません。
    ");
    }  
    protected void doPost(HttpServletRequest request, 
    HttpServletResponse response)
        throws ServletException, IOException {
      String userId = request.getParameter("userId");
      String password = request.getParameter("password");
    
           String firstName="";
          String lastName="";
    
      String sql = "SELECT password, first_name, last_name 
    FROM user WHERE user_id=?";
      Connection connection=null;
      PreparedStatement ps=null;
      ResultSet rs=null;
      boolean validLogon=false;
      try {
        InitialContext ctx=new InitialContext();
        DataSource ds=(DataSource) ctx.lookup("compass");
        connection=ds.getConnection();
        ps=connection.prepareStatement(sql);
        ps.setString(1, userId);
        rs = ps.executeQuery();
        if (rs.next()) {
          if (password.equals(rs.getString("password"))) {
                    validLogon=true;
                    firstName=rs.getString("first_name");
                    lastName=rs.getString("last_name");
                }
        }
      } catch (Exception e) {
        System.out.println(e);
        throw new ServletException(e);
      } finally {
        try {
          rs.close();
          ps.close();
          connection.close();
      } catch (Exception e) {
          System.out.println(e);
        }
      }
    
      if (validLogon) {    HttpSession session = request.getSession();    session.setAttribute("userId", userId);    session.setAttribute("firstName", firstName);    session.setAttribute("lastName", lastName);    response.sendRedirect(validLogonPage);  } else {    response.sendRedirect(invalidLogonPage);  }  }
    }
    
  2. <JRun のルートディレクトリ>/servers/Tutorial/compass-ear/compass-war/WEB-INF/classes/compass に Logon.java としてファイルを保存します。
    次の手順で、ダイナミックサーブレットおよびクラスのコンパイルと再ロードの作業を有効にします。
  3. 次のコードをコピーして jrun_root/servers/tutorial/compass-ear/compass-war/WEB-INF/jrun-web.xml として保存します。
    <?xml version="1.0" encoding="ISO-8859-1"?><jrun-web-app><reload>true</reload><compile>true</compile></jrun-web-app>
  4. チュートリアルサーバを次の方法で再起動します。
  5. Web ブラウザで次の URL を開きます。

    http://localhost:8101/compass/logon.jsp

  6. 登録されているユーザー ID およびパスワードを入力します。

    メモ:  compass データベースには、john (パスワード:john) および mary (パスワード:mary) の 2 人が定義されています。

  7. [ログオン] ボタンをクリックします。

    ログインが有効であれば、空白の「アドベンチャー旅コース」ページが表示されます。

    この図は、「アドベンチャー旅コース」ページです。