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

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

新規登録して質問してみよう
ただいま回答率
85.50%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

servlet

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

Tomcat

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

Q&A

解決済

2回答

5113閲覧

[Java]サーブレットが見つからないとエラーが出る

pifacela

総合スコア19

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

servlet

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

Tomcat

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

0グッド

0クリップ

投稿2018/10/12 14:57

編集2018/10/13 09:31

###実行環境

  • Tomcat 9.0.12
  • Linux Mint 19 MATE
  • ターミナルからTomcatを起動させています。
  • Eclipse上でTomcatは搭載していません。

###ファイルの配置
アプリケーション名
└WebContent
├WEB-INF
│├classes
││└TestServlet.class
│├lib
│└web.xml
├jsp
│└index.jsp
├META-INF
└index.html

※webapps以下に作成しています。
※コンテキストファイルは作成していません。

###デプロイメントの方法
こちらのサイトを参考にしました。

###発生している問題

  • ~~コンテキストパス/WebContent でないとindex.htmlにアクセスできない。~~←必ずしもこうはならない(下記の検証より)
  • (/WebContentディレクトリ以下にWebリソースを配置しないと、Tomcat Webアプリケーションマネージャにおいて、作成したアプリケーションの「実行中」の欄がfalseになる。)←今回作成したアプリケーションのみこのような結果になった
  • 強引に、 コンテキストパス/WebContent/jsp/index.jsp でindex.jspを表示しようとすると HTTPステータス 500 – Internal Server Error と出る。(エラーメッセージ・スタックトレースは長いので下に記します。)
  • なぜかサーブレットにアクセスすると HTTPステータス 404 – Not Found が出てしまう。
  • 追加:(サーブレットにpackage文を追加すると、Tomcat Webアプリケーションマネージャにおいて、作成したアプリケーションの「実行中」の欄がfalseになる。)←下記の検証で作成したアプリケーションのみこのような結果になった

###index.jspで表示されるエラー
HTTPステータス 500 – Internal Server Error
Type Exception Report

メッセージ /WebContent/jsp/index.jsp (line: [1], column: [5]) 無効な指示子です

説明 The server encountered an unexpected condition that prevented it from fulfilling the request.

例外

org.apache.jasper.JasperException: /WebContent/jsp/index.jsp (line: [1], column: [5]) 無効な指示子です
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:292)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:98)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:512)
org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1797)
org.apache.jasper.compiler.Parser.parse(Parser.java:141)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:127)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:202)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:385)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:362)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:346)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:603)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:383)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

###index.jspのコード
上のエラーメッセージの太字で「/WebContent/jsp/index.jsp (line: [1], column: [5]) 無効な指示子です」とありますが、修正したはずなのに表示され続けます。(修正内容:<%@param<%@page
一応ではありますが、修正後のソースコードを載せさせて頂きます。

JSP

1<%@page contentType="text/html;charset=utf-8"%> 2 3<!DOCTYPE html> 4<html> 5<head> 6</head> 7<body> 8 index.jsp 9</body> 10</html>

###web.xmlのコード
一部省略してあります。

XML

1 <servlet> 2 <servlet-name>test</servlet-name> 3 <servlet-class>TestServlet</servlet-class> 4 </servlet> 5 6 <servlet-mapping> 7 <servlet-name>test</servlet-name> 8 <url-pattern>/test</url-pattern> 9 </servlet-mapping>

###検証
今まで作成していたアプリケーションと同じように、(適宜ディレクトリ名などは変更しました。)新たにWebアプリケーションを作成して検証してみました。(WebContentディレクトリにリソースを入れずに、それらをコンテキストルート直下に入れ、WebContentディレクトリは作成しませんでした。)この場合は問題なく動いていました。

さらに、サーブレットにpackage文を追加し、web.xmlも<servlet-class>パッケージ名.TestServlet</servlet-class>に変更してみたところ、Tomcat Webアプリケーションマネージャにおいて、作成したアプリケーションの「実行中」の欄がfalseになってしまいました。(今まで作成していたアプリケーションにも同じようなことをしてみましたが、「実行中」の欄の表示はtrueのままで変わりませんでした。)

###予想
Tomcatがアプリケーションの構成などを記憶していて、それが今回のように影響を与えてしまっている?

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

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

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

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

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

A-pZ

2018/10/12 15:29

WebアプリケーションをどのようにTomcatへ搭載(デプロイ)して実行しているかも書いていただくと、回答が得られるかもしれません。Tomcatのwebappへ直接ファイルを修正したものを配置するのではなく、warファイルにして搭載するのが一番簡単な手法です。Eclipse上からTomcatへ搭載しているならその旨も記載してください。
guest

回答2

0

ベストアンサー

アプリケーション名 └WebContent ├ WEB-INF │├ classes ││└ TestServlet.class │├ lib │└ web.xml ├ jsp │└ index.jsp ├ META-INF └ index.html

この構成は、Eclipse内で開発しているときの構成で、実際にWebアプリケーションをデプロイするときは、必ず次の構成を取らなければなりません。具体的には、デプロイ時にはWebContentは不要です。

アプリケーション名 ├ WEB-INF │├ classes │├ lib │└ web.xml ├ META-INF ├ (任意のWebリソースとパス) …

参考にされたサイトを見たのですが、サーブレットを個別にコンパイルしているようです。
それは間違いではないのですが、Eclipseを利用しているのであれば、アプリケーションのエクスポートで war形式 にしたものを出力して、それをTomcatのwebappsに配置してからTomcatを再起動すればWebアプリケーションとして自動的に展開されます。

war形式のエクスポートは、実際にはコンパイル済みのWebアプリケーションをデプロイする形式にまとめています。

投稿2018/10/14 02:29

A-pZ

総合スコア12011

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

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

pifacela

2018/10/15 04:48

この問題に長く直面してきて、わりかしどうでもいいところ(大多数の方がこのような開発の方法をしないだろうと思いますので…)についてあれこれ考えるのは意味をなさないかなと思い、eclipseでの開発に切り替えました。問題なく使えています。ご回答ありがとうございました。
guest

0

元々どうなっていたのか分からないとどう修正したかもわからないのですが、

jsp

1<%@page contentType="text/html;charset=utf-8"%>

jsp

1<%@ page contentType="text/html;charset=utf-8"%>

かな?

投稿2018/10/12 15:18

m.ts10806

総合スコア80765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問