アプリ版:「スタンプのみでお礼する」機能のリリースについて

jspソースのエラーが修正できなくて困っています。

現在、tomcat5.5とjdbc、muSQLなどを用いてシステムを作っています。
形態素解析などと組み合わせたいので、
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
を使いたいのですが、実行すると以下のエラーが発生します。

org.apache.jasper.JasperException: 絶対URI: http://java.sun.com/jsp/jstl/core はweb.xmlとこのアプリケーションを配備したJARファイルのどちらかでも解決できません
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)

jsp1.1やjstlのjarファイルはWEB-INT/libフォルダに入れています。
web.xmlもバージョン2.4なので問題がないように思います。

いろいろ修正したのですがエラーが消えず、困り果てています。

よろしくお願いします。

A 回答 (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ファイル
    • good
    • 0
この回答へのお礼

ありがとうございます。

やはり、jarファイルの場所が違うんですね。

MyAQL×Tomcatでのwebアプリケーションを問題なく完成することができたので、
次のステップとしてjstlをしてみよう、と思ったのですが、
もう少し早かったみたいですね(苦笑)

ただ、これがC言語を初めてコンパイルを知らない、ということと一緒、と言われると
そんな基礎も知らなかったんだな、とショックとともに認めなくてはいけませんね。

一応、Testフォルダ内に初めはjarファイルを置いておいてエラーが出てしまって、ネットでいろいろエラーを調べていたらtomcatフォルダ内に、という人がいたので試したのですが、結果的に解決することができませんでした。

言語としては、あらかたは理解しているつもりではいるのですが、もう一度勉強しなおそうと思います。
いろいろとありがとうございました。

お礼日時:2011/02/12 21:38

> 少し気になったのですが、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アプリケーションになる。
    • good
    • 0
この回答へのお礼

いつもありがとうございます。とっても助かります。

別の場所、ですが、
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ファイルはとおっている、ということですよね?
(このエラーも解決できていませんが。。。)

よろしくお願いします。

お礼日時:2011/02/12 13:37

>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を停止してログファイルをばっさりと全部削除し、もう一度起動してみると(新しく作られた)ログの中に素敵なサムシングを確かめたり見つけたり微笑んだりできるかも知れません。

 実験を丸投げで申し訳ないがこれらを試してみていただきたい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
勉強になります。

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の連結はこのフォルダで正常に反応しています。
ココに間違いがある、ということはありますか?

いろいろ質問をしてしまってすみません。

よろしくお願いします。

お礼日時:2011/02/12 00:23

 私は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の正確なファイル名や入手先を教えていただきたい。
    • good
    • 0
この回答へのお礼

さっそく、解答ありがとうございます。

URIのコードはシステムに書かれたものと一緒で
http://java.sun.com/jsp/jstl/core
でした。

問題としてはURIに書くことが誤っている、ということなんですね…!

正確なファイル名と入手先ですが
【jstl1.1】
http://www.meisei-u.ac.jp/mirror/apache/dist/jak …
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>

よろしくお願いします。

お礼日時:2011/02/10 01:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!