memo:GAEでvelocityでhelloworld的なものをelcipseで

javaは未だに意味が分からないけどなんとか使用としてみるメモです。
GAEでJSPというやつははしんどそうなのでvelocityを動かしてみる。
velocityを勧めてくれたjava屋の人、ありがとう。
インターネットをクロールしてコピペで集めたHelloWorld的なものです。
明らかに不適切な所があるので参考にはならないとおもう。
とりあえず動いた。僕はeclipseでGAEプロジェクトを立てています。

ゆとりなのでEclipse使います。

もちろん。で、velocityをEclipseに組み込んでつかう。

velocityをEclipseに組み込み

velocityはhttp://velocity.apache.org/download.cgiで落とした。
1.ライブラリに読み込み
圧縮ファイルを展開して適当な所に配置。
展開したファイルを適当な所に置いてプロジェクトのプロパティ=>javaビルド・パスの
ライブラリータブを開いて外部jarの追加をクリッケして展開したvelocityのjarファイルを適当に指定。
2./war/WEB-INF/lib以下にvelocityのjarをコピペ
よくわかんなかったので全部入れときますた。実行時はここにおいたモノが使われるのだと理解している。

class

src/あなたのパッケージ/にsampleVelocityServletとかでクラス作成

package test.modeverv;

import java.io.IOException;
//サーブレット
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//アプリケーション的に
import java.util.Date;
//velocity
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

public class sampleVelocityServlet extends HttpServlet{
	//servletなのでdoGetを書けばOKなんだと理解している
	public void doGet(HttpServletRequest req,HttpServletResponse resp) throws IOException{
		try {
			  //Velocityを立ち上げる
			  Velocity.init();
			} catch (Exception e1) {
			  e1.printStackTrace();
			}
			//コンテキストを生成
			VelocityContext context = new VelocityContext();
			//コンテキストにアサイン的な?
			context.put("orearg", (new Date()).toString());
			try {
			  //テンプレートを生成
			  Template template =
			    Velocity.getTemplate("velocity/test.vm");
			  //velocityとは関係ないservletレベルのあれこれ
			  resp.setContentType("text/html");
			  resp.setCharacterEncoding("utf-8");
        //テンプレートにコンテキストを読み込んでresp--に出力するイメージ
			  template.merge( context, resp.getWriter() );
			} catch (Exception e) {
			  e.printStackTrace();
			}
	}
}

テンプレート

僕はフォルダ/war/velocityを作成した。別に作らなくてもイイとは思うけれども
テンプレート/var/velocity/test.vmを作成

<html>
<body>
	<h1>this is test. VelocityServlet</h1>
	<h1 style="font-size:330px;">$orearg</h1>
</body>
</html>

出力をxmlに指定

xmlで指定って言うこの辺がさっぱりわかんないんですよね。。。
xmlを追記する/war/WEB-INF/web.xml
urlマッピングらしい。いろいろノウハウがありそうです。

    <servlet>
        <servlet-name>velocity</servlet-name>
        <servlet-class>test.modeverv.sampleVelocityServlet</servlet-class>
    </servlet>
    <servlet-mapping>
		<servlet-name>velocity</servlet-name>
		<url-pattern>/velocity/*</url-pattern>
	</servlet-mapping>

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

xmlを追記する/war/WEB-INF/appengine-web.xml
velocity以下にファイルがあるんじゃーという事らしい。

	<resource-files>
		<include path="/velocity/*" />
	</resource-files>

で感想とか

これですべてです。
http://localhost:8888/velocity/にアクセスしたら動くけど
http://localhost:8888/velocity/test.vmにアクセスしたら動きません。
やっぱりよくわかんないですね。
でもGAEは面白いです。

このあとは

GAEのドキュメントとvelocityのドキュメントを読めばイイですね。