- - PR -
struts起動時に/WEB-INF/struts-html.tld" が見つかりませんとなってしまう。
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-03-12 00:36
佐伯といいます。 下記の環境で Strutsによるスーバーサンプル150 という書籍のサンプルを動作させようとしているのですが 起動時に/WEB-INF/struts-html.tld" が見つかりませんとなってしまいます。 windows XP Apache Tomcat/6.0.14 struts1.2 何が悪いのでしょうか? GOOGLEなどでも、検索をかけて探しましたが 。。JSPの先頭で下記の指定で解決したなどありましたが 自分の場合解決しません。 <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> WEB-INFの配下には、下記のファイルがあります。 struts-bean.tld struts-config.xml struts-html.tld web.xml ディレクトリ構成 ├─META-INF ├─view └─WEB-INF ├─classes │ └─action │ └─form ├─lib └─src └─action └─form HTTPステータス 500 - -------------------------------------------------------------------------------- type 例外レポート メッセージ 説明 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException: JSP ファイル "/WEB-INF/struts-html.tld" が見つかりません org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:51) org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:409) org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:116) org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:160) org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:420) org.apache.jasper.compiler.Parser.parseDirective(Parser.java:476) org.apache.jasper.compiler.Parser.parseElements(Parser.java:1426) org.apache.jasper.compiler.Parser.parse(Parser.java:133) org.apache.jasper.compiler.ParserController.doParse(ParserController.java:216) org.apache.jasper.compiler.ParserController.parse(ParserController.java:103) org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:167) org.apache.jasper.compiler.Compiler.compile(Compiler.java:306) org.apache.jasper.compiler.Compiler.compile(Compiler.java:286) org.apache.jasper.compiler.Compiler.compile(Compiler.java:273) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 注意 原因のすべてのスタックトレースは、Apache Tomcat/6.0.14のログに記録されています -------------------------------------------------------------------------------- Apache Tomcat/6.0.14 [Hello.jsp]------------------------- <%@page contentType="text/html; charset=Shift_JIS" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <html:html locale="true" > <BODY> <!-- 1)HTMLのFORMタグに変換される --> <html:form action="/HelloWorld" > <!-- 2)メッセージリソースを表示する --> <bean:message key="greeting" /><BR> お名前をどうぞ。<BR><html:text property="name" /><BR> <html:submit> <bean:message key="greeting" /> </html:submit> </html:form> </BODY> </html:html> [web.xml]------------------------- <?xml version="1.0" encoding="UTF-8" ?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- doの拡張子がつくリクエストはStrutsのActionServletによって処理される --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- エンコーディングフィルタの設定 --> <filter> <filter-name>Encoding</filter-name> <filter-class>filter.EncodingFileter</filter-class> </filter> <filter-mapping> <filter-name>Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> ------------------------- [struts-config.xml] <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <!-- Form情報の定義 --> <form-beans> <!-- HelloWorldFormという名前(キー)でaction.form.HelloWorldFormクラスを利用する --> <form-bean name="HelloWorldForm" type="action.form.HelloWorldForm" /> </form-beans> <!-- アクションの定義 --> <action-mappings> <!-- Form情報をHelloWorldFormとして、action.HelloWorldActionクラスをアクションとして指定する --> <!-- Form情報はリクエストスコープに格納される --> <action name="HelloWorldForm" type="action.HelloWorldAction" path="/HelloWorld" scope="request" > <!-- アクションの遷移先として論理名をhello ファイルパスを/view/HelloWorld.jspとする --> <forward name="hello" path="/view/HelloWorld.jsp" /> </action> </action-mappings> <message-resources parameter="ApplicationResource" /> </struts-config> ------------------------- | ||||
|
投稿日時: 2008-03-12 01:46
struts-example.war は動きますか?
動く場合、struts 関連のファイル(xml,tldなど)の配置に何か違いはありますか? | ||||
|
投稿日時: 2008-03-12 07:17
web.xmlにtaglibの設定が見当たりませんね
Javaの道:JSP(13.カスタムタグ(概要))(jsp taglibでぐぐった最初にでてきました)を参考に | ||||
|
投稿日時: 2008-03-12 13:48
ちょっと違うかもしれませんが
http://www.mlexp.com/wiki/?eclipse で取り上げられている例が参考になったりしないでしょうか | ||||
|
投稿日時: 2008-03-12 22:58
> struts-example.war は動きますか?
>動く場合、struts 関連のファイル(xml,tldなど)の配置に何か違いはありますか インギさん 途中経過ですが struts-exampleは、動作しました。 あとは、動作するweb.xmlと動作しないweb.xmlを比較して行くしかないですよね? 難航中(なかなかうまくいきません。) >web.xmlにtaglibの設定が見当たりませんね kumaさん、あすかさん URLに確かにweb.xmlにtaglibの記載がありましたが サンプル本(書籍)のweb.xmlには、 すべてtaglibの記載がありませんでした。 なぜ必要ないのか?不明です。 | ||||
|
投稿日時: 2008-03-13 18:18
はじめまして
web.xml に taglib の記述をすると、記述した uri を JSP に書けばよくなります。あなたの書いている指定方法はこれではなく「WEB-INF というフォルダの下に struts-html.tld ファイルがありますよ」と直接 JSP に指定しています。 (web.xml に書いても JSP の方をそのままにしておけば何も状況は変わらないはずです) 的外れかもしれませんが、エラーメッセージを見る限り本当に /WEB-INF/struts-html.tld がなかったりしませんか? どういう開発環境で動かしているのか分かりませんが、war ファイルを作って Tomcat に配備することをしていたりするとたまに *.class と *.jsp しか war に含めなかったりした経験がありますので念のため。 | ||||
|
投稿日時: 2008-03-14 01:09
まずjspに記述されたtaglibのディレクティブはweb.xmlに設定がないか見に行くはずです。 該当するものがない場合、jspからの相対パス、又はコンテキストルートからのパスを確認します。(記憶違いでなければ・・) uriが"/"ではじまるものはコンテキストルートからのパスと解釈されるため、 書籍ではweb.xmlでの指定を省略しても動くように配置してあるものと考えます。 (書籍自体をしりませんが動かないサンプルの記載は売り物として値しません) 佐伯さんのtldの配置からはWEB-INF直下にtldが存在するということなので 考えられることとして、コンテキストルートを書籍どおりでなく独自に設定していませんか? # よくみたらお名前がありましたね。未記入さん->佐伯さんとさせていただきました。 [ メッセージ編集済み 編集者: kuma 編集日時 2008-03-14 01:11 ] | ||||
|
投稿日時: 2008-03-15 23:40
佐伯です。
struts-examplesを動作させながら動作を検証させていた所 サンプルが動くようになってきましたが まだ質問があります。 サンプル書籍では下記環境を使用しています。 TOMCAT5.5.20 JDK5 struts1.2.9 自分の環境では、下記環境を使用しています。 TOMCAT6 JDK6 struts1.2.9 サンプルを動作させるまでの調査: 1 JDK6&TOMCAT6使用の為、web.xmlを下記のように変更しました。 2 1実施後に、warファイルの解凍場所をサンプルに合わせて 何度かTRYするうちに動作するようになりました。 例)1.1.warの場合 Tomcat 6.0\webapps\1-1 質問内容: warファイルの解凍場所を 「Tomcat 6.0\webapps\1-1」から 「Tomcat 6.0\webapps\STRUTS_SAMPLE\1-1」へ 変更させた場合に、質問した内容と同じようなエラーが出ます。 (org.apache.jasper.JasperException: JSP ファイル "/WEB-INF/struts-html.tld" が見つかりません) warファイルの解凍先は、必ずwebappsフォルダの配下に設置して 使用しなければならないのでしょうか? JAVAのコンパイル、web.xml、オブジェクトの関係(JAVAの基本)が 分かっていないので、こういう内容の質問をしています。 (勉強しようと思います。) web.xmlの変更結果 -------------------------------- <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> から <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" version="2.5"> へ変更 |