- PR -

Velocityがうまく働かない

投稿者投稿内容
Lyijykyyneleet
会議室デビュー日: 2005/11/25
投稿数: 11
お住まい・勤務地: 北海道
投稿日時: 2006-01-21 02:51
お世話になっています。
現在、Velocityを勉強しているのですが、上手くいかないところがあります。
WEB-INF/src/veloToolboxの下に作成したPipeWrench.javaのgetSize()メソッドが返すStringをVelocityを使って表示するというものなのですが、vmファイルをブラウザで見ても表示されません。
Tomcatのバージョンは4.0.28、Velocityは1.4、Velocity-Toolsは1.2、Eclipse3.1で開発しています。
ソースは以下の通りとなっております。なお、ログファイルやコンソール画面などを調べてみましたが、特にエラーメッセージの類はありませんでした。

[[PipeWrench.java]]
package veloToolbox;

public class PipeWrench {
public String getSize(){
return "パイプレンチ";
}
}

[[PipeWrench.vm]]
<html>
<head>
<title>パイプレンチテスト</title>
</head>
<body>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
$wrench.getSize()
</body>
</html>

[[toolbox.xml]]
<?xml version="1.0" encoding="utf-8"?>
<toolbox>
<tool>
<key>wrench</key>
<class>veloToolbox.PipeWrench</class>
</tool>
</toolbox>

[[web.xml]]
<web-app>
<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>

<init-param>
<param-name>org.apache.velocity.toolbox</param-name>
<param-value>/WEB-INF/toolbox.xml</param-value>
</init-param>

<init-param>
<param-name>org.apache.velocity.properties</param-name>
<param-value>/WEB-INF/velocity.properties</param-value>
</init-param>

<load-on-startup>10</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
</web-app>

どうぞよろしくお願いします。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-21 03:21
表示できない、とは "$wrench.getSize()" の部分だけでしょうか?
他の部分のhtmlは受信できる?
Lyijykyyneleet
会議室デビュー日: 2005/11/25
投稿数: 11
お住まい・勤務地: 北海道
投稿日時: 2006-01-21 12:29
引用:

インギさんの書き込み (2006-01-21 03:21) より:
表示できない、とは "$wrench.getSize()" の部分だけでしょうか?
他の部分のhtmlは受信できる?



説明が足りませんでした。
正確に言うと、vmファイルをブラウザで見ると"$wrench.getSize()"という文章が表示されます。ブラウザでソースコードを確認すると、htmlはきちんと受信しております。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-21 13:39
するとVelocityのサーブレットを介さずに配信されているということですね。
-verbose:class とかでサーブレットがちゃんとロードされているか確認してみてはいかがでしょう?

あと、「WEB-INF/src/veloToolboxの下に作成」とありますが、コンパイル済みのクラスは WEB-INF/classes 以下に配置されていますか?
Lyijykyyneleet
会議室デビュー日: 2005/11/25
投稿数: 11
お住まい・勤務地: 北海道
投稿日時: 2006-01-22 02:19
引用:

インギさんの書き込み (2006-01-21 13:39) より:
-verbose:class とかでサーブレットがちゃんとロードされているか確認してみてはいかがでしょう?



返答頂きありがとうございます。
とりあえず、Windowsのコマンドラインから「java -verbose:class | find "velocity"」とやって見た所、該当する行が有りませんでしたので、どうやらサーブレットがロードされていないようです。
お恥ずかしい限りですが、サーブレットをロードするためにはどうしたらよいのでしょうか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-22 02:28
まずVelocity以前にサーブレットの勉強をしましょう。
VelocityServletを使ったのサンプルアプリケーションをデプロイしてどこが違うか見比べるのも良いかもしれませんね。

[ メッセージ編集済み 編集者: インギ 編集日時 2006-01-22 02:28 ]
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-22 11:46
ん、「「java -verbose:class」だけで Tomcat でロードされているクラスが一覧表示されますか??
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-01-22 12:59
ちょっと用事があって今日初めて Velocity 触ってみました。
コンテクストに登録されていないオブジェクトを呼び出すような式を書いた場合はエラーとならずそのまま表示されるようですね。
ログファイルにエラーメッセージはない、とのことですが Velocity のログはご覧になりましたか?
Velocityのログはデフォルトでカレントディレクトリに velocity.log として吐き出されるようです。
wrench がコンテクストに設定されていなければ以下のような警告メッセージがでます。
Sat Jan 21 19:57:05 PST 2006 [warn] org.apache.velocity.runtime.exception.ReferenceException: reference : template = PipeWrench.vm [line 81,column 1] : $wrench.getSize() is not a valid reference.

スキルアップ/キャリアアップ(JOB@IT)