22
MỤC LỤC 1 Giới thiệu Google App Engine............................................................................................... 2 2 Hướng dẫn cài đặt..................................................................................................... 2 2.1 Yêu cầu:___________________________________________________________2 2.2 Đăng kí tài khoản Google App Engine:_______________________________2 3 Tạo một project.......................................................................................................... 6 3.1 Cấu trúc thư mục project___________________________________________6 3.2 The servlet class__________________________________________________7 3.3 Signgustbookservlet.java file______________________________________8 3.4 PMF file___________________________________________________________9 3.5 Getting.java______________________________________________________10 3.6 jdoconfig.xml file________________________________________________11 3.7 guestbook.jsp file________________________________________________12 3.8 web.xml file______________________________________________________13 3.9 theappengine-web.xml______________________________________________14 4 Triển khai ứng dụng................................................................................................. 15 4.1 Chuẩn bị:_________________________________________________________15 4.2 Thực hiện upload__________________________________________________15 5 Chạy chương trình............................................ 16 1

Huong Dan Lap Trinh Google App Engine

  • Upload
    chi-si

  • View
    725

  • Download
    5

Embed Size (px)

Citation preview

MỤC LỤC

1 Giới thiệu Google App Engine......................................................................................................2

2 Hướng dẫn cài đặt.......................................................................................................................2

2.1 Yêu cầu:_________________________________________________________________________2

2.2 Đăng kí tài khoản Google App Engine:________________________________________________2

3 Tạo một project............................................................................................................................6

3.1 Cấu trúc thư mục project___________________________________________________________6

3.2 The servlet class___________________________________________________________________7

3.3 Signgustbookservlet.java file________________________________________________________8

3.4 PMF file_________________________________________________________________________9

3.5 Getting.java_____________________________________________________________________10

3.6 jdoconfig.xml file_________________________________________________________________11

3.7 guestbook.jsp file_________________________________________________________________12

3.8 web.xml file_____________________________________________________________________13

3.9 theappengine-web.xml_____________________________________________________________14

4 Triển khai ứng dụng..................................................................................................................15

4.1 Chuẩn bị:_______________________________________________________________________15

4.2 Thực hiện upload_________________________________________________________________15

5 Chạy chương trình......................................................................................................................16

1

1 Giới thiệu Google App Engine“Google App Engine” (GAE) là một nền tảng hosting bao gồm web server, cơ sở dữ liệu BigTable and kho lưu trữ file GFS. GAE cho phép bạn viết ứng dụng web dựa trên cơ sở hạ tầng của Google. Nghĩa là bạn không cần quan tâm là trang web bạn được lưu trữ như thế nào (kể cả database đi kèm), mà chỉ cần quan tâm đến việc phát triển ứng dụng theo các API do Google cung cấp.  Với App Engine, NSD chỉ cần tải lên các ứng dụng của bạn, và nó sẵn sàng để phục vụ người dùng của bạn.

NSD có thể sử dụng tên miền riêng của mình (như http://www.example.com/) thông qua Google Apps. Hoặc có thể dùng sub-domain miễn phí của appspot.com.

GAE cho phép được host miễn phí với dung lượng 500 MB lưu trữ và cho phép 10 GB băng thông lưu chuyển mỗi ngày hay tương đương 5 triệu pageview hàng tháng,Vượt qua mức này bạn sẽ phải trả phí.  Dùng GAE, chúng ta khỏi phải thiết kế database, viết SQL để truy vấn data, map data vô object. Chúng ta chỉ cần design các class và GAE tự động lo phần làm việc với database.

NSD chỉ cần phải nghĩ ra và viết những ứng dụng rồi mời sử dụng. Tuy nhiên, mặt trái của việc xây dựng ứng dụng trên GAE là bạn sẽ phụ thuộc hoàn toàn vào các công nghệ của Google và rất khó có thể tách ra thành một ứng dụng độc lập.

Hiện AppEngine hỗ trợ 2 loại ngôn ngữ là: Python và Java. Một số ngôn ngữ khác như PHP cũng có thể chạy được nếu cài cùng với bộ chuyển từ PHP sang Java.

2 Hướng dẫn cài đặt

2.1 Yêu cầu:- Eclipse hay jcreator- Google plugin cho Eclipese- AppEngine-java-SDK-1.3.8.zip

2.2 Đăng kí tài khoản Google App Engine:Bước 1: Để triển khai các ứng dụng của bạn với các đám mây của Google, cần một tài khoản AppEngine thông qua tài khoản email của Google. Mờ  http://appengine.google.com/ và đăng nhập với thông tin tài khoản Gmail

2

Bước 2: Chọn nút Create Application

Bước 3: Xác minh tài khoản của bạn thông qua một số điện thoại hợp lệ. Google sẽ nhắn một mã xác minh qua SMS.

3

Bước 4: Nhập mã xác nhận của google

4

Bước 5: Tiến hành tạo một ứng dụng. NSD được phép tạo được 10 ứng dụng cho một tài khoản gmail.

5

Giao diện chính của ứng dụng như sau:

6

3 Tạo một project Các ứng dụng App Engine Java sử dụng các chuẩn java servlet để tương tác với môi trường máy chủ web. Các file của một ứng dụng bao gồm: các file class đã được biên dịch từ file java, các file JAR của bộ thư viện, các file tĩnh (css,…) và các file xml cấu hình. Tất cả được sắp xếp theo một cấu trúc thư mục và nằm trong thư mục WAR

3.1 Cấu trúc thư mục project Một thư mục với tên Guestbook được tạo để chứa dự án. Bên trong là 2 thư mục, một thư mục mang tên /src để chứa mã nguồn java và một thư mục /war để chứa các file class được biên dịch từ file nguồn java. Thư mục war được xem là một ứng dụng hoàn chỉnh dùng để up lên Google App.

Tạo cây thư mục như sau:

7

Tải về mã nguồn tại:https://code.google.com/p/googleappengine/source/browse/trunk/java/demos/?r=44#demos%2Fguestbook

3.2 The servlet class Các ứng dụng App Engine Java sử dụng java servlet API để tương tác với máy chủ web. Một HTTP Servlet là một lớp ứng dụng có khả năng xử lý và phản hồi các yêu cầu web. Lớp này thừa kế lớp javax.servlet.GenericServlet hoặc lớp javax.servlet.http.HttpServlet. Trong thư mục src/guestbook tạo một file có tên GuestbookServlet.java có nội dung:

Guestbook

Src (mã nguồn)

Guestbook

META-INF

(file cấu hình)

Greeting.java

GuestbookServlet.java

PMF.java

SignGuestbookServlet.java

Jdoconfig.xml

Guestbook.jsp

war

WEB-INF

Web.xml

Appengine-web.xml

classes

lib

Compiled classes

JARs for Libraries

8

Google App Engine cung cấp một số dịch vụ hữu ích dựa trên cơ sở hạ tầng Google, có thể truy cập bởi các ứng dụng bằng cách sử dụng thư viện có trong SDK. Trong đó có dịch vụ người dùng cho phép tích hợp các ứng dụng của bạn với tài khoản người dùng Google. Các NSD khác có thể sử dụng Google các tài khoản mà họ đã có để đăng nhập vào ứng dụng của bạn. Trong đoạn code trên, class GuestbookServlet sử dụng Users API để kiểm tra xem người dùng đã đăng nhập với tài khoản Google. Nếu chưa, thì người dùng sẽ được chuyển đến màn hình đăng nhập tài khoản Google. userService.createLoginURL(...) sẽ trả về URL của màn hình đăng nhập.

3.3 Signgustbookservlet.java fileTrong src/guestbook/ tạo 1 file SignGuestbookServlet.java có nội dung sau:

9

package guestbook;

import java.io.IOException;import javax.servlet.http.*;import com.google.appengine.api.users.User;import com.google.appengine.api.users.UserService;import com.google.appengine.api.users.UserServiceFactory;

public class GuestbookServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { UserService userService = UserServiceFactory.getUserService(); User user = userService.getCurrentUser();

if (user != null) { resp.setContentType("text/plain"); resp.getWriter().println("Hello, " + user.getNickname()); } else { resp.sendRedirect(userService.createLoginURL(req.getRequestURI())); } }}

Đoạn code này tạo đối tượng Greeting mới bằng việc gọi hàm. Để lưu đối tượng vào kho dữ liệu, nó tạo ra PersistenceManager nhờ vào việc sử dụng PersistenceManagerFactory. Khi makePersistent được trả về, các đối tượng mới được lưu trong kho dữ liệu.

3.4 PMF file Mỗi khi yêu cầu sử dụng, kho dữ liệu sẽ tạo ra một đối tượng mới của lớp PersistenceManager thong qua thư class PersistenceManagerFactory.

package guestbook;

import java.io.IOException;import java.util.Date;import java.util.logging.Logger;import javax.jdo.PersistenceManager;import javax.servlet.http.*;import com.google.appengine.api.users.User;import com.google.appengine.api.users.UserService;import com.google.appengine.api.users.UserServiceFactory;

import guestbook.Greeting;import guestbook.PMF;

public class SignGuestbookServlet extends HttpServlet { private static final Logger log = Logger.getLogger(SignGuestbookServlet.class.getName());

public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { UserService userService = UserServiceFactory.getUserService(); User user = userService.getCurrentUser();

String content = req.getParameter("content"); Date date = new Date(); Greeting greeting = new Greeting(user, content, date);

PersistenceManager pm = PMF.get().getPersistenceManager(); try { pm.makePersistent(greeting); } finally { pm.close(); }

resp.sendRedirect("/guestbook.jsp"); }}

10

Trong thư mục src/guestbook tao một file PMF.java có nội dung:

3.5 Getting.javaTrong thư mực src/guestbook ta tạo một file Greeting.java có nội dung:

package guestbook;

import java.util.Date;import javax.jdo.annotations.IdGeneratorStrategy;import javax.jdo.annotations.IdentityType;import javax.jdo.annotations.PersistenceCapable;import javax.jdo.annotations.Persistent;import javax.jdo.annotations.PrimaryKey;import com.google.appengine.api.users.User;

@PersistenceCapable(identityType = IdentityType.APPLICATION)public class Greeting { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id;

11

package guestbook;

import javax.jdo.JDOHelper;import javax.jdo.PersistenceManagerFactory;

public final class PMF { private static final PersistenceManagerFactory pmfInstance = JDOHelper.getPersistenceManagerFactory("transactions-optional");

private PMF() {}

public static PersistenceManagerFactory get() { return pmfInstance; }}

Lớp này sẽ định nghĩa 3 thuộc tính: author, content và date. Ba trường này sẽ được chú thích @Persistence để thông báo cho DataNucleus lưu chúng như 3 đối tượng thuộc tính trong Goolge App.

3.6 jdoconfig.xml fileTrong thư mục war/WEB-INF/classes/META-INF/, ta tạo file jdoconfig.xml để cấu hình Goole APP thành nền tảng try xuất.

12

@Persistent private User author;

@Persistent private String content;

@Persistent private Date date;

public Greeting(User author, String content, Date date) { this.author = author; this.content = content; this.date = date; }

public Long getId() { return id; }

public User getAuthor() { return author; }

public String getContent() { return content; }

public Date getDate() { return date; }

public void setAuthor(User author) { this.author = author; }

public void setContent(String content) { this.content = content; }

public void setDate(Date date) { this.date = date; }}

3.7 guestbook.jsp fileTrong war/ ta tạo 1 file guestbook.jsp để làm giao diện cho người sử dụng post các bình luận.

<?xml version="1.0" encoding="utf-8"?><jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">

<persistence-manager-factory name="transactions-optional"> <property name="javax.jdo.PersistenceManagerFactoryClass" value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/> <property name="javax.jdo.option.ConnectionURL" value="appengine"/> <property name="javax.jdo.option.NontransactionalRead" value="true"/> <property name="javax.jdo.option.NontransactionalWrite" value="true"/> <property name="javax.jdo.option.RetainValues" value="true"/> <property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/> </persistence-manager-factory></jdoconfig>

13

-Test case 1: Nhập sai các thông tin SQL server connect.Server thông báo, kết nối không thành công.

3.8 web.xml file Khi máy chủ web nhận được yêu cầu sẽ xác định servlet class để gọi bằng cách sử dụng một file cấu hình được gọi là "mô tả triển khai ứng dụng web."

File này được đặt tên là web.xml , và nằm trong war/WEB-INF/ thư mục trong WAR. WEB-INF/ và web.xml là một phần của đặc tả servlet.

14

<p>The guestbook has no messages.</p><% } else { for (Greeting g : greetings) { if (g.getAuthor() == null) {%><p>An anonymous person wrote:</p><% } else {%><p><b><%= g.getAuthor().getNickname() %></b> wrote:</p><% }%><blockquote><%= g.getContent() %></blockquote><% } } pm.close();%>

<form action="/sign" method="post"> <div><textarea name="content" rows="3" cols="60"></textarea></div> <div><input type="submit" value="Post Greeting" /></div> </form>

</body></html>

3.9 theappengine-web.xml

App Engine cần một tập tin cấu hình bổ sung để tìm ra cách để triển khai và chạy ứng dụng. File này được đặt tên appengine-web.xml , và nằm trong WEB-INF/ cùng với web.xml . Nó bao gồm các ID đăng ký của các ứng dụng của bạn (Eclipse tạo ra điều này với một ID trống để bạn điền vào sau), số phiên bản của ứng dụng của bạn, và danh sách các file đó phải được đối xử như các file tĩnh (như hình ảnh và CSS) và các file tài nguyên (như JSP và dữ liệu ứng dụng khác).

Trong thư mục war/WEB-INF/ , một tập tin có tên appengine-web.xml có nội dung sau đây:

15

<?xml version="1.0" encoding="utf-8"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5"> <servlet> <servlet-name>guestbook</servlet-name> <servlet-class>guestbook.GuestbookServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>guestbook</servlet-name> <url-pattern>/guestbook</url-pattern> </servlet-mapping>

<servlet> <servlet-name>sign</servlet-name> <servlet-class>guestbook.SignGuestbookServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>sign</servlet-name> <url-pattern>/sign</url-pattern> </servlet-mapping>

<welcome-file-list> <welcome-file>guestbook.jsp</welcome-file> </welcome-file-list></web-app>

4 Triển khai ứng dụngĐể upload code và các file chương trình của bạn lên Google App Engine ta dùng một tập lệnh có trong SKD có tên: appcfg.cmd

4.1 Chuẩn bị:Đưa ID vào ứng dụng: Cần 1 ID application đã được đăng ký trên google để upload ứng dụng, theo như cách đăng ký phần trên, ta có được ID application là : le-thaoVào thưc mục war/WEB-INF/appengine-web.xml mở file appengine-web.xml lên, đặt ID application vào giữa thẻ <application> </application> rồi save lại như hình vẽ

4.2 Thực hiện uploadGiải nén ra ổ D ta được D:\appengine-java-sdk, mở cmd, chuyển về ổ D:

16

<?xml version="1.0" encoding="utf-8"?><appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application></application> <version>1</version>

<system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> </system-properties></appengine-web-app>

Gõ lệnh để upload:D:\\appengine-java-sdk\bin\appcfg.cmd update D:\guestbook\war

Điền mail và pass nếu chương trình hỏi, và upload thành công như hình dưới:

5 Chạy chương trìnhMở trình duyệt, truy cập vào địa chỉ: http://le-thao.appspot.com/

17

Hình trên là giao diện chính của ứng dụng . Người dùng có thể không đăng nhưng người khác không biết bạn là ai. Vì vậy nên đăng nhập trước khi viết bình luận

Như vậy khi thành viên vào sau sẽ thấy nội dung người viết trước và có thể viết những phản hồi.về hình thức các bạn thấy ứng dụng như một diễn đàn hay blog …

Khi thiết kế websie hay viết các chương trình đòi hỏi phải tạo CSDL và nơi lưu CSDL .Đối với ứng dụng này bạn không cần phải quan tâm đến csdl lưu ở đâu và truy vấn như thế nào do đã có Google app engine làm.

Ví dụ nội dung bình luận được lưu trên Google app engine:

18

19