本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立堆疊和執行應用程式
重要
AWS OpsWorks Stacks 此服務已於 2024 年 5 月 26 日終止,並已針對新客戶和現有客戶停用。我們強烈建議客戶盡快將其工作負載遷移至其他解決方案。如果您對遷移有任何疑問,請透過 AWS re:Post
本節說明如何使用 Tomcat 技術指南實作基本堆疊設定,以執行名為 Simple 的簡易 Java 伺服器頁面 (JSP) 應用程式JSP。堆疊包含名為 的 Tomcat 型自訂 layer TomCustom 和 MySQL layer。SimpleJSP 已部署到 TomCustom SQL,並顯示 My 資料庫的一些資訊。如果您尚未熟悉如何使用 AWS OpsWorks Stacks 的基本概念,您應該先閱讀 Chef 11 Linux 堆疊入門。
簡單JSP應用程式
SimpleJSP 應用程式示範如何設定資料庫連線,以及從堆疊的 MySQL 資料庫擷取資料的基本概念。
<html> <head> <title>DB Access</title> </head> <body> <%@ page language="java" import="java.sql.*,javax.naming.*,javax.sql.*" %> <% StringBuffer output = new StringBuffer(); DataSource ds = null; Connection con = null; Statement stmt = null; ResultSet rs = null; try { Context initCtx = new InitialContext(); ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/mydb"); con = ds.getConnection(); output.append("Databases found:<br>"); stmt = con.createStatement(); rs = stmt.executeQuery("show databases"); while (rs.next()) { output.append(rs.getString(1)); output.append("<br>"); } } catch (Exception e) { output.append("Exception: "); output.append(e.getMessage()); output.append("<br>"); } finally { try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (con != null) { con.close(); } } catch (Exception e) { output.append("Exception (during close of connection): "); output.append(e.getMessage()); output.append("<br>"); } } %> <%= output.toString() %> </body> </html>
SimpleJSP 使用 DataSource
物件與 MySQL 資料庫通訊。Tomcat 使用 Web 應用程式內容組態檔案中的資料建立和初始化 DataSource
物件,並將其繫結到邏輯名稱。然後,它會向 Java 命名和目錄界面 (JNDI) 命名服務註冊邏輯名稱。為取得適當 DataSource
物件的執行個體,您會建立 InitialContext
物件,並將資源的邏輯名稱傳遞給物件的 lookup
方法,擷取適當的物件。簡單JSP範例的邏輯名稱 java:comp/env/jdbc/mydb
具有下列元件:
-
根命名空間 (
java
),以冒號 (:) 與名稱的剩餘部分分開。 -
任何額外的命名空間,都會以斜線 (/) 分開。
Tomcat 會自動將資源新增到
comp/env
命名空間。 -
資源名稱,定義於 web 應用程式內容組態檔案中,並以斜線與命名空間分隔。
此範例的資源名稱為
jdbc/mydb
。
若要建立與資料庫的連線,SimpleJSP 會執行下列動作:
-
呼叫
DataSource
物件的getConnection
方法,傳回Connection
物件。 -
呼叫
Connection
物件的createStatement
方法,建立Statement
物件,您會使用此物件與資料庫通訊。 -
透過呼叫適當的
Statement
方法與資料庫通訊。executeQuery
執行SHOWDATABASES查詢的簡單JSP呼叫,其中列出伺服器的資料庫。
executeQuery
方法會傳回 ResultSet
物件,其中包含查詢的結果。SimpleJSP 從傳回的ResultSet
物件取得資料庫名稱,並將其串連以建立輸出字串。最後,範例會關閉 ResultSet
、Statement
和 Connection
物件。如需 JSP和 的詳細資訊JDBC,請分別參閱JavaServer 頁面技術和
若要搭配堆疊使用 SimpleJSP,您必須將其放入儲存庫。您可以使用任何支援的儲存庫,但若要搭配下一節中討論的範例堆疊使用 SimpleJSP,您必須將其放入公有 S3 封存。如需如何使用其他標準儲存庫的資訊,請參閱技術指南儲存庫。
在 S3 封存儲存庫中放置簡單JSP
-
將範例程式碼複製到名為
simplejsp.jsp
的檔案,然後將檔案置放在名為simplejsp
的目錄中。 -
建立
simplejsp
目錄的.zip
存檔。 -
建立公有 Amazon S3 儲存貯體、
simplejsp.zip
上傳至儲存貯體,並將檔案設為公有。如需如何執行此任務的說明,請參閱 Amazon Simple Storage Service 入門。
建立堆疊
若要執行 SimpleJSP,您需要具有下列圖層的堆疊。
-
MySQL layer,支援後端 MySQL 伺服器。
-
使用 Tomcat 技術指南支援 Tomcat 伺服器執行個體的自訂 layer。
建立堆疊
-
在 Stacks AWS OpsWorks 儀表板上,按一下新增 Stack 以建立新的堆疊,然後按一下進階 >> 以顯示所有選項。設定堆疊如下。
-
Name – 使用者定義的堆疊名稱;此範例使用 TomStack。
-
使用自訂 Chef 技術指南 – 將切換設定為是,顯示一些其他選項。
-
儲存庫類型 – Git。
-
儲存庫 URL–
git://github.com/amazonwebservices/opsworks-example-cookbooks.git
。 -
自訂 Chef JSON– 新增下列 JSON:
{ "tomcat": { "base_version": 7, "java_opts": "-Djava.awt.headless=true -Xmx256m" }, "datasources": { "ROOT": "jdbc/mydb" } }
對於剩餘的選項,您可以接受預設值。
自訂 JSON會執行下列動作:
-
覆寫 Tomcat 技術指南的
['base_version']
屬性,將 Tomcat 的版本設為 7。預設值為 6。 -
覆寫 Tomcat 技術指南的
['java_opts']
屬性,以指定執行個體無周邊,並將堆積大小JVM上限設定為 256MB;預設值不會為執行 Amazon Linux 的執行個體設定任何選項。 -
指定
['datasources]
屬性值,將JDBC資源名稱 (jdbc/mydb) 指派給 Web 應用程式內容名稱 (ROOT),如 中所述tomcat::context。此最後一個屬性沒有預設值;您必須使用自訂 來設定它JSON。
-
-
按一下 Add a layer (新增 layer)。針對 Layer 類型,選取 MySQL。然後按一下 Add Layer (新增 Layer)。
-
按一下導覽窗格中的 Instances (執行個體),然後按一下 Add an instance (新增執行個體)。按一下 Add Instance (新增執行個體) 接受預設值。在執行個體的列上,按一下 start (啟動)。
-
返回 Layers (Layer) 頁面然後按一下 + Layer (+Layer) 以新增 layer。針對 Layer type (Layer 類型),按一下 Custom (自訂)。範例使用
TomCustom
和tomcustom
分別做為 layer 的名稱和短名。 -
在 Layers (Layer) 頁面上,針對自訂 layer,按一下 Recipes (配方) 然後按一下 Edit (編輯)。在 Custom Chef Recipes (自訂 Chef 配方) 下,將 Tomcat 技術指南配方指派給 layer 的生命週期事件,如下所示:
-
針對 Setup (安裝),輸入
tomcat::setup
然後按一下 +。 -
針對 Configure (設定),輸入
tomcat::configure
然後按一下 +。 -
針對 Deploy (部署),輸入
tomcat::deploy
然後按一下 +。然後按一下 Save (儲存)。.
-
-
按一下導覽窗格中的 Apps (應用程式),然後按一下 Add an app (新增應用程式)。指定下列選項,然後按一下 Add App (新增應用程式):
-
名稱 – 應用程式的名稱;範例使用 SimpleJSP,且 Stacks AWS OpsWorks 產生的簡短名稱將是 Simplejsp。
-
應用程式類型 – 將此選項設為其他。
AWS OpsWorks Stacks 會自動將標準應用程式類型部署到相關聯的伺服器執行個體。若您將 App type (應用程式類型) 設為「其他」, AWS OpsWorks Stacks 便只會執行部署配方,並讓它們處理部署。
-
文件根 – 將此選項設定為
ROOT
。Document root (文件根) 的值指定內容名稱。
-
儲存庫類型 – 將此選項設定為 S3 Archive。
-
儲存庫 URL– 將此設定為URL您先前建立的應用程式 Amazon S3。
其他選項請使用預設設定。
-
-
使用執行個體頁面將執行個體新增至 TomCustom layer 並啟動它。安裝配方完成後, AWS OpsWorks Stacks 會自動在新的執行個體上執行部署配方,因此啟動執行個體也會部署 SimpleJSP。
-
當 TomCustom 執行個體在線上時,按一下執行個體頁面上的執行個體名稱以查看其詳細資訊。複製公有 IP 地址。然後建構 URL,如下所示:http://
publicIP
/tc/appname.jsp
。在此範例中,這URL看起來會類似http://50.218.191.172/tc/simplejsp.jsp
。注意
轉送請求至 Tomcat URL的 Apache 會設定為預設
['tomcat']['apache_tomcat_bind_path']
屬性/tc/
。SimpleJSP 文件根設定為ROOT
,這是解析為 的特殊值/
。因此, URL是「.../tc/simplejsp.jsp」。 -
將上一個步驟URL的 貼到您的瀏覽器。請查看下列事項:
Databases found: information_schema simplejsp test
注意
如果您的堆疊有 MySQL 執行個體, AWS OpsWorks Stacks 會自動為每個應用程式建立資料庫,以應用程式的簡短名稱命名。