TomCat:JSPと連携するwebサーバー

  1. TomCat
    1. TomCatの役割
       TomCatはwebサーバーからの要求に応じ、サーバー上でJavaのCGIプログラムを実行し、結果をwebサーバーに返す、サーバーです。
       限定された機能になりますが、webサーバーとして利用することもできます。

    2. サーブレット
       CGIの処理を行う Jabaプログラムを サーブレット といいます。クライアント上で動作するJavaアプリケーションをアプレットとよぶように、サーバーの役割を分担するミニプログラムの意味でしょうか。

    3. JSP
       JSPは html 中に Java で書かれたスクリプトを埋め込む機構です。クライアント側で実行するJavaScriptとは全く異なる機能で、CGIの処理をhtml中に記述します。JSPは初回のアクセスで、サーブレット(Javaのクラスファイル)に変換された後、実行されます。従って、実行形式は サーブレット と同じです。
       この変換処理はTomCatが行います。JSPソースをjavaソースに変換し、コンパイルを行って.classファイルを作成します。

  2. TomCatのインストール

    1. ダウンロード
      下記から ReleaseBuildの Tomcat をダウンロードします。現在は5.0.25です。KEYSはダウンロードの改竄防止用のチェックコードです(無視してかまいません)。形式は embed.zip が良いでしょう。
       http://jakarta.apache.org/site/binindex.cgi
      ダウンロードしたら、LHARCなどで解凍します。setup不要ですから、これだけで、実行できます。

    2. JDKへのパス
       TomcatはJSPのコンパイルをしますから、JSKへのパスが必要です。「マイコンピュータ」の「詳細」の「環境変数」で、JAVA_HOMEを jdk のフォルダへのパスに設定します。

       

    3. サーバーの起動と終了
       サーバーを起動します。解凍した jakarta-tomcat-5.0.25 のbinにある、startup.bat をダブルクリックでします。
        \Program Files\jakarta-tomcat-5.0.25\bin
      これで、コマンドプロンプトが上がり、起動作業が始まります。終了は shutdown.bat を利用します。
      よく利用する場合は、サービスに登録して自動起動に設定することもできます。

    4. 標準ページを見る
      ブラウザのurlで、
       localhost:8080
      と指定すると、以下の jakarta-tomcat のルートページを見ることができます。



       このページは、
       \Program Files\jakarta-tomcat-5.0.25\webapps\ROOT
      にある index.jsp で記述されています。JSPやサーブレットのサンプルのページへのリンクもあります

  3. JSPの作成

    1. JSPによる Hello ページ
      1. ソースファイル

        Jspを利用して hello を表示するページを作成します。<% %>で囲まれた部分が、Javaプログラムでスクリプトレットとよびます。標準出力 out に出力すると、それが、ページの内容として挿入されます。

        <html>
        <head><title>Hello World!</title></head>
        <body>
        <h1>Hello World!</h1>
        <p>
        <%
            String hello = "Hello World!";
           out.println(hello+1+"<BR>");
           out.println(hello+2);
           
        %>
        </p>
        </body>
        </html>
      2. 保存とリンク
         ここでは、標準ページの、JSPの例題ページにリンクします。下記のように ex のフォルダを作成し、
         \Program Files\jakarta-tomcat-5.0.25\webapps\jsp-examples\ex
        ここに、先の内容を ex1.jsp として保存します。
         リンクは、
         \Program Files\jakarta-tomcat-5.0.25\webapps\jsp-examples
        にある、index.html の最後に、
         <a href="ex/hello.jsp">firstEX</a><BR>
        を追加します。これで、トップページから、
         ExamplesのJSP Examples をクリックすると、firstEX のリンクが現れます。これを。クリックすると、作成したex.jsp にリンクされます。最初のリンクでは、Javaへの変換、コンパイル、が行われますから、時間がかかります。2回目以後は通常のページと同じです。
         
      3. サーブレット
         JSPwpコンパイルして生成された Javaプログラムはサーブレットと呼ばれます。これは、下記のworkフォルダの対応位置 jsp-examples\org\apache\jsp\ex に保存されます。
         \Program Files\jakarta-tomcat-5.0.25\work\Catalina\localhost\jsp-examples\org\apache\jsp\ex
        参考のため、生成されたJavaソースを示します。これをコンパイルしたクラスファイルがJspの替わりに実行されます。_jspService() メソッドが、Tomcarから起動されます。
         org.apache.jasper.runtime.HttpJspBaseを継承しており、標準的なサーブレットの構成とは少し異なるJavaプログラムになっています。
        package org.apache.jsp.ex;
        
        import javax.servlet.*;
        import javax.servlet.http.*;
        import javax.servlet.jsp.*;
        
        public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase
            implements org.apache.jasper.runtime.JspSourceDependent {
        
          private static java.util.Vector _jspx_dependants;
        
          public java.util.List getDependants() {
            return _jspx_dependants;
          }
        
          public void _jspService(HttpServletRequest request, HttpServletResponse response)
                throws java.io.IOException, ServletException {
        
            JspFactory _jspxFactory = null;
            PageContext pageContext = null;
            HttpSession session = null;
            ServletContext application = null;
            ServletConfig config = null;
            JspWriter out = null;
            Object page = this;
            JspWriter _jspx_out = null;
            PageContext _jspx_page_context = null;
        
        
            try {
              _jspxFactory = JspFactory.getDefaultFactory();
              response.setContentType("text/html");
              pageContext = _jspxFactory.getPageContext(this, request, response,
                                null, true, 8192, true);
              _jspx_page_context = pageContext;
              application = pageContext.getServletContext();
              config = pageContext.getServletConfig();
              session = pageContext.getSession();
              out = pageContext.getOut();
              _jspx_out = out;
        
              out.write("<html>\r\n");
              out.write("<head><title>Hello World!</title></head>\r\n");
              out.write("<body>\r\n");
              out.write("<h1>Hello World!</h1>\r\n");
              out.write("<p>\r\n");
        
            String hello = "Hello World!";
           out.println(hello+1+"<BR>");
           out.println(hello+2);
           
        
              out.write("\r\n");
              out.write("</p>\r\n");
              out.write("</body>\r\n");
              out.write("</html>\r\n");
            } catch (Throwable t) {
              if (!(t instanceof SkipPageException)){
                out = _jspx_out;
                if (out != null && out.getBufferSize() != 0)
                  out.clearBuffer();
                if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
              }
            } finally {
              if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
            }
          }
        }
        

    2. formの処理例
      1. Formを処理するCGI
         他の例としてFORMタグの入力を処理するCGIの例を示します。Fromタグを含むhtmlページを以下のようにします。これを、
         \Program Files\jakarta-tomcat-5.0.25\webapps\jsp-examples\ex2
        フォルダに、ex2.htm として保存します。

        <HTML>
        <HEAD><TITLE>jsp Form</TITLE>
        </HEAD>
        <BODY>
        <FORM ACTION="ex2.jsp" METHOD="POST">
        <TABLE>
        <TR><TD>name</TD><TD><input type="text" name="name"></td></tr>
        <TR><TD>age</TD><TD><input type="text" name="age"></td></tr>
        </TABLE>
        <INPUT TYPE="SUBMIT" VALUE="go"><BR>
        </FORM>
        </HTML>
        
        これを処理する Jsp のページの例を示します。<%@ page %> はディレクティブと呼ばれ、ページを生成する際の情報を設定します。次のスクリプトレット <% %> で、Form タグの名前に対するデータをstrNameとstrAgeに取得しています。<%= %> は式で、=以後の文字列を出力します。これで、Formタグの値を取り込み、再度表として出力します。
         このファイルを ex2.jsp として、ex2.htm と同じフォルダに配置します。ファイル名は、FormのACTION部で指定した名前と同じにします。
        <%@ page language="java" %>
        <%@ page contentType="text/html;charset=Shift_JIS"%>
        
        <%
        request.setCharacterEncoding("SHIFT_JIS");
        String strName=request.getParameter("name");
        String strAge=request.getParameter("age");
        %>
        
        <HTML>
        <HEAD><TITLE>jsp cgi</TITLE>
        </HEAD>
        <BODY>
        <h3>表の作成</h3>
        <TABLE border=1>
        <TR><TD>name</TD><TD><%=strName%></td></tr>
        <TR><TD>age</TD><TD><%=strAge%></td></tr>
        </TABLE>
        </HTML>

      2. リンク
         ex2.htmをex.htmと同様に
         \Program Files\jakarta-tomcat-5.0.25\webapps\jsp-examples
        の index.htm の末尾にリンクします。

      3. エラー処理
         ex2.jsp ファイルの文法エラーは、ex2.jsp のページにエラーとして表示されます。

    3. 繰返し処理の例

      1. 繰返しを含むJSP
         FORMタグで、countに回数、messageに文字列 を指定し、 JSP で指定回数文字列を繰返し表示する例を紹介します。以下は、TABLE タグ部分を表示する JSP です。for文で、TRタグを繰返し生成しています。

         String message=request.getParameter("message");
         int count=Integer.parseInt(request,getparameter("count");
         
         <TABLE>
         <TR><TD>回数</TD><TD>メッセージ</td></TR>
        <% for (int i=0; i < count;i++){ %>
          <TR><TD><%= i+1 %></TD><TD><%= message %></TD></TR>
        <% } %>
        </TABLE>
        

    4. セッションとクッキーの利用法

    5. データベースの利用法

    6. ファイルを扱う

    7. 電子メールを利用する

  4. 参考文献
     竹形誠司:Java+MySQL+Tomcatで始めるサーバアプリケーション開発、ラトルズ