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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Tomcat

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

Apache Tomcat

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

解決済

サーブレットがサーバ上で実行できない

hirono_suke
hirono_suke

総合スコア7

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Tomcat

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

Apache Tomcat

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

1回答

0評価

1クリップ

832閲覧

投稿2021/09/10 10:14

編集2021/09/10 11:17

現在『スッキリわかるサーブレット&JSP入門 第2版』で学習を進めています。
その中で簡単なサーブレットを作成し、サーバ上で実行する項目があり、そこで躓いてしまいました。

ディレクトリ構造は以下の通りです。
イメージ説明
ちなみに、Ayabe.htmlをサーバで実行することはできています。
SampleServlet.java

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.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jakarta.servlet.annotation.WebServlet; @WebServlet("/SampleServlet") public class SampleServlet extends HttpServlet{ static final long serialUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ String[] luckArray = {"大吉", "末吉", "凶"}; int index =(int)(Math.random() * 3); String luck = luckArray[index]; Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日"); String today = sdf.format(date); 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>"); } }

web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4"> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>SampleServlet</display-name> <servlet-name>SampleServlet</servlet-name> <servlet-class>servlet.SampleServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SampleServlet</servlet-name> <url-pattern>/SampleServlet</url-pattern> </servlet-mapping> </web-app>

以上が今回記述したコードです。この状態で実行すると以下のようなエラー画面が出てきてしまいます。
イメージ説明

また、コンソールには、

また、コンソールには
情報: Serverのバージョン名: Apache Tomcat/10.0.6 [金 9月 10 18:56:08 JST 2021]

情報: Server ビルド: May 8 2021 15:24:15 UTC [金 9月 10 18:56:08 JST 2021]
情報: サーバーのバージョン番号: 10.0.6.0 [金 9月 10 18:56:08 JST 2021]
情報: OS 名: Windows 10 [金 9月 10 18:56:08 JST 2021]
情報: OS バージョン: 10.0 [金 9月 10 18:56:08 JST 2021]
情報: アーキテクチャ: amd64 [金 9月 10 18:56:08 JST 2021]
情報: Java Home: C:\pleiades-2021-06-java-win-64bit-jre_20210629 (2)\pleiades\java\16 [金 9月 10 18:56:08 JST 2021]
情報: JVM バージョン: 16.0.1+9 [金 9月 10 18:56:08 JST 2021]
情報: JVM ベンダ: AdoptOpenJDK [金 9月 10 18:56:08 JST 2021]
情報: CATALINA_BASE: C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0 [金 9月 10 18:56:08 JST 2021]
情報: CATALINA_HOME: C:\pleiades-2021-06-java-win-64bit-jre_20210629 (2)\pleiades\tomcat\10 [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: -Dcatalina.base=C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0 [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: -Dcatalina.home=C:\pleiades-2021-06-java-win-64bit-jre_20210629 (2)\pleiades\tomcat\10 [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: -Dwtp.deploy=C:\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: --add-opens=java.base/java.io=ALL-UNNAMED [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: --add-opens=java.base/java.util=ALL-UNNAMED [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: -Dfile.encoding=UTF-8 [金 9月 10 18:56:08 JST 2021]
情報: コマンドライン引数: -XX:+ShowCodeDetailsInExceptionMessages [金 9月 10 18:56:08 JST 2021]
情報: 商用環境に最適な性能を発揮する APR ベースの Tomcat ネイティブライブラリが java.library.path [C:\pleiades-2021-06-java-win-64bit-jre_20210629 (2)\pleiades\java\16\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/pleiades-2021-06-java-win-64bit-jre_20210629 (2)/pleiades/eclipse//jre/bin/server;C:/pleiades-2021-06-java-win-64bit-jre_20210629 (2)/pleiades/eclipse//jre/bin;C:\Java\apache-maven-3.8.1\bin;C:\Java\apache-maven-3.8.1\bin;C:\Program Files\AdoptOpenJDK\jdk-11.0.11.9-hotspot\bin;C:\Program Files (x86)\Common Files\Apple\Apple Application Support;C:\Program Files (x86)\Intel\iCLS Client;C:\Program Files\Intel\iCLS Client;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Common Files\Roxio Shared\DLLShared;C:\Program Files (x86)\Common Files\Roxio Shared\OEM\12.0\DLLShared;C:\Program Files (x86)\Roxio 2010\OEM\AudioCore;c:\Program Files (x86)\Common Files\Ulead Systems\MPEG;C:\Program Files\Intel\WiFi\bin;C:\Program Files\Common Files\Intel\WirelessCommon;C:\Program Files (x86)\Fujitsu\FJAgent\Core\bin;C:\WINDOWS\System32\Op;C:\Program Files\Git\cmd;C:\Users\makin\AppData\Local\Microsoft\WindowsApps;C:\Users\makin\AppData\Local\atom\bin;C:\Users\makin\AppData\Local\GitHubDesktop\bin;E:\BCC102\bin;%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;;C:\pleiades-2021-06-java-win-64bit-jre_20210629 (2)\pleiades\eclipse;;.] に存在しません。 [金 9月 10 18:56:08 JST 2021]
情報: プロトコルハンドラ ["http-nio-8080"] を初期化します。 [金 9月 10 18:56:09 JST 2021]
情報: サーバーの初期化 [1532]ms [金 9月 10 18:56:09 JST 2021]
情報: サービス [Catalina] を起動します [金 9月 10 18:56:09 JST 2021]
情報: サーブレットエンジンの起動:[Apache Tomcat/10.0.6] [金 9月 10 18:56:09 JST 2021]
情報: プロトコルハンドラー ["http-nio-8080"] を開始しました。 [金 9月 10 18:56:09 JST 2021]
情報: サーバーの起動 [832]ms [金 9月 10 18:56:09 JST 2021]
情報: サーブレット [servlet.SampleServlet] を利用不可能にマークします [金 9月 10 18:56:10 JST 2021]
重大: サーブレット [servlet.SampleServlet] に例外を割り当てます [金 9月 10 18:56:10 JST 2021]
と記載されていました。

その後web.xmlに問題があると思い、<servlet>から</servlet-mapping>ををコメントアウトすると、
500のエラー(クラス [servlet.SampleServlet] はServletではありません)が以下の記述とともに出てきました。

例外

jakarta.servlet.ServletException: クラス [servlet.SampleServlet] はServletではありません
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1696)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:831)

根本原因

java.lang.ClassCastException: class servlet.SampleServlet cannot be cast to class jakarta.servlet.Servlet (servlet.SampleServlet is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @3568f9d2; jakarta.servlet.Servlet is in unnamed module of loader java.net.URLClassLoader @5a10411)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1696)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:831)

様々なサイトやこのサイトの似たような質問も拝見し試してみましたがうまくいきませんでした。
どこを直したらうまくいきますでしょうか?もし有用なサイトや不備がありましたら教えていただきたく思います。

ちなみにweb.xmlについては私は手を加えておらず一度コメントアウトした箇所はservlet作成の際に自動で付け加えられたものです。

開発環境

統合開発環境:Eclipse IDE(version:2021-06 (4.20.0))
サーバ:Tomcat10_Java16

追記

新規→その他→サーブレットからServlet.javaを作成し、とくにコードを付け加えていない状態のままサーバ上で実行しましたが、web.xmlでのコメントアウト前はTomcatの実行に失敗し、コメントアウト後では404のエラーが出ました。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

dodox86

2021/09/10 10:54

> 統合開発環境:eclipse(最新のものを使用) "最新"と言うのは今時点のもので、相対的なものです。後日、この質問回答を読んだ時に情報の価値が減るので、このような記載をする場合は具体的なバージョン情報を挙げましょう。 例えばEclipse のメニューから「Help」→「About Eclipse IDE」などと辿ってバージョン情報を確認することができるはずです。 また、 > サーバ:Tomcat10_Java16 ですが、Eclipseの新規プロジェクトで簡単なサーブレットを作ってちゃんと動きますか? まずそれが第一条件です。その基本的な状態で動かない場合、いじくりまわした個人のプロジェクトを動かすことは難しいです。
hirono_suke

2021/09/10 11:18

ご指摘ありがとうございます。質問に追記を加えましたので一度ご確認いただけると幸いです。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Tomcat

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

Apache Tomcat

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