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

MyMemoWiki

「Google App Engine(Java)」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Google App Engine(Java)== *https://cloud.google.com/appengine/docs/standard/java/building-app/environment-setup?hl=JA *[https://qiita.com/yosukesuzuki/items/a347f6e89…」)
 
 
(同じ利用者による、間の2版が非表示)
1行目: 1行目:
 
==Google App Engine(Java)==
 
==Google App Engine(Java)==
*https://cloud.google.com/appengine/docs/standard/java/building-app/environment-setup?hl=JA
+
*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のダウンロードとインストール====
+
====[[Maven]]のダウンロードとインストール====
 
*http://maven.apache.org/
 
*http://maven.apache.org/
====Mavenプロジェクト作成====
+
====[[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 を使用
12行目: 12行目:
 
====デプロイ====
 
====デプロイ====
 
*pom.xml のディレクトリで  
 
*pom.xml のディレクトリで  
  > mvn appengine:deploy
+
  > mvn appengine:deploy
 
*デプロイ後、ブラウザで開く
 
*デプロイ後、ブラウザで開く
  > gcloud app browse
+
  > gcloud app browse
 
===静的コンテンツ===
 
===静的コンテンツ===
 
*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 ディレクトリ内に置きます。フォルダも使用できますが、すべてのファイルパスと URI は webapp ディレクトリからの相対パスになります
+
*webapp ディレクトリ内に置きます。フォルダも使用できますが、すべてのファイルパスと U[[R]]I は webapp ディレクトリからの相対パスになります
*静的ファイルの場所を選択したら、その場所を appengine-web.xml ファイル内の <static-files> 要素で定義する必要があります。
+
*静的ファイルの場所を選択したら、その場所を appengine-web.xml ファイル内の &lt;static-files&gt; 要素で定義する必要があります。
 
===フォームデータの処理===
 
===フォームデータの処理===
 
*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>
+
  &lt;a href='/jsp/form'&gt;Form&lt;/a&gt;&lt;/td&gt;
 
====入力ページJsp====
 
====入力ページJsp====
  <%@ page language="java" contentType="text/html; charset=UTF-8"
+
  &lt;%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
+
     pageEncoding="UTF-8"%&gt;
  <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+
  &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;
  <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>    
+
  &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%&gt;    
  <!DOCTYPE html>
+
  &lt;!DOCTYPE html&gt;
  <html>
+
  &lt;html&gt;
  <head>
+
  &lt;head&gt;
  <meta charset="UTF-8">
+
  &lt;meta charset="UTF-8"&gt;
  <title>HTTP Form</title>
+
  &lt;title&gt;[[HTTP]] Form&lt;/title&gt;
  </head>
+
  &lt;/head&gt;
  <body>
+
  &lt;body&gt;
   <form method="POST" action="/form/save">
+
   &lt;form method="POST" action="/form/save"&gt;
     <label for="save_content">内容:</label>
+
     &lt;label for="save_content"&gt;内容:&lt;/label&gt;
     <textarea name="save_content" rows="3" cols="50">保存内容</textarea>  
+
     &lt;textarea name="save_content" rows="3" cols="50"&gt;保存内容&lt;/textarea&gt;  
     <button type="submit">保存</button>
+
     &lt;button type="submit"&gt;保存&lt;/button&gt;
   </form>
+
   &lt;/form&gt;
  </body>
+
  &lt;/body&gt;
  </html>
+
  &lt;/html&gt;
====JSP用ディスパッチャー====
+
====[[JSP]]用ディスパッチャー====
*JSPをWEB-INF配下においてリダイレクトする
+
*[[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 JSP_PATH_PATTERN = "/WEB-INF%s.jsp";
+
   private static final String [[JSP]]_PATH_PATTERN = "/WEB-INF%s.jsp";
 
    
 
    
 
   @Override
 
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+
   protected void doGet(HttpServlet[[R]]equest req, HttpServlet[[R]]esponse resp) throws ServletException, IOException {
     req.getRequestDispatcher(
+
     req.get[[R]]equestDispatcher(
         String.format(JSP_PATH_PATTERN, req.getRequestURI())).forward(req, resp);
+
         String.format([[JSP]]_PATH_PATTERN, req.getRequestURI())).forward(req, resp);
 
   }
 
   }
 
  }
 
  }
68行目: 68行目:
 
   
 
   
 
   @Override
 
   @Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+
   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.getRequestDispatcher("/WEB-INF/jsp/result.jsp").forward(req, resp);
+
     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"
+
  &lt;%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
+
     pageEncoding="UTF-8"%&gt;
  <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+
  &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%&gt;
  <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>    
+
  &lt;%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%&gt;    
  <!DOCTYPE html>
+
  &lt;!DOCTYPE html&gt;
  <html>
+
  &lt;html&gt;
  <head>
+
  &lt;head&gt;
  <meta charset="UTF-8">
+
  &lt;meta charset="UTF-8"&gt;
  <title>Insert title here</title>
+
  &lt;title&gt;Insert title here&lt;/title&gt;
  </head>
+
  &lt;/head&gt;
  <body>
+
  &lt;body&gt;
   <p>${fn:escapeXml(content)}</p>
+
   &lt;p&gt;${fn:escapeXml(content)}&lt;/p&gt;
  </body>
+
  &lt;/body&gt;
  </html>
+
  &lt;/html&gt;
  
  
==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

2020年2月16日 (日) 04:26時点における最新版

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

Google App Engine Java Standard 環境で手っ取り早くSpring Boot アプリケーションを開発する

Cloud Data Store