GAE/JではStrutsは使えないっぽい

嘘です。使えました。 2009/4/25
こちらのblogを参考にさせてもらってGAE/JでStruts環境を構築。
http://googleappengine.seesaa.net/article/117110106.html
blankアプリケーションはローカルでもサーバー上でも動作した。
で、次に簡単なStruts ActionとStruts Formを作って確認したところ、ローカルでは普通にうごきました。次にサーバー上での動作確認をするために、デプロイを実施すると

Creating staging directory
Scanning for jsp files.
Compiling jsp files.
Compiling java files.
Unable to upload:
java.lang.RuntimeException: Failed to compile java files.
	at com.google.appengine.tools.admin.Application.compileJavaFiles(Application.java:363)
	at com.google.appengine.tools.admin.Application.compileJsps(Application.java:326)
	at com.google.appengine.tools.admin.Application.createStagingDirectory(Application.java:235)
	at com.google.appengine.tools.admin.AppAdminImpl.update(AppAdminImpl.java:39)
	at com.google.appengine.eclipse.core.proxy.AppEngineBridgeImpl.deploy(AppEngineBridgeImpl.java:203)
	at com.google.appengine.eclipse.core.deploy.DeployProjectJob.runInWorkspace(DeployProjectJob.java:97)
	at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
java.lang.RuntimeException: Failed to compile java files.

こんな感じでアップロードできません。
うーん。。。
ひがやすをさんのblogで、

素のStrutsだとGAEではファイルアップロードに失敗しますが、Slim3 Strutsはその辺も対応してます。

と書かれています。そうなんや〜。で、どうしたらいいの??Slim3でやれってことね、おそらく。


それにしてもローカルで動くのにサーバー上だと動かないってのは正直、開発していても疲れるね。だって、ちょっと動かしてはデプロイして確認ってのを繰り返さないといけないわけだから。サクサク開発できまへんがな。


ちなみに作ったStruts FormとStruts Actionはこの程度のもんですよ。
英語の翻訳をするアプリを作る予定なので、その最初の雛形。「hello」と入力されて、日本語訳を返しているイメージです。
■Action

public class TranslateAction extends Action {
	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		TranslateForm myForm = (TranslateForm)form;

		List<String> meaningList = new ArrayList<String>();
		meaningList.add("やあ");
		meaningList.add("こんにちは");
		
		myForm.setMeaningList(meaningList);
		
		return mapping.findForward("success");
	}
}

■Form

public class TranslateForm extends ActionForm {

	private static final long serialVersionUID = -8559129368633003617L;

	private String word;
	private List<String> meaningList;

	public String getWord() {
		return word;
	}

	public void setWord(String word) {
		this.word = word;
	}

	public List<String> getMeaningList() {
		return meaningList;
	}

	public void setMeaningList(List<String> meaningList) {
		this.meaningList = meaningList;
	}
}

追記 2009/4/25

Strutsが直接悪いのではなかった。ごめんなさい、Strutsさん。
ひがさんからコメントをいただいたようにUTF-8環境であることや日本語を使っているとアップロードできないみたい。
色々試したのですが、最終的には次のようにjspを書き換えることでうまくアップロードできました。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ page contentType="text/html;charset=Shift_JIS" language="java" %>


これでも出来たけど、ひがさんのblogを参考にすればUTF-8でもいけました♪
http://d.hatena.ne.jp/higayasuo/20090413/1239621267


ただ、アップロードに成功した後で再度アップロードしてみたところ、

Unable to upload:
java.io.IOException: Error posting to URL: http://appengine.google.com/api/appversion/deploy?app_id=xxxxxx&version=xxxxx&
500 Internal Server Error

Server Error (500)
A server error has occurred.

というメッセージと共にスタックトレースが出力されてうまくいかなくなった。
単なるHello, worldが表示されるデフォルトのアプリケーションすらデプロイできなくなっていたので全体的にダメになっているんだろう。また明日やってみよう。


改めてやってみたらいけました♪