Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Tomcat6でJSPだけHTTP Status 404

自力で可能な限り調べたのですが、行き詰まました。
お知恵を拝借させて下さい。

Tomcat 6.0.18
Java 1.6

Tomcat は Debian etch にバイナリのアーカイブを展開し、自分でjsvcをコンパイルし、tomcat.shを環境変数を設定して作成しました。
アカウントはtomcatをつくり展開したtomcatディレクトリ
の所有にしました。

【tomcat.shの主な設定】
JAVA_HOME=/usr/lib/jvm/java-6-sun
CATALINA_HOME=/opt/tomcat/6.0.18
DAEMON_HOME=${CATALINA_HOME}/bin
TOMCAT_USER=tomcat
TMP_DIR=/var/tmp
CATALINA_OPTS=
CLASSPATH=.:\
$JAVA_HOME/lib/tools.jar:\
$DAEMON_HOME/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar:\
$CATALINA_HOME/lib/servlet-api.jar:\
$CATALINA_HOME/lib/jsp-api.jar:\
$CATALINA_HOME/lib/jasper.jar:

jsvcでの起動/停止はTomcatのログをみて正しくできていることを確認しました。

よくあるHelloWorlのサーブレットは正常に動作するのですが、JSPが処理されません。
以下のエラーメッセージです。

HTTP Status 404 - Servlet jsp is not available
----------------------------------------------------
type Status report

message Servlet jsp is not available

description The requested resource (Servlet jsp is not available) is not available.


----------------------------------------------------
この時のログは

Nov 11, 2008 2:16:48 PM org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet jsp is currently unavailable

です。

JSPがNGなので、servlet-api.jarとか環境変数の問題かと思い、見直しいていますが分かりません。

クラスローダがCLASSPATHを上書きするという様な書き込みを目にしたので、
setclasspath.shを以下の様に書き換えましたが、状況は変わりません。

   #CLASSPATH="$JAVA_HOME"/lib/tools.jar
   CLASSPATH="$CLASSPATH":"$JAVA_HOME"/lib/tools.jar

力尽きてしまいました。
すいませんが、よろしくお願い致します。

11

回答

11019

閲覧

11件の回答

評価

0

server.xmlや、web.xmlに誤りがあるかもしれません。
確認してみてください。

評価

0

webapps以下のファイルの配置はどうなってます?

評価

0

コメントありがとうございます。
$CATALINA_HOME/conf以下はほとんど変更していないです。HelloとプリントできるだけのJSPでいいので、何も
変更は不要かと思い込んでいました。
でも、JSPの設定はあるし、問題ない様にも。。。

自分でも見直してみますが、掲載しておきますので、お気付きの点がございましたら、よろしくお願い致します。

【web.xml】

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

  <!-- ================== Built In Servlet Definitions ==================== -->
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

<!--
    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
-->

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        <init-param>
            <param-name>fork</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>xpoweredBy</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>3</load-on-startup>
    </servlet>

<!--
    <servlet>
        <servlet-name>ssi</servlet-name>
        <servlet-class>
          org.apache.catalina.ssi.SSIServlet
        </servlet-class>
        <init-param>
          <param-name>buffered</param-name>
          <param-value>1</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>expires</param-name>
          <param-value>666</param-value>
        </init-param>
        <init-param>
          <param-name>isVirtualWebappRelative</param-name>
          <param-value>0</param-value>
        </init-param>
        <load-on-startup>4</load-on-startup>
    </servlet>
-->

<!--
    <servlet>
        <servlet-name>cgi</servlet-name>
        <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>cgiPathPrefix</param-name>
          <param-value>WEB-INF/cgi</param-value>
        </init-param>
         <load-on-startup>5</load-on-startup>
    </servlet>
-->


  <!-- ================ Built In Servlet Mappings ========================= -->

    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- The mapping for the invoker servlet -->
<!--
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
-->

    <!-- The mapping for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

    <!-- The mapping for the SSI servlet -->
<!--
    <servlet-mapping>
        <servlet-name>ssi</servlet-name>
        <url-pattern>*.shtml</url-pattern>
    </servlet-mapping>
-->

    <!-- The mapping for the CGI Gateway servlet -->

<!--
    <servlet-mapping>
        <servlet-name>cgi</servlet-name>
        <url-pattern>/cgi-bin/*</url-pattern>
    </servlet-mapping>
-->


  <!-- ================== Built In Filter Definitions ===================== -->

<!--
    <filter>
        <filter-name>ssi</filter-name>
        <filter-class>
          org.apache.catalina.ssi.SSIFilter
        </filter-class>
        <init-param>
          <param-name>contentType</param-name>
          <param-value>text/x-server-parsed-html(;.*)?</param-value>
        </init-param>
        <init-param>
          <param-name>debug</param-name>
          <param-value>0</param-value>
        </init-param>
        <init-param>
          <param-name>expires</param-name>
          <param-value>666</param-value>
        </init-param>
        <init-param>
          <param-name>isVirtualWebappRelative</param-name>
          <param-value>0</param-value>
        </init-param>
    </filter>
-->


  <!-- ==================== Built In Filter Mappings ====================== -->

  <!-- The mapping for the SSI Filter -->
<!--
    <filter-mapping>
        <filter-name>ssi</filter-name>
        <url-pattern>*.shtml</url-pattern>
    </filter-mapping>
-->


  <!-- ==================== Default Session Configuration ================= -->
  <!-- You can set the default session timeout (in minutes) for all newly   -->
  <!-- created sessions by modifying the value below.                       -->

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>


  <!-- ===================== Default MIME Type Mappings =================== -->
    <mime-mapping>
        <extension>abs</extension>
        <mime-type>audio/x-mpeg</mime-type>
    </mime-mapping>
    <mime-mapping>
        <extension>ai</extension>
        <mime-type>application/postscript</mime-type>
    </mime-mapping>
                            :
                        (MIME TYPE...)
                            :


  <!-- ==================== Default Welcome File List ===================== -->

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

評価

0

不良社員様コメントありがとうございます。

/opt/tomcat/6.0.18/webapps/test
の下に
test.jsp     ⇒ よく目にする日付を出すだけのJSP
WEB-INF/web.xml  ⇒ HelloWorldのサーブレットを記載
WEB-INF/lib/   ⇒ CLASSPATHも指定しているので不要と思いつつ、servlet-api.jar等。
その他jakarta-commonsを試したいのでoroやhttpclient等。
WEB-INF/classes ⇒ 今はHelloWorldだけです。
---
また、コンテキストはserver.xmlではなくて、Catalina/localhost/test.xmlとして記述する様にとあったので、その様にしました。
<Context path="/test" docBase="/opt/tomcat/6.0.18/webapps/test" crossContext="true"
         reloadable="true"
         privileged="true" antiResourceLocking="false"
         antiJARLocking="false">
</Context>
これは、必須ではないということなので、消したり、
$CATALINA_HOMEからにしたり色々しましたが、すべて
状況は変わりませんでした。

workの書き込み権限かとも思いましたが、パーミッション設定しています。

何かお気づきの点がありましたら、よろしくお願い致します。




評価

0

JSP周りの説明を少し訳してみました。
訳は間違っているかもしれません。
----------------------------------------------------------------------

●checkInterval
  <!--   checkInterval       If development is false and checkInterval is   -->
  <!--                       greater than zero, background compilations are -->
  <!--                       enabled. checkInterval is the time in seconds  -->
  <!--                       between checks to see if a JSP page (and its   -->
  <!--                       dependent files) needs to  be recompiled. [0]  -->
  <!--                                                                      -->
もし、development が false であり、checkInterval が0より大きいならば、
バックグラウンド コンパイルは有効になっています。
JSP ページ(と、依存するファイル)が再コンパイルする必要があるなら、
チェックする間隔の秒の、checkInterval は、時間です。

●development
  <!--   development         Is Jasper used in development mode? If true,   -->
  <!--                       the frequency at which JSPs are checked for    -->
  <!--                       modification may be specified via the          -->
  <!--                       modificationTestInterval parameter. [true]     -->
  <!--                                                                      -->
デベロップメントモードで Jsper を使用されますか?
もし true ならば、modificationTestInterval パラメータ での指定経由で更
新させて頂くために、JSPは頻繁にチェックされます。

●fork
  <!--   fork                Tell Ant to fork compiles of JSP pages so that -->
  <!--                       a separate JVM is used for JSP page compiles   -->
  <!--                       from the one Tomcat is running in. [true]      -->
実行中の Tomcat より、JSP ページのコンパイルに JVM が使用されます、
その JVM をセパレート出来るように、JSPページのフォークコンパイルをする 
Ant へ伝えます。

●xpoweredBy
  <!--   xpoweredBy          Determines whether X-Powered-By response       -->
  <!--                       header is added by generated servlet  [false]  -->
  <!--                                                                      -->
ジェネレイトされたサーブレットにより、X-Powered-By レスポンスヘッダが
追加される、かどうかを決定します。

----------------------------------------------------------------------
何か、参考になりそうな項目があるかな。

評価

0

見た感じ、特に設定で問題がある所はなさそうですね。
環境は、違いますが、こちらではWindowsで同じような設定で動作する事を確認出来ました。

評価

0

JSVCを使用した時のみ、JSPがコンパイル出来ないような、症状が、報告されているみたいです。
解決方法も、どこかにあるのかな?

評価

0

まさかとは思いますが、
「JAVA_HOMEにJDKではなくJREを設定していたりすると、
Tomcatの実行時にJSPをコンパイル出来ません。」
とか言う話だったりしませんよね。

評価

0

コメントありがとうございます。
やんちさんから頂いたjsvc絡みの情報、私も先ほど到達しました。今回の件とは、違う様です。
jsvcで起動しなくとも現象は同じでした。

自分でももう少し調べてみます。

評価

0

まず、サンプル(Tomcat6付属)を試してみてはいかがでしょうか?

すでに試されているのであれば無視してください。

評価

0

古い記事ですが失礼します。
Tomcat 6.0.18
の問題のようです。

当方環境でも
Tomcat 6.0.18
で同様の現象が起こり、
バージョンをあげることで(現在最新版tomcat-6.0.26)
解決いたしました。

尚、Tomcat 6.0.18の問題のよう、と申し上げましたの
は、
eclipseにてtomcat6.0インストールディレクトリを
Tomcat 6.0.18→tomcat-6.0.26
に変更した「だけ」で、
表示されなかったjsp群の表示に成功した為です。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。