2012年8月24日金曜日

[AppEngine] AppEngine で Servlet+JSP を使う。

App Engine のプロジェクトで Servlet + JSP のパターンで動くか試してみる。 前回、プロジェクトを作成したときにはこんなフォルダ構成だった。

[Project-Folder]
  ...
  src/  META-INF/  jdoconfig.xml
                   persistence.xml

       [package]  XXXServlet.java

  war  favicon.ico
       idnex.html
       WEB-INF/   appengine-web.xml
                  logging.properties
                  web.xml
                  classes/   ...
                  lib/       ...

war の下に、jsp フォルダを作って、HelloApp.jsp を配置する。

[Project-Folder]
  ...
  ...
  war  favicon.ico
       idnex.html
       WEB-INF/   appengine-web.xml
                  ...
       jsp/
          HelloApp.jsp

こんな感じ。ServletとJSPはそれぞれ以下の通り。

HelloAppServlet:

public class HelloAppServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException, ServletException  {
        req.setAttribute("message", "Hello, world");
        RequestDispatcher rd = getServletContext().getRequestDispatcher(
                "/jsp/HelloApp.jsp");
        rd.forward(req,  resp);
    }
}

HelloApp.jsp: <%@ page import="java.util.*" contentType="text/html; charset=utf-8" %> <jsp:useBean id="message" class="java.lang.String" scope="request"/> <HTML><BODY> message: <%= message %> </BODY> </HTML>

とりあえずローカルではうまく動いたのでデプロイしてみる。

Preparing to deploy:
 Created staging directory at: ...
 Scanning for jsp files.
 Compiling jsp files.
 Scanning files on local disk.
 ....

前回にはなかった「Compiling jsp files.」というメッセージが増えている。
App Engine サーバー上で実行した結果、期待通りに JSP にディスパッチして動作している。



JSP ファイルを war 以下ではなく src 側に配置してどうなるか確認してみた。

[Project-Folder]
  ...
  src/  META-INF/  jdoconfig.xml
                   persistence.xml
       jsp/
          HelloApp.jsp

       [package]  XXXServlet.java

  war  favicon.ico
       ...

こちらに配置してもビルドの時に war 以下にコピーされないかと期待したのだが、実行してみると

Problem accessing /jsp/HelloApp.jsp. Reason:
    /jsp/HelloApp.jsp

あえなく失敗した。
やはり war 以下においておかないとだめみたいだ。


0 件のコメント:

コメントを投稿