質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.10%

JAVA eclipse Servletが実行できない

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 14K+

score 403

JAVAの「スッキリわかるサーブレット&JSP入門」という書籍で勉強中なのですが、まず、tomcatで動作確認するために下記のサンプルを試したらできました。

eclipseでtomcatをサーバーにしてやっています。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
hello!
</body>
</html>

これを実行すると、、、

イメージ説明

そのまま書籍の通り進めていくサーブレットとやらを使ってみるのですが、下記コードを実行しても404が返ってきます。

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/SampleServlet")
public class SampleServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

  protected void doGet(HttpServletRequest request,
      HttpServletResponse response)
      throws ServletException, IOException {

    // 運勢をランダムで決定
    String[] luckArray = { "超スッキリ", "スッキリ", "最悪" };
    // 0以上3未満の整数を乱数で生成
    int index = (int) (Math.random() * 3);
    String luck = luckArray[index];

    // 実行日を取得
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
    String today = sdf.format(date);

    // HTMLを出力
    response.setContentType("text/html; charset=UTF-8");
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head>");
    out.println("<title>スッキリ占い</title>");
    out.println("</head>");
    out.println("<body>");
    out.println("<p>" + today + "の運勢は" + luck + "です</p>");
    out.println("</body>");
    out.println("</html>");
  }
}

上記を実行すると、、、
404エラーが
イメージ説明

パスが違うようなので、
http://localhost:8080/example/SampleServlet.java
と、手動でアクセスしようとすると、、、

またもや404エラー。

イメージ説明

まだ第3章でしょっぱなからつまづいているのですが、何がいけないのでしょうか?

この土日で終わらせたいのに、、、

プロジェクトは、動的WEBプロジェクトです。
動的WEBプロジェクト->新規->JSPファイル、で作りました。
このあたりは書籍の通りなので間違いないと思うのですが、、、

土日で申し訳ないんですが、
教えていただけませんでしょうか。

〜追記〜
eclipseではエディタの左に×がついてるのが気になります。
×があるのはこれで全部ですl。

イメージ説明

~追記~

Tomcatは最新の方がいいと思って9にしていたんですが、8にしました。
もう一度、最初から書籍の通りにMacとWinでやったら下記コードの実行をMacではできました。

※これはWinのキャプチャです。
イメージ説明

Winでは、昨日では

import javax.servlet.annotation.WebServlet;
@WebServlet("/SampleServlet")
に×がついていました。

今日起きて、やってみると、何故か9行目が読み込めていました。何故なのか、、、

しかし、14行目のエラーは変わらずです。

Macでは問題なくできています。

Macのeclipseは、
http://mergedoc.osdn.jp/ではなく
http://www.eclipse.org/から本体だけをDLして
http://tomcat.apache.org/download-80.cgi#8.0.36を別途DLしてeclipse.app内の適当なところに設置して
それを使っています。

Winのeclipseは、
http://mergedoc.osdn.jp/から取得し、
最初から
C:\Eclipse\pleiades_neon_4.6\tomcat\8
に入っているものを使っています。

os:Win&Mac
eclipse:4.6 neon
tomcat:8

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+1

サーバーとサーバーアダプターはバージョンを合わせてもらえますか?

一番手っ取り早いのが書籍のバージョンに合わせてください。

tomcat-6
tomcat-7
tomcat-8

各マイナーバージョンはこちら

tomcat-6
tomcat-7
tomcat-8

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/03 14:10

    ありがとうございます。

    色々試して少し状況が変わっており、追記させてもらっておりますので、見ていただけないでしょうか。

    MacとWinで試しているのですが、
    Macでは実行できました。

    Tomcatも両OSとも8で試しているので、Winだけerrorがでてしまうのは、
    eclipseの構造の違いなのかなと思うのですが、どうなのでしょうか。

    キャンセル

  • 2016/09/03 14:23 編集

    別の所でのコメントでライブラリが「Apache Tomcat v6.0」となっているといってますが
    それが原因ですね。

    別のサーバーランタイムが紐付いてます。

    アノテーションが利用可能な場合「Apache Tomcat v7.0」または「Apache Tomcat v8.0」となっている必要があります。

    キャンセル

  • 2016/09/03 20:14

    ありがとうございます。
    tomcat8を使っているつもりが実際には6が起動しているという解釈でよろしいでしょうか?

    キャンセル

  • 2016/09/03 20:28

    動的WEBプロジェクトを作る際にランタイムターゲットが
    MacとWinでは、デフォルトが違うため
    Winのサーバーをtomcat8にしていても
    ターゲットが6になっていたため、おかしかったと思います。

    eclipseが同じverでも本家とpladeusから入手したものでは、デフォルト値など若干違いがあるようで同じ手順でやっていてもちゃんと確認しないと異なる結果になってきそうです、、、

    ありがとうございました!

    キャンセル

0

デバッグの仕方、特にエラーログ、エラーメッセージ等を勉強したらいいですよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/03 01:57

    importしたはいいけどそんなのない
    というエラーが出ているんです、、、

    キャンセル

  • 2016/09/03 02:03

    だったらそれを質問に書きましょう。時間の無駄になりますよ。

    クラスパスの設定に抜けがあるんじゃないですか、前の章に戻って見直した方がいいですね。

    キャンセル

0

プロジェクトは、動的WEBプロジェクトです。 
動的WEBプロジェクト->新規->JSPファイル、で作りました。 
このあたりは書籍の通りなので間違いないと思うのですが、、

作成されているのはサーブレットだと思うのですが、新規→JSPファイルで作成したのでしょうか?
このソースの場合、新規→Servlet で作成する必要があります。

普通にやれば、 javax.servlet のような基本的なパッケージにビルドパスが通っていないなんてことはないのですが、プロジェクト→プロパティの中の Java Build Path には何が見えてますか? また、そこに☓はついてませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/03 14:05

    すいません。
    こちらの記載ミスで実際は
    動的WEBプロジェクト->新規->サーブレット
    です。

    Java Build Pathには下記が通っています。

    example/src
    JRE システム・ライブラリー[java6]
    Apache Tomcat v6.0[Tomcat6(Java6)]
    Web App ライブラリー
    EARライブラリー

    今日試してみると少し状況が変わっており、追記していますので見ていただけませんでしょうか。

    キャンセル

0

サーブレットの実行をするURLが間違っているようです。
サーブレットを実行するURLは、@WebServletに記述した値です。

他にもjavax.servletでコンパイルエラーが出ている状況なので、動的Webプロジェクトで作成したならば、サーバとして選択したTomcatへのビルドパスが正しく設定されていないようです。

正しく動的Webプロジェクトを作り、サーバも設定していれば、以下の図のようになります。

動的Webプロジェクトでサーブレットを作った後のEclipse

確認する箇所は次のとおりです。

  • Javaリソース > ライブラリ > Apache Tomcat8.0(......) が存在しているか
  • Servers に ローカルホストのTomcat8(......) が存在しているか
  • 「サーバ」タブに、ローカルホストのTomcat8(....)が存在しているか
  • これらの設定後にコンパイルエラーが出ている場合は、修正後にプロジェクトをクリーン→自動的にビルドをEclipseの設定で行う。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/03 12:34

    多分、質問者は tomcat 8 Adapter で tomcat 9 (評価版 tomcat) を利用しているから現状になっていると思われる。 

    キャンセル

  • 2016/09/03 13:33

    WTP使っているようですし、Tomcat9ランタイムが初期インストールに含まれていないので、まずは動くTomcat8のランタイムにするべきでしょうね。コメントありがとうございます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る