###実行環境
- 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がアプリケーションの構成などを記憶していて、それが今回のように影響を与えてしまっている?
回答2件
あなたの回答
tips
プレビュー