JSP Error Guide

Servlets&JSP のプログラムガイド&エラーガイドです。

前田稔の超初心者のプログラム入門

プログラムガイド

  1. サーブレットや JSP はサーバーサイドで動作します。
    従って Servlets や JSP を動かすには、apache-tomcat(アパッチ・トムキャット)が使えるサーバーにアップロードする必要があります。
    現実問題として apache-tomcat をサポートしているサーバーを契約することは経済的に重荷です。
    そこで無料で提供されている apache-tomcat をダウンロードして、自宅のマシンにサーバーを構築します。
    サーバーの構築は サーブレット&JSP を参照して下さい。
  2. apache-tomcat が "C:\tomcat\" にインストールされた物として説明を続けます。
    サーバー上(自宅のマシンに構築した apache-tomcat)では、大文字と小文字の区別が必要です。
    またアップロードするアプリケーションは、サーバー上の決められたディレクトリ(フォルダー)に配置しなければなりません。
    フォルダーの構成は サーブレット&JSP を参照して下さい。
  3. サーブレットは、事前に .java をコンパイルして .class ファイルを作成しなければなりません。
    これに対して JSPは「.jsp ファイルをそのまま Web サーバーにアップロード」すれば、それだけで動作します。
    (正確には JSP のプログラムは自動的にサーブレットに変換されてから実行されます。)
    こう書くと、如何にも JSP の方が便利なようですが、エラーのときは行番号だけで、何が悪いのかは教えてくれません。
    また Beans が関係してくると、エラーの追及も困難を極めます。
    サーブレットは、事前にコンパイルするので、今までと同様にエラーメッセージが表示されます。
  4. JSP のソースプログラム(*.jsp)は、例えば "C:\tomcat\webapps\hoge\jsp\ のフォルダーに格納します。
    プログラムの修正は、ソースを修正してブラウザの更新アイコンをクリックすれば画面に反映します。
    但し、JSP のみでアプリケーションが構成されている場合です。
  5. Servlets のソースプログラム(*.java)は、例えば "C:\tomcat\webapps\hoge\WEB-INF\classes\ のフォルダーに格納します。
    ソースを修正して class ファイルを更新しただけでは「画面に反映しない」ことがあります。
    ブラウザや tomcat のキャッシュが働いているからでしょうか?。
    おかげで Servlets の Programing(debug)は思った以上に面倒なので、覚悟しておいて下さい。 (^_^;)
  6. 画面に反映しないときは、次の操作を試して下さい。
  7. デバッグで厄介なのは「ソースが間違っているのか、画面に反映していないだけなのか」を確かめながら進めなければならないことです。
    また複数のファイル(*.java, *.class, *.xml, *.jsp, Beans)が関係することで、より複雑になります。
    ソースコードのエラーの指摘も行番号だけで、何が悪いのかは教えてくれません。
    JSP でエラーの行が指摘されたときは、次のことを確かめて下さい。
  8. サーブレットや JSP はサーバーサイドで動作します。
    従ってアップロードするサーバーによって使われる文字コードが異なります。
    例えば UTF-8 のメッセージを送って、そのまま Shift_JIS で表示すると「とんでもない文字」が表示されます。
    これを「文字化け」と呼んでいます。 (^_^;)
    文字化けを防ぐには、サーバー側とクライアント側で適切な文字コードを選択すると共に、場合によってはコード変換が必要です。
    私のプログラムは Windwos7 で Shift_JIS の環境で実行を確認しています。
    全角文字(日本語)が文字化けすることが多いのですが、そのときは次のソースを参考にして、修正して下さい。
  9. JSP のエラーは解り難く、経験を積んで、ノーハウを蓄積するしか方法が無いのでしょうか。 (;_;)
    ブラウザのメニューからソースの表示を選ぶと、吐き出されたソースコードを確認することが出来ます。
    ソースコードに目印(バージョン表示など)を付けて、少しずつ確認しながら開発する方法がお勧めです。

コンパイル上の注意

  1. package を設定したときのコンパイルです。
    例えば testbean.java に package mybean; を設定して下記のフォルダに格納します。
    +classes
        ・testbean.java
    
    classes をカレントディレクトリにしてコンパイルすると、次のようになります。
    +classes
        +build
            +mybean
                *testbean.class
        ・testbean.java
    
    build のフォルダは言うなれば余計なものです。
    このようにコンパイルして testbean.class を本来の場所にコピーすることも出来ます。
    本来の場所は classes\mybean\testbean.class です。
  2. package を設定したときは、次の方法がお勧めです。
    testbean.java は、mybean のフォルダを作成して格納して下さい。
    +classes
        +mybean
            ・testbean.java
            *testbean.class
    
    コンパイルは classes をカレントディレクトリにして、次のコマンドを実行します。
    C:\Users>CD C:\tomcat\webapps\beans\WEB-INF\classes
    C:\tomcat\webapps\beans\WEB-INF\classes>javac mybean\testbean.java
    これで余計なフォルダが作成されることも無く、class のコピーも不要です。
    JCpad を使うときは Dummy.java を用意してコマンドボックスからコンパイルする方法が便利です。
    (下記の画像はコマンドボックスからコンパイルする例です)
  3. サーブレットをコンパイルするときは、javax.servlet.* などをインポートするために servlet-api.jar を classpath で指定しなければなりません。
    例えば HelloWorld.java では、HelloWorld.java が置かれているディレクトリに移動して、次のコマンドを実行します。
    C:\Users>CD C:\tomcat\webapps\piyo\WEB-INF\classes
    C:\tomcat\webapps\piyo\WEB-INF\classes>javac -classpath C:\tomcat\lib\servlet-api.jar HelloWorld.java
  4. コマンドラインから毎回 classpath をタイプする方法に代えて、環境変数 CLASSPATH を使う方法もあります。
    CPad で環境変数を設定すると、青色の三角マークをクリックするだけでコンパイル出来ます。
    先頭の「.;」はカレントディレクトリの追加で、package などを使ったときに必要です。

  5. 一般的に Servlet は \WEB-INF\classes のフォルダに格納されます。
    サーブレットを呼び出すには Servlet のフォルダを web.xml でマッピングします。
    例えば HelloWorld.jsp(class)の場合は次のようになります。
    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <web-app>
    <servlet>
    <servlet-name>hello</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
    </servlet>
    
    <servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/hello</url-pattern>
    </servlet-mapping>
    
    </web-app>
    

Error Guide

このホームページの作成過程で表示されたエラーメッセージと具体的な対策です。

Java Game Program