Compass Travel チュートリアルアプリケーションでは、アドベンチャー旅コースの説明、予約情報、旅行予約を参照できます。アプリケーションのスタティックおよびダイナミックな部分を作成するには、HTML、サーブレット、JSP、Java Beans、および EJB を使用します。
サーブレットとは、サーバサイド Java プログラムで、Web サーバの機能を拡張します。サーブレットを使用してダイナミックなコンテンツやロジックを HTML ページに適用します。通常は、Java を使用して、データベースへのアクセスなどの複雑なデータ操作を行うサーブレットを作成します。
サーブレットをテストまたはデプロイするにはサーブレットをコンパイルする必要があります。JRun で WEB-INF/classes ディレクトリのサーブレットのソースコードを変更すると、JRun が呼び出されたときに自動的にサーブレットがリコンパイルおよびリロードされます (この動作はデフォルトで有効になっています)。
次の手順では、ログオンサーブレットをコーディングします。logon.jsp 内のユーザーが入力したユーザー ID およびパスワードを確認します。ログインが有効であれば、home.jsp が表示されます。それ以外の場合は、LogonError.htm が表示されます。この手順では、データベースにアクセスするサーブレットを記述する方法について説明します。
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); } } }
<?xml version="1.0" encoding="ISO-8859-1"?><jrun-web-app><reload>true</reload><compile>true</compile></jrun-web-app>
メモ: compass データベースには、john (パスワード:john) および mary (パスワード:mary) の 2 人が定義されています。
ログインが有効であれば、空白の「アドベンチャー旅コース」ページが表示されます。