| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

Google App Engine(Java)

提供: MyMemoWiki
2020年2月16日 (日) 04:26時点におけるPiroto (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

Google App Engine(Java)

==

Mavenのダウンロードとインストール

Mavenプロジェクト作成

mvn archetype:generate -Dappengine-version=1.9.59 -Dapplication-id=[YOUR-PROJECT-ID] -Dfilter=com.google.appengine.archetypes:

デプロイ

  • pom.xml のディレクトリで
> mvn appengine:deploy
  • デプロイ後、ブラウザで開く
> gcloud app browse

静的コンテンツ

静的ファイルの配置場所

  • webapp ディレクトリ内に置きます。フォルダも使用できますが、すべてのファイルパスと URI は webapp ディレクトリからの相対パスになります
  • 静的ファイルの場所を選択したら、その場所を appengine-web.xml ファイル内の <static-files> 要素で定義する必要があります。

フォームデータの処理

入力ページへのリンク

<a href='/jsp/form'>Form</a></td>

入力ページJsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>HTTP Form</title>
</head>
<body>
  <form method="POST" action="/form/save">
    <label for="save_content">内容:</label>
    <textarea name="save_content" rows="3" cols="50">保存内容</textarea>  
    <button type="submit">保存</button>
  </form>
</body>
</html>

JSP用ディスパッチャー

  • JSPをWEB-INF配下においてリダイレクトする
@WebServlet(
    name = "JspDispatcher",
    urlPatterns = {"/jsp/*"}
)
public class JspDispatcher extends HttpServlet{
  private static final String JSP_PATH_PATTERN = "/WEB-INF%s.jsp";
  
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.getRequestDispatcher(
        String.format(JSP_PATH_PATTERN, req.getRequestURI())).forward(req, resp);
  }
}

主処理

@WebServlet(
    name = "FormController",
    urlPatterns = {"/form/*"}
)
public class FormController extends HttpServlet {
  private static final long serialVersionUID = 1L;

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setAttribute("content", req.getParameter("save_content"));
    req.getRequestDispatcher("/WEB-INF/jsp/result.jsp").forward(req, resp);
  }
}

結果表示

  • JSP の escapeXml 機能を使用して、クロスサイト スクリプティング(XSS)攻撃に対する対抗措置をとる
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
  <p>${fn:escapeXml(content)}</p>
</body>
</html>


Spring Boot