「Google App Engine(Java)」の版間の差分
ナビゲーションに移動
検索に移動
| 1行目: | 1行目: | ||
==Google App Engine(Java)== | ==Google App Engine(Java)== | ||
| − | *https://cloud.google.com/appengine/docs/standard/java/building-app/ | + | *https://cloud.google.com/appengine/docs/standard/java/building-app/en[[vi]]ronment-setup?hl=JA |
*[https://qiita.com/yosukesuzuki/items/a347f6e89d7624d6f977 個人的に最強のPaaSプラットフォームGoogle App Engineの良い所を挙げてみる] | *[https://qiita.com/yosukesuzuki/items/a347f6e89d7624d6f977 個人的に最強のPaaSプラットフォームGoogle App Engineの良い所を挙げてみる] | ||
====== | ====== | ||
*https://cloud.google.com/appengine/docs/standard/java/tools/uploadinganapp?hl=JA | *https://cloud.google.com/appengine/docs/standard/java/tools/uploadinganapp?hl=JA | ||
| − | ==== | + | ====[[Maven]]のダウンロードとインストール==== |
*http://maven.apache.org/ | *http://maven.apache.org/ | ||
| − | ==== | + | ====[[Maven]]プロジェクト作成==== |
*https://cloud.google.com/appengine/docs/standard/java/tools/using-maven?hl=JA | *https://cloud.google.com/appengine/docs/standard/java/tools/using-maven?hl=JA | ||
*appengine-skeleton-archetype を使用 | *appengine-skeleton-archetype を使用 | ||
| 18行目: | 18行目: | ||
*https://cloud.google.com/appengine/docs/standard/java/building-app/static-content?hl=JA | *https://cloud.google.com/appengine/docs/standard/java/building-app/static-content?hl=JA | ||
====静的ファイルの配置場所==== | ====静的ファイルの配置場所==== | ||
| − | *webapp ディレクトリ内に置きます。フォルダも使用できますが、すべてのファイルパスと | + | *webapp ディレクトリ内に置きます。フォルダも使用できますが、すべてのファイルパスと U[[R]]I は webapp ディレクトリからの相対パスになります |
*静的ファイルの場所を選択したら、その場所を appengine-web.xml ファイル内の <static-files> 要素で定義する必要があります。 | *静的ファイルの場所を選択したら、その場所を appengine-web.xml ファイル内の <static-files> 要素で定義する必要があります。 | ||
===フォームデータの処理=== | ===フォームデータの処理=== | ||
*https://cloud.google.com/appengine/docs/standard/java/building-app/handling-form-data?hl=JA | *https://cloud.google.com/appengine/docs/standard/java/building-app/handling-form-data?hl=JA | ||
| − | ==== | + | ====入力ページへの[[リンク]]==== |
<a href='/jsp/form'>Form</a></td> | <a href='/jsp/form'>Form</a></td> | ||
====入力ページJsp==== | ====入力ページJsp==== | ||
| 34行目: | 34行目: | ||
<head> | <head> | ||
<meta charset="UTF-8"> | <meta charset="UTF-8"> | ||
| − | <title>HTTP Form</title> | + | <title>[[HTTP]] Form</title> |
</head> | </head> | ||
<body> | <body> | ||
| 44行目: | 44行目: | ||
</body> | </body> | ||
</html> | </html> | ||
| − | ==== | + | ====[[JSP]]用ディスパッチャー==== |
| − | * | + | *[[JSP]]をWEB-INF配下においてリダイレクトする |
@WebServlet( | @WebServlet( | ||
name = "JspDispatcher", | name = "JspDispatcher", | ||
| 51行目: | 51行目: | ||
) | ) | ||
public class JspDispatcher extends HttpServlet{ | public class JspDispatcher extends HttpServlet{ | ||
| − | private static final String | + | private static final String [[JSP]]_PATH_PATTERN = "/WEB-INF%s.jsp"; |
@Override | @Override | ||
| − | protected void doGet( | + | protected void doGet(HttpServlet[[R]]equest req, HttpServlet[[R]]esponse resp) throws ServletException, IOException { |
| − | req. | + | req.get[[R]]equestDispatcher( |
| − | String.format( | + | String.format([[JSP]]_PATH_PATTERN, req.getRequestURI())).forward(req, resp); |
} | } | ||
} | } | ||
| 68行目: | 68行目: | ||
@Override | @Override | ||
| − | protected void doPost( | + | protected void doPost(HttpServlet[[R]]equest req, HttpServlet[[R]]esponse resp) throws ServletException, IOException { |
req.setAttribute("content", req.getParameter("save_content")); | req.setAttribute("content", req.getParameter("save_content")); | ||
| − | req. | + | req.get[[R]]equestDispatcher("/WEB-INF/jsp/result.jsp").forward(req, resp); |
} | } | ||
} | } | ||
====結果表示==== | ====結果表示==== | ||
| − | *JSP の escapeXml 機能を使用して、クロスサイト スクリプティング(XSS)攻撃に対する対抗措置をとる | + | *[[JSP]] の escapeXml 機能を使用して、クロスサイト スクリプティング(XSS)攻撃に対する対抗措置をとる |
<%@ page language="java" contentType="text/html; charset=UTF-8" | <%@ page language="java" contentType="text/html; charset=UTF-8" | ||
pageEncoding="UTF-8"%> | pageEncoding="UTF-8"%> | ||
| 91行目: | 91行目: | ||
| − | ==Spring Boot== | + | ==[[Spring Boot]]== |
*https://tosi-tech.net/2018/08/spring-boot-on-google-app-engine-standard/ | *https://tosi-tech.net/2018/08/spring-boot-on-google-app-engine-standard/ | ||
*https://qiita.com/tora470/items/1695a8614551b7500c2a | *https://qiita.com/tora470/items/1695a8614551b7500c2a | ||
| − | + | [http://typea.info/blg/glob/2019/04/google-app-engine-java-standard-spring-boot.html Google App Engine Java Standard 環境で手っ取り早くSpring Boot アプリケーションを開発する] | |
===Cloud Data Store=== | ===Cloud Data Store=== | ||
*https://cloud.google.com/appengine/docs/standard/java/building-app/cloud-datastore?hl=JA | *https://cloud.google.com/appengine/docs/standard/java/building-app/cloud-datastore?hl=JA | ||
2020年2月16日 (日) 04:26時点における最新版
目次
Google App Engine(Java)
- https://cloud.google.com/appengine/docs/standard/java/building-app/environment-setup?hl=JA
- 個人的に最強のPaaSプラットフォームGoogle App Engineの良い所を挙げてみる
==
Mavenのダウンロードとインストール
Mavenプロジェクト作成
- https://cloud.google.com/appengine/docs/standard/java/tools/using-maven?hl=JA
- appengine-skeleton-archetype を使用
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
- https://tosi-tech.net/2018/08/spring-boot-on-google-app-engine-standard/
- https://qiita.com/tora470/items/1695a8614551b7500c2a
Google App Engine Java Standard 環境で手っ取り早くSpring Boot アプリケーションを開発する
Cloud Data Store
© 2006 矢木浩人