• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jspのエラーが修正できません。)

jspのエラーが修正できない!困っています

このQ&Aのポイント
  • 現在、tomcat5.5とjdbc、muSQLなどを用いてシステムを作っています。形態素解析などと組み合わせたいので、<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>を使いたいのですが、エラーが発生してしまいます。
  • jsp1.1やjstlのjarファイルはWEB-INT/libフォルダに入れています。web.xmlもバージョン2.4なので問題がないはずなのですが、何度修正してもエラーが解消されません。
  • エラーが消えず困っています。どなたか解決策をご教示いただけないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.4

> tomcatのlocalhostフォルダ内に > 【test.xml】 > <?xml version='1.0' encoding='Windows-31J'?> > <Context docBase="C:/Test" path="/Test"/> これは、「Test Webアプリ」と表現できるもので、アクセスするには http://<hostname>:8080/Test/test.jsp と、URIの中にTestというのが含まれるはずだ。で、この場合、jarを置く場所は c | +-Test ← あなたがtest.xmlで定義した Test Webアプリの基点 | | | +-test.jsp ←実行したいファイル | | | +-WEB-INF ←ここにWEB-INFが必要 |    | |    +-web.xml ←ここにweb.xmlが必要(とりあえずROOTのweb.xmlをコピーすればいい) |    | |    +-lib ← ここにlibが必要 |      | |      +-jstl.jar ← jstl.jarはここ(c:\Test\WEB-INF\lib)におかないといけない |      | |      +-standard.jar ← standard.jarはここ(c:\Test\WEB-INF\lib)におかないといけない | +-ProgramFiles   |   +-tomcat5.5/webapps/ROOT ← これはtomcatがデフォルトで定義したROOT Webアプリ     |     +-WEB-INF       |       +-web.xml       |       +-lib       | |       | +-jstl.jar ←不要       | |       | +-standard.jar ←不要       |       +-tld ←不要 > が、jarファイルを入れると、他のフォルダで実行はできない、ということなんでしょうか? > それとも、jarファイルをtestフォルダのどこかに入れると大丈夫なのでしょうか?  とりあえずこの辺はtomcat以前(J2EEの初歩の初歩)というか、「え? こんな事も知らずにWebアプリやろうとしてんの?」と思われること間違いなしな話なので、もう少しその辺を勉強してから試す方がいいね。正直、C言語で例えれば「プログラムを書いたのですがコンパイルのやり方がわかりません。」というレベルのお話だ。「や、コンパイルできるようになってから書き始めようよ。」って思うでしょ? それとほぼ同レベル。  JSTLはもう少しステップアップしてからの方がいいんじゃないかな。最低限この辺の用語を理解してからの方が良いのでは。 ・Webアプリ(J2EEのコンテキストパス的な意味の) ・サーブレット ・JSP ・WEB-INF ・WEB-INF/web.xml ・WEB-INF/classes ・WEB-INF/lib ・tld、タグ ライブラリー デスクリプション ・warファイル

admin75
質問者

お礼

ありがとうございます。 やはり、jarファイルの場所が違うんですね。 MyAQL×Tomcatでのwebアプリケーションを問題なく完成することができたので、 次のステップとしてjstlをしてみよう、と思ったのですが、 もう少し早かったみたいですね(苦笑) ただ、これがC言語を初めてコンパイルを知らない、ということと一緒、と言われると そんな基礎も知らなかったんだな、とショックとともに認めなくてはいけませんね。 一応、Testフォルダ内に初めはjarファイルを置いておいてエラーが出てしまって、ネットでいろいろエラーを調べていたらtomcatフォルダ内に、という人がいたので試したのですが、結果的に解決することができませんでした。 言語としては、あらかたは理解しているつもりではいるのですが、もう一度勉強しなおそうと思います。 いろいろとありがとうございました。

その他の回答 (3)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

> 少し気になったのですが、jstl.jarなどのjarファイルすべてを > tomcat5.5/weppaps/ROOT/WEB-INF/lib/フォルダに入れているのですが、 > これは場所はあっているのでしょうか? > 同時に、実行したいフォルダはtomcatとは別のところにあります。 その「別のところ」がどこなのかを言って欲しかった。でないと判断できん。 tomcat5.5/weppaps/ROOT/WEB-INF/lib/にjarがあるのであれば、質問文のJSPはtomcat5.5/webapps/ROOT(あるいはその配下のディレクトリー)の中に無いといけない。こんな感じ tomcat5.5/webapps/ROOT | +-test.jsp ← 質問文のJSP | +-WEB-INF   |   +-web.xml   |   +-lib   | |   | +-jstl.jar   | |   | +-standard.jar   |   +-tld ← tomcat5.5では本来ここにtldファイルを置く必要は無い。 で、ROOTアプリの中にあるのでブラウザーからは http://<hostname>:8080/test.jsp にアクセスする事になる。webapps/ROOTというのは、tomcat5.5の一般的な設定(tomcat5.5/conf.のserver.xmlとかcontext.xmlとかに書かれている内容)ではコンテキスト名を持たないWebアプリケーションになる。

admin75
質問者

お礼

いつもありがとうございます。とっても助かります。 別の場所、ですが、 c | +-test | | | +-test.jsp ←実行したいファイル | +-ProgramFiles |   +-tomcat5.5/webapps/ROOT   |   +-WEB-INF     |     +-web.xml     |     +-lib     | |     | +-jstl.jar     | |     | +-standard.jar     |     +-tld ← tomcat5.5では本来ここにtldファイルを置く必要は無い。 にあります。 tomcatのlocalhostフォルダ内に 【test.xml】 <?xml version='1.0' encoding='Windows-31J'?> <Context docBase="C:/Test" path="/Test"/> で定義しているので、他のメインのプログラム(DBをjspに呼び出す)は実行できています。 が、jarファイルを入れると、他のフォルダで実行はできない、ということなんでしょうか? それとも、jarファイルをtestフォルダのどこかに入れると大丈夫なのでしょうか? できれば、testフォルダ内でtest.jspを実行したいと思っています。 ちなみに、ROOTフォルダ内にtest.jspを入れて実行した場合、エラー分に変化がありました。 org.apache.jasper.JasperException: TldLocationsCacheを初期化中の例外です: ファイル/WEB-INF/tld/x.tldのXML解析エラー org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) でした。 これだと、jarファイルはとおっている、ということですよね? (このエラーも解決できていませんが。。。) よろしくお願いします。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

>URIのコードはシステムに書かれたものと一緒で > http://java.sun.com/jsp/jstl/core > でした。  う~ん本当だねぇ。さて、それではどうしたものかな。 1.こう書き換えてみる <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>  これでうまくいくのであれば、web.xmlがおかしい可能性が高い。jarは全て正しく読み込まれているけど、META-INFの中のxsd形式のtldたちに反応していないという事(DTD形式のtldは正しくロードされている)。jarの中を見れば分かるように、これはjstl1.0のuriだ(c-1_0.tldの中に書かれているtldで、xsdではなくDTDなので古いモノ)。 2.上記の1とは別にweb.xmlに以下の記述を加えてみて、standard.jarを解凍してMETA-INFの中にあるc.tldを/WEB-INF/tlds/の中に入れてみる。 <taglib> <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri> <taglib-location>/WEB-INF/tlds/c.tld</taglib-location> </taglib> これでうまくいく、あるいは別のエラーになるなど、要するに挙動が変わるのであれば、(理由は分からんが)/WEB-INF/libのjstl.jarとstandard.jarが反応していないという事になる。対処法? うん、わかんない。catalina.outとか見てみたら何か書いてるかも。 3.Tomcatを再起動してみる(笑)  いや、困った時の再起動、とか。まぁこれで直ったら誰も苦労しないよね。ところで、tomcatを停止してログファイルをばっさりと全部削除し、もう一度起動してみると(新しく作られた)ログの中に素敵なサムシングを確かめたり見つけたり微笑んだりできるかも知れません。  実験を丸投げで申し訳ないがこれらを試してみていただきたい。

admin75
質問者

お礼

回答ありがとうございます。 勉強になります。 1~3について、試してみましたが、どれも解決にいたりませんでした。 まず、1についてですが、試しに <%@ taglib prefix="c" uri="http://java.sun.com/jsp/core" %> もしてみたのですが、どちらもだめでした。 2についてですが、まず、c.tldに上書きができませんでした(汗) なので、まったく同じ文章を作って、いったん削除したのちに新しくc.tldを作ったのですが、現状は変わりませんでした。 エラーメッセージも同じままです。 また、以前からtldフォルダの中にc.tldを入れていたのですが、tldsフォルダに変えても変化なしです。 3についてですが、これは実は何度もやっているのです(苦笑) Tomcatを入れてすぐにも全く反応がなく、PCの再起動をしたら通常起動した、ということがあったので、tomcatとpcの再起動は設定を変える毎といえるくらい頻繁にしているのですが、変わりなしです。 少し気になったのですが、jstl.jarなどのjarファイルすべてを tomcat5.5/weppaps/ROOT/WEB-INF/lib/フォルダに入れているのですが、これは場所はあっているのでしょうか? 同時に、実行したいフォルダはtomcatとは別のところにあります。 ※jstl.jarなどと連結させないtomcatとsqlの連結はこのフォルダで正常に反応しています。 ココに間違いがある、ということはありますか? いろいろ質問をしてしまってすみません。 よろしくお願いします。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 私はjstlは使った事がないのでそのtld(タグライブラリーデスクリプション)がどうなっているか分からないんだけど、実物のjarがあるのだからそれを解凍してtldファイルの中身を見てみれば良いのではないでしょうか。  jstlのjar(とかそれ以外のjar)を解凍すると、拡張子がtldのファイルがある(はず)。これはXMLファイルなので、テキストファイルで開く。するとtaglibタグの中にuriタグがあるので、その中身を<%@ taglib prefix="c" uri="ここ" %>にコピペする。これで動く・・・・と思う。解凍はjarコマンドでも良いし、WindowsではWinRAR、lhaplusなどのソフトを使えば解凍できるし、最悪拡張子をjarからzipにかえてしまえばunzipやWindowsの書庫フォルダー機能でも解凍できる。  JSPの中に記述するtaglibディレクティブのuri属性は、このtldファイルのuriか、web.xmlに記述したタグリブ情報のuriパラメーターのいずれかを指定する事になる。  もしこれでもできなかったら、uriに何を書けば良いのか調べてみるのでjarの正確なファイル名や入手先を教えていただきたい。

admin75
質問者

お礼

さっそく、解答ありがとうございます。 URIのコードはシステムに書かれたものと一緒で http://java.sun.com/jsp/jstl/core でした。 問題としてはURIに書くことが誤っている、ということなんですね…! 正確なファイル名と入手先ですが 【jstl1.1】 http://www.meisei-u.ac.jp/mirror/apache/dist/jakarta/taglibs/standard/ jakarta-taglibs-standard-current.zip を解凍 ・standard.jar ・jstl.jar 【jsp1.1】 ごめんなさい。 こちらは、どこのサイトからダウンロードしたかわからなくなってしまいました。 ダウンロードフォルダはjsf-logon_aplです。 ・commons-beanutils.jar ・commons-digester.jar ・commons-logging.jar ・jsf-api.jar ・jsf-impl.jar ちなみに、実行したいサンプルコードは配布されているサンプルプログラムです。 以下を実行したいと思っています。 <%@ page language="java" contentType="text/html; charset=windows-31j" pageEncoding="windows-31j"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> </head> <body> <c: set var1="data" value="テストdesu" /> <c:out value="${data}" /> </body> </html> よろしくお願いします。

関連するQ&A