QA@IT

javaでコンパイルできない(xampp)

3973 PV

import java.io.;
import javax.servlet.
;
import javax.servlet.http.*;

public class MonthView1 extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException{

・・・・省略・・・・

http://www.javadrive.jp/servlet/schedule/index2.htmlにあるサーブレットのものをxamppをつかい実行しようとしています。しかし、
import javax.servlet.;
import javax.servlet.http.
;
のエラーがでてしまいコンパイルできず行き詰っています。クラスパスの設定らしいのですが、初心者のためわからない点が多いです。
教えていただけるとありがたいです。

  • コンパイルはどのように実行していますか?eclipseなどを使用していますか? -
  • 初心者とのことですがほかのServletはコンパイルして動かしたことはありますか? -

回答

出来ました。ありがとうございます。
まだまだ、javaの学習をしてマスターしたいと思います。しかし、慣れないものですね
みなさん凄いですよ…

編集 履歴 (0)
  • サーバーやフレームワークなどが入ってくると様々な設定やコマンドが出てきて難解に思えますし覚えるのも大変ですが、実際には手順を簡略化するためのものです。パターンになれるまでは大変ですが一から自分で実装するよりは楽ですので、最初のうちは我慢するしかないですね。
    開発環境を整えるとまた楽に設定できる場合もあります。
    -

ひとまず一般的なコンパイル方法を回答します。

その前に、
Tomcatでサーブレットを動かす場合、設定が必要です。
現在はあまり意識されていないと思いますがApacheとTomcatは別のアプリケーションであり、連携させるにあたっても設定が必要になります。

ですので、

xamppの直下にサーブレットサンプルフォルダをつくっています。

この場所のサーブレットを動かすにはいろいろ設定が必要になりますので、ここでの説明ではサーブレットの場所はxamppに付属のサーブレットサンプルのフォルダに追加することにします。
またサーブレットはごく簡単なものにさせてもらいます。
(個人的にご提示のサイトを参照するのが面倒なので)

環境はWindowsと仮定します。
USBドライブは x: とします。
javaのコンパイラ(jdk)は C:\Program Files\Java\jdk1.7.0_21\bin にあるとします。
自分の環境に読み替えてください。

サーブレットのサンプルフォルダは x:\xampp\tomcat\webapps\examples です。

  1. サーブレットのコピー
    x:\xampp\tomcat\webapps\examples\WEB-INF\classesHelloWorldExample.java
    というファイルがありますので、MyHelloWorldExample.javaという名前に変えてください(違う名前にはしないでください)。

  2. ソースを修正
    コピーしたMyHelloWorldExample.java を開き、クラス名も同じように修正します。

    public class HelloWorldExample extends HttpServlet {
    

    public class MyHelloWorldExample extends HttpServlet {
    

    に直します。(ほかは直さないでください。)

  3. Tomcatの設定を修正
    x:\xampp\tomcat\webapps\examples\WEB-INF\web.xml にサーブレットの情報を追加します。
    修正は2か所、130行目あたりの

    <servlet>
        <servlet-name>HelloWorldExample</servlet-name>
        <servlet-class>HelloWorldExample</servlet-class>
    </servlet>
    

    を以下の様にすぐ後にMyHelloWorldExampleの情報を追加します

    <servlet>
        <servlet-name>HelloWorldExample</servlet-name>
        <servlet-class>HelloWorldExample</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>MyHelloWorldExample</servlet-name>
        <servlet-class>MyHelloWorldExample</servlet-class>
    </servlet>
    

    さらに 170行目あたりも同様に HelloWorldExampleを元にMyHelloWorldExampleの設定を増やします。

    <servlet-mapping>
        <servlet-name>HelloWorldExample</servlet-name>
        <url-pattern>/servlets/servlet/HelloWorldExample</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>MyHelloWorldExample</servlet-name>
        <url-pattern>/servlets/servlet/MyHelloWorldExample</url-pattern>
    </servlet-mapping>
    

    4行を2個、全部で8行追加しました。

  4. コンパイル
    ここまできてやっとコンパイルになります。
    コマンドプロンプトを開きます。まずjavaコンパイラにPathを通します。

    set path=C:\Program Files\Java\jdk1.7.0_21\bin;%PATH%
    

    次に今回の問題の本質であるサーブレットのライブラリにパスを通します。
    このライブラリにパスが通ってないためにコンパイルエラーが出ていました。

    set classpath=.\;x:\xampp\tomcat\lib\servlet-api.jar
    

    ソースがコンパイルできる場所に移動して、コンパイルを行います。

    cd x:\xampp\tomcat\webapps\examples\WEB-INF\classes
    javac MyHelloWorldExample.java
    

    コンパイルエラーがないことを確認してください。

  5. 実行
    最後にTomcatを再起動して
    http://localhost/examples/servlets/servlet/MyHelloWorldExample
    にアクセスしてみてください。
    Hello World! と表示されていれば成功です。

6. 改造
MyHelloWorldExample.javaの49行目を

// String title = rb.getString("helloworld.title");
String title = "Some String";

と改造して、再びコンパイル、Tomcatの再起動をしてアクセスしてみると内容が変化しています。

ちなみにサーブレットを増やすたびに設定を追加とか、コンパイルの度にTomcatを再起動とかいった部分は学んでいくと便利になる方法も出てくると思います。

編集 履歴 (1)

サーブレットにかんしては、コンパイルなどはまだしたことがありません。今環境がxamppをUSBに展開してxamppの直下にサーブレットサンプルフォルダをつくっています。
また、eclipsは使っていません。
あと、tomcatとアパッチは起動しています

編集 履歴 (0)
  • 環境は大体わかりました。
    質問の方に「コンパイルできず行き詰っています。」とありますが、今どうやっていますか?コマンドでやっている場合は打ち込んでいるコマンドを教えてください(もしコマンド中にユーザー名など出てきて見せたくない場合はその部分だけ書き換えてかまいません)。
    ツールでやっている場合はツールを教えてください。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。