🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

4994閲覧

Eclipseで、Servletが実行されない

hon.ki

総合スコア157

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2019/12/30 23:48

編集2019/12/31 01:47

####環境
Mac OS Mojave(10.14.4)で、
Eclipse IDE for Enterprise Java Developers.

Version: 2019-06 (4.12.0)
Build id: 20190614-1200 のEclipseを使っています。

Servlet Specification: 3.1
TomCat8,Java8 です。
####操作した手順
Servletのサンプルコードを実行しようとしているのですが、実行されず、また原因がわからず困っています。
Eclipseのファイル→新規→その他→動的webProject→次へ→プロジェクト名abc、ターゲットランタイムTomcat8(java8)、構成TomCat8(Java8)デフォルト構成→次へ→次へ→完了→srcで新規→名前defで完了→def.javaに以下を入力

package abc; import java.util.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class def extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException { try{ //コンテンツタイプの設定 response.setContentType("text/html; charset=UTF-8"); //時刻の取得 Date dt = new Date(); //HTML文書の書き出し PrintWriter pw = response.getWriter(); pw.println("<!DOCTYPE html><html>\n" + "<head><title>サンプル</title></head>\n" + "<body><div style=\"text-align: center;\">\n" + "<h2>ようこそ</h2>" + "<hr/>\n" + "今" + dt + "です。<br/>\n" + "お選びください。<br/>\n" + "<br/>\n" + "<a href=\"../car1.html\">乗用車</a><br/>\n" + "<a href=\"../car2.html\">トラック</a><br/>\n" + "<a href=\"../car3.html\">オープンカー</a><br/>\n" + "</div></body>\n" + "</html>\n"); } catch(Exception e){ e.printStackTrace(); } } }

→「サーバー」の「使用可能なサーバがありません。このリンクをクリックして新規サーバを作成して下さい」をクリック→サーバのタイプとしてvTomcat8.5サーバーを選択→次へ→abcを「使用可能」から構成済みに追加→完了→def.javaを右クリックして「1.サーバで実行」→既存のサーバを選択でローカルホストのTomcat8(Java8)を選択→次へ→完了としました。
####エラーの内容
http://localhost:8080/abc/servlet/abc.defで
HTTPステータス 404 - Not Found
Type ステータスレポート
メッセージ /abc/servlet/abc.def
説明 The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.
と表示されます。
####期待していた動作
期待していた答えとしては、「ようこそ」と書かれたページが、http://localhost:8080/abc/servlet/abc.defに表示されることでした。
####試してみたこと
試したこととしては、
①package abcで、新規→サーブレット→クラス名ghiで次へ→次へ→完了として、ghi.javaを右クリックで
「1.サーバで実行」→既存のサーバを選択でローカルホストのTomcat8(Java8)を選択→次へ→完了とすると、
http://localhost:8080/abc/ghiでServed at: /abcと表示されます。ghi.javaは以下です。

package abc; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ghi */ @WebServlet("/ghi") public class ghi extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ghi() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }

http://localhost:8080/を表示すると、404になっている。
③abc/WebContentの下にindex.htmlを作成し、

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>タイトル</title> </head> <body> </body> </html>

として、
http://localhost:8080/abc/にアクセスすると、「タイトル」の表示が出る。
http://localhost:8080/abc/defにアクセスしても、同様の404エラーが出る。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/12/31 02:41

abc.def abc/def ってどこからきたものでしょうか。
hon.ki

2019/12/31 04:56

質問ありがとうございます。 abcは動的プロジェクトの名前、かつsrc以下のパッケージ名です。defは、ファイル名です。(def.java)。 したがって、abc.defはパッケージabcのdef.javaを、abc/defは、動的プロジェクトabcのdef.javaを、表しています。
m.ts10806

2019/12/31 04:59

本件と直接関係あるかはともかく、一応、Javaの命名規則には準じておいた方が良いかとは思います。 https://qiita.com/rkonno/items/1b30daf83854fecbb814 要は「大文字で始める」「クラス名とファイル名は同じ」「単語の繋ぎは使わない。次の単語も大文字始まり」あたりですね。
hon.ki

2019/12/31 05:04

気をつけさせていただきます。ありがとうございます。
guest

回答1

0

ベストアンサー

def サーブレットに、サーブレットマッピングの定義がありません。

ghi サーブレットに付与されている @WebServlet("/ghi") のように、アノテーションで記載するか、デプロイメント・ディスクリプタ(web.xml) での定義が必須です。

お節介になるかも知れませんが、サーブレットもクラスの1つなので、ちゃんとした名前を付けてあげるべきではないかと思います。

投稿2019/12/31 05:34

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hon.ki

2019/12/31 06:29

@WebServlet("/def")としたところ、無事表示がされました。 また、命名規則について、気をつけたいと思います。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問