JAVA eclipse Servletが実行できない
- 評価
- クリップ 0
- VIEW 14K+
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>");
}
}
パスが違うようなので、
http://localhost:8080/example/SampleServlet.java
と、手動でアクセスしようとすると、、、
またもや404エラー。
まだ第3章でしょっぱなからつまづいているのですが、何がいけないのでしょうか?
この土日で終わらせたいのに、、、
プロジェクトは、動的WEBプロジェクトです。
動的WEBプロジェクト->新規->JSPファイル、で作りました。
このあたりは書籍の通りなので間違いないと思うのですが、、、
土日で申し訳ないんですが、
教えていただけませんでしょうか。
〜追記〜
eclipseではエディタの左に×がついてるのが気になります。
×があるのはこれで全部ですl。
~追記~
Tomcatは最新の方がいいと思って9にしていたんですが、8にしました。
もう一度、最初から書籍の通りにMacとWinでやったら下記コードの実行をMacではできました。
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
サーバーとサーバーアダプターはバージョンを合わせてもらえますか?
一番手っ取り早いのが書籍のバージョンに合わせてください。
各マイナーバージョンはこちら
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
デバッグの仕方、特にエラーログ、エラーメッセージ等を勉強したらいいですよ。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
プロジェクトは、動的WEBプロジェクトです。
動的WEBプロジェクト->新規->JSPファイル、で作りました。
このあたりは書籍の通りなので間違いないと思うのですが、、
作成されているのはサーブレットだと思うのですが、新規→JSPファイルで作成したのでしょうか?
このソースの場合、新規→Servlet で作成する必要があります。
普通にやれば、 javax.servlet のような基本的なパッケージにビルドパスが通っていないなんてことはないのですが、プロジェクト→プロパティの中の Java Build Path には何が見えてますか? また、そこに☓はついてませんか?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
サーブレットの実行をするURLが間違っているようです。
サーブレットを実行するURLは、@WebServlet
に記述した値です。
他にもjavax.servletでコンパイルエラーが出ている状況なので、動的Webプロジェクトで作成したならば、サーバとして選択したTomcatへのビルドパスが正しく設定されていないようです。
正しく動的Webプロジェクトを作り、サーバも設定していれば、以下の図のようになります。
確認する箇所は次のとおりです。
- Javaリソース > ライブラリ > Apache Tomcat8.0(......) が存在しているか
- Servers に ローカルホストのTomcat8(......) が存在しているか
- 「サーバ」タブに、ローカルホストのTomcat8(....)が存在しているか
- これらの設定後にコンパイルエラーが出ている場合は、修正後にプロジェクトをクリーン→自動的にビルドをEclipseの設定で行う。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.10%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/09/03 14:10
色々試して少し状況が変わっており、追記させてもらっておりますので、見ていただけないでしょうか。
MacとWinで試しているのですが、
Macでは実行できました。
Tomcatも両OSとも8で試しているので、Winだけerrorがでてしまうのは、
eclipseの構造の違いなのかなと思うのですが、どうなのでしょうか。
2016/09/03 14:23 編集
それが原因ですね。
別のサーバーランタイムが紐付いてます。
アノテーションが利用可能な場合「Apache Tomcat v7.0」または「Apache Tomcat v8.0」となっている必要があります。
2016/09/03 20:14
tomcat8を使っているつもりが実際には6が起動しているという解釈でよろしいでしょうか?
2016/09/03 20:28
MacとWinでは、デフォルトが違うため
Winのサーバーをtomcat8にしていても
ターゲットが6になっていたため、おかしかったと思います。
eclipseが同じverでも本家とpladeusから入手したものでは、デフォルト値など若干違いがあるようで同じ手順でやっていてもちゃんと確認しないと異なる結果になってきそうです、、、
ありがとうございました!