Làm chủ việc phát triển ứng dụng Facebook: Sử dụng đồng thời Java và PHP

Phần 2 của loạt hướng dẫn này bao gồm các chi tiết liên quan đến việc phát triển ứng dụng Facebook mà bạn đã bắt đầu trong Phần 1. Xây dựng một giao diện Facebook cho một công ty môi giới chứng khoán đang hoạt động, cho phép quản lý trực tuyến danh mục đầu tư. Tìm hiểu một cách tiếp cận để phân chia chức năng của một ứng dụng giữa các thành phần PHP và Java, và sử dụng khung công tác Spring để áp dụng một kiến trúc MVC tiêu chuẩn đối với mã Java ™

pdf75 trang | Chia sẻ: haohao89 | Lượt xem: 1834 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Làm chủ việc phát triển ứng dụng Facebook: Sử dụng đồng thời Java và PHP, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Làm chủ việc phát triển ứng dụng Facebook bằng PHP, IBM Rational Application Developer, IBM WebSphere Application Server và DB2, Phần 2: Sử dụng đồng thời Java và PHP Jake Miles, Tác giả tự do, 软通动力信息技术有限公司 Tóm tắt: Phần 2 của loạt hướng dẫn này bao gồm các chi tiết liên quan đến việc phát triển ứng dụng Facebook mà bạn đã bắt đầu trong Phần 1. Xây dựng một giao diện Facebook cho một công ty môi giới chứng khoán đang hoạt động, cho phép quản lý trực tuyến danh mục đầu tư. Tìm hiểu một cách tiếp cận để phân chia chức năng của một ứng dụng giữa các thành phần PHP và Java, và sử dụng khung công tác Spring để áp dụng một kiến trúc MVC tiêu chuẩn đối với mã Java ™. Loạt bài hướng dẫn này dẫn dẫn dắt bạn đi qua quy trình phát triển một ứng dụng Facebook đầy đủ chức năng bằng cách sử dụng WebSphere® Application Server (Máy chủ ứng dụng WebSpher), Rational® Application Developer (Bộ Phát triển ứng dụng Rational), Zend Core cho IBM, PHP 5 và DB2®. Trước khi bạn bắt đầu Về loạt bài này Loạt bài hướng dẫn này dẫn dắt bạn đi qua quy trình phát triển một ứng dụng Facebook đầy đủ chức năng bằng cách sử dụng WebSphere Application Server, Rational Application Developer, Zend Core for IBM, PHP 5 và DB2. Bạn sẽ xây dựng một phần của ứng dụng bằng cách sử dụng mã Java và một phần bằng PHP 5. Làm đại diện cho một công ty môi giới chứng khoán đang hoạt động, bạn sẽ thêm một giao diện Facebook vào hệ thống quản lý trực tuyến danh mục đầu tư của họ.  Trong Phần 1 bạn đã có một cái nhìn khái quát về phát triển ứng dụng Facebook, và đã bắt đầu bằng một ứng dụng khung sườn.  Trong Phần 2 bạn sẽ thực hiện công việc khởi đầu để tạo ra phía Java của ứng dụng -- một dự án Rational Application Developer và ứng dụng web bằng cách sử dụng khung công tác Spring nổi tiếng.  Phần 3 sẽ giải quyết các công việc đặc thù cho việc thực hiện một ứng dụng Facebook đầy đủ các chức năng bằng cách sử dụng Ngôn ngữ Đánh dấu Facebook (FBML), Facebook JavaScript (FBJS), và Facebook API trong cả hai ngôn ngữ Java và PHP. Về hướng dẫn này Môi trường Rational Application Developer của IBM, Zend Core cho IBM với các bản cài đặt Apache 2 và cơ sở dữ liệu DB2 Express-C của IBM kèm theo và WebSphere Application Server của IBM. Sau đó bạn đã khảo sát chi tiết một vòng các điểm tích hợp của Facebook -- các cơ chế mà Facebook cung cấp để tích hợp ứng dụng vào mạng xã hội -- và bắt đầu một số phát triển khung sườn. Bạn đã tạo ra và lập cấu hình ứng dụng trên Facebook, đã tạo ra một tệp index.php thử nghiệm đối với URL Callback, và sau đó thiết lập cơ sở dữ liệu DB2, tạo ra một số bảng cơ sở và điền vào các dữ liệu mẫu để bắt đầu. Trong hướng dẫn này, Phần 2 của loạt bài, bạn sẽ lập ra một dự án Rational Application Developer để tạo điều kiện phát triển Java, tạo cấu hình một nguồn dữ liệu DB2 đã đăng ký kết nối JNDI trong IBM WebSphere Application Server, và sử dụng khung công tác Spring để áp dụng một cấu trúc MVC cho mã Java để áp đặt một cấu trúc truy cập JDBC. Sau đó bạn sẽ viết ra một số lớp PHP đa dụng, cho phép bạn áp dụng cùng cấu trúc MVC ấy với mã PHP và cho phép bạn thêm các thuộc tính vào các cá thể lớp giống như bạn làm trong Spring. Bạn sẽ viết ra một lớp PHP Db2DataSource đa dụng để kết nối với DB2, và sử dụng mod_rewite và mod_proxy để cho PHP và Java cùng tồn tại một cách trong suốt tại cùng một URL. Hướng dẫn này sẽ cấu trúc nên thế giới Java và PHP giống nhau nhất đến mức có thể, vì một trong những rào cản để tích hợp hai thế giới đó là ở chỗ các nhà phát triển PHP và Java thường đến từ các nền tảng khác nhau, và nhìn các thế giới này theo các cách khác nhau. Hai ngôn ngữ này có thể cùng tồn tại trong cùng một ứng dụng (và cùng một nhóm phát triển) rất thành công, và với một mức độ trừu tượng cao và cấu trúc sạch một cách toàn diện. Các đều kiện tiên quyết Hướng dẫn này dành cho các nhà phát triển Java và PHP có mức kinh nghiệm khác nhau, những người muốn bắt đầu viết các ứng dụng Facebook trong Java, PHP hoặc tích hợp cả hai như là những bộ phận của một ứng dụng lớn hơn. Nó dành cho các nhà phát triển PHP, những người muốn tìm hiểu công việc xây dựng một ứng dụng J2EE bằng cách sử dụng khuôn mẫu Spring và cách áp dụng một cấu trúc hướng đối tượng vào các ứng dụng PHP của họ, và dành cho những người phát triển Java muốn bắt đầu sử dụng PHP, có thể vì mục đích thêm PHP vào ứng dụng Java doanh nghiệp hiện hành. Bạn nên đọc Mastering Facebook application development, Part 1 (Làm chủ ứng dụng Facebook, Phần 1) trước khi tiếp tục Phần 2. Yêu cầu về hệ thống Để hoàn thành các bước trong hướng dẫn này, bạn cần các phần mềm sau. Nếu bạn chưa cài đặt các sản phẩm này, hoặc không có phiên bản mới nhất, bạn có thể tải về các phiên bản dùng thử miễn phí:  Tải về một phiên bản dùng thử miễn phí Spring Framework -- Tôi sử dụng phiên bản 2.5.3, bản phát hành mới nhất.  Tải về một phiên bản dùng thử miễn phí Rational Application Developer. Bạn sẽ sử dụng Rational Application Developer như là một bản IDE đầy đủ tính năng dựa trên Eclipse để phát triển ứng dụng Web Java của bạn.  Tải về một phiên bản dùng thử miễn phí IBM WebSphere Application Server V6.1.  Tải về Zend Core For IBM (gồm có IBM DB2® Express-C)  Zend Studio là một công cụ tuyệt vời để viết mã PHP, mặc dù có thể dùng trình soạn thảo văn bản nào cũng được. Bổ sung Java cùng với PHP Trong Phần 1 bạn đã nhận được bên PHP của ứng dụng đang chạy. Bây giờ bạn sẽ thực hiện việc khởi tạo ban đầu để tạo ra bên Java của ứng dụng -- một dự án Rational Application Developer và ứng dụng web bằng cách sử dụng khung công tác Spring nổi tiếng. Sau đó bạn sẽ viết ra các lớp PHP cho phép bạn áp đặt cùng một mẫu MVC lên mã PHP như trong Java, và tạo một proxy đảo ngược từ Apache đến IBM WebSphere bằng cách sử dụng mod_rewrite và mod_proxy, do đó bạn có thể sử dụng cùng một URL Facebook Callback đối với các máy chủ PHP và Java. Sau đó bạn sẽ sử dụng tập tin .htaccess để gửi các yêu cầu đến PHP hoặc Java tùy thuộc vào URI yêu cầu. Một cấu trúc chung giữa các máy chủ Java và PHP của bạn sẽ làm cho sự tích hợp của chúng dễ dàng hơn và cho phép bạn (hoặc nhóm của bạn) sử dụng bất cứ công nghệ nào thích hợp hơn cho mỗi mảnh của ứng dụng Facebook, và việc sử dụng proxy và .htaccess sẽ tách rời mặt trước với việc sử dụng hai công nghệ của bạn ở mặt sau. Thiết lập dự án Rational Application Developer Làm theo các bước sau để thiết lập một dự án trong Rational Application Developer: 1. Mở Rational Application Developer từ trình đơn Start: Start > All Programs > IBM Software Development Platform > IBM Rational Application Developer > IBM Rational Application Developer. 2. Tạo một dự án Java mới (File > New > Project), chọn Dynamic Web Project làm kiểu dự án và WebSphere Application Server v6.1 làm môi trường chạy đích. Phải chắc chắn đã đánh dấu chọn các khía cạnh (facet) của dự án Dynamic Web Module, Java, JSTL, và khía cạnh WebSphere web. 3. Đặt gốc ngữ cảnh ở facebook-stock-demo, thư mục nội dung vào mặc định của WebContent, và thư mục nguồn Java vào src. Rational Application Developer sau đó sẽ tạo ra cấu trúc dự án ứng dụng web tiêu chuẩn cho bạn và bạn chỉ cần điền nó vào. Hợp nhất khung công tác Spring Thêm khung công tác Spring đa năng vào ứng dụng. 1. Tải về phiên bản khung công tác Spring với tất cả các phần phụ thuộc (xem Prerequisites để có một đường liên kết). 2. Giải nén nó vào vị trí có ích nào đó, thí dụ c:\ (việc giải nén các tập tin có thể mất một thời gian), và từ thư mục dist sao chép tệp spring.jar và tất cả các tệp JAR dưới thư mục dist/modules vào thư mục WEB-INF/lib của dự án. Bạn có thể tìm thấy thư mục WEB-INF/lib của dự án của bạn bằng cách chuyển đến Project > Properties và xem ô Info. Thí dụ, tôi đã sao chép chúng vào C:\Documents and Settings\jmiles\IBM\rationalsdp7.0\workspace\facebook-stock- demo\WebContent\WEB-INF\lib. 3. Bổ sung thêm commons-logging.jar vào đường dẫn lớp (classpath) của dự án của bạn, từ thư mục lib/jakarta-commons của khung công tác Spring, thông qua Project > Properties > Java Build Path > Add External JARs (xem Hình 1). Không được sao chép JAR này vào thư mục lib của bạn; nó sẽ gây ra một lỗi khi triển khai WebSphere. Hình 1. Thêm các JAR bên ngoài vào dự án Rational Application Developer của IBM 4. Làm mới vùng làm việc (nhấn chuột phải vào tên dự án và chọn Refresh), và khung nhìn Project Explorer sẽ cập nhật tất cả các JAR được thêm vào. Lập cấu hình Spring Giờ thì bạn đã cài đặt Spring, và bạn cần phải lập cấu hình ứng dụng Web để sử dụng nó. Nhấn chuột phải vào web.xml trong Project Explorer (xem Hình 2) và chọn Open with > Text Editor. Hình 2. Mở web.xml bằng một trình soạn thảo văn bản trong Rational Application Developer Thay nội dung bằng nội dung của Liệt kê 1. Liệt kê 1. web.xml <web-app id="WebApp_ID" version="2.4" xmlns="" xmlns:xsi=" instance" xsi:schemaLocation=" app_2_4.xsd"> facebook-stock-demo</display- name> spring org.springframework.web.servlet.DispatcherServlet 1 spring /action/* index.jsp Việc này sẽ định tuyến tất cả các yêu cầu mà các URI của chúng bắt đầu bằng facebook-stock-demo/action (ở đây facebook-stock-demo là bối cảnh mà bạn sẽ chỉ định trong WebSphere của IBM) thông qua DispatcherServlet của Spring, điểm nhập vào khung công tác MVC Spring. Tiếp theo bạn cần có một tập tin Spring-servlet.xml để lập cấu hình cho các bean Spring. Spring theo mặc định sẽ nối thêm đuôi “-servlet.xml” vào phần tử trong web.xml làm tên của tập tin cấu hình, do đó trong khung nhìn Project Explorer, hãy tạo một tập tin văn bản mới trong thư mục WEB-INF có tên là spring-servlet.xml. Bạn có thể phải đóng tập tin và nhấn chuột phải vào nó để mở ra bằng một trình soạn thảo văn bản nếu Rational Application Developer mở nó ra theo mặc định trong một trình soạn thảo XML. Dán nội dung của Liệt kê 2 vào spring-servlet.xml. Liệt kê 2. Spring-servlet.xml ban đầu <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ""> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> org.springframework.web.servlet.view.JstlView /WEB-INF/jsp/ <bean id="urlMapping" class="org.springframework.web.servlet. handler.SimpleUrlHandlerMapping"> <bean id="stockListController" class="com.jm.fbstockdemo.StockListController"> stockList.jsp Bean đầu tiên quy định cách thức mà các tên khung nhìn được ánh xạ vào URL. Bất cứ khi nào một trình điều khiển trả lại một tên khung nhìn, trình phân giải khung nhìn (view resolver) sẽ nối thêm phần đầu /WEB-INF/jsp/ vào nó, tạo ra chẳng hạn tệp /WEB-INF/jsp/stocks.jsp để đáp ứng lại tên khung nhìn stocks.jsp. Bean thứ hai ánh xạ các URL vào các trình điều khiển spring, trong trường hợp này nó ánh xạ một url đơn lẻ, /stockList, vào bean điều khiển bằng id stockListController, mà được định nghĩa như là bean thứ ba trong tập tin này. Định nghĩa bean stockListController nội xạ một thuộc tính successView với đối tượng StockListController để giữ các tên của các khung nhìn nằm bên ngoài mã Java. Thêm vào một lớp trình điều khiển Spring và khung nhìn tương ứng Để thêm vào một lớp trình điều khiển Spring và khung nhìn tương ứng, hãy làm như sau: 1. Tạo một gói dưới thư mục src bằng cách nhấn chuột phải vào Java Resources: src trong khung nhìn Project Explorer và chọn New > Package. Tôi gọi gói của tôi là com.jm.fbstockdemo. 2. Nhấn chuột phải vào gói mới này và tạo một lớp StockPriceController có thực hiện org.springframework.web.servlet.mvc.Controller. Bạn có thể chỉ cần gõ Controller sau khi nhấn vào Add và Rational Application Developer sẽ thu hẹp danh sách các tùy chọn tương ứng khi bạn gõ nhập. 3. Điền vào nó một triển khai thực hiện cơ bản nhất có thể, đơn giản chỉ thực hiện trả lại một tên khung nhìn để biểu hiện (xem Liệt kê 3). Liệt kê 3. Một lớp StockListController ban đầu (Java) public class StockListController implements Controller { public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { return new ModelAndView (getSuccessView()); } } 4. Tiếp theo nhấn chuột phải vào WEB-INF và tạo một thư mục jsp. 5. Trong thư mục jsp tạo tệp stockList.jsp ban đầu, có chứa xml để kiểm thử như Liệt kê/như trong Liệt kê 4. Liệt kê 4. Một stockList.jsp ban đầu <%@ page contentType="text/xml" %> <%@ taglib prefix="c" uri="" %> 1 JAKE 3000 Triển khai vào WebSphere Application Server Với ứng dụng Spring Java khung sườn đã viết, giờ đây bạn có thể triển khai nó vào WebSphere Application Server (Máy chủ ứng dụng WebSphere). 1. Tạo tập tin WAR bằng cách nhấn chuột phải vào dự án trong Rational Application Developer, và chọn Export > WAR file. 2. Trong cửa sổ Save As, di chuyển đến thư mục của dự án (như bạn đã làm trên đây) và tạo một thư mục mới có tên dist bên cạnh các thư mục src và WebContent. Thí dụ, tôi đã ghi lưu tệp WAR là c:\Documents và Settings\jmiles\IBM\rationalsdp7.0\workspace\facebook-stock- demo\dist\facebook-stock-demo.war. 3. Nhấn Finish. Rational Application Developer sẽ bao bọc ứng dụng một cách thành thục thành facebook-stock-demo.war. 4. Để triển khai tập tin WAR, khởi động một cá thể máy chủ ứng dụng WebSphere qua Start>All Programs>IBM WebSphere > Application Server v6.1 > Profiles > [your profile name] > Start the server (xem Hình 3). Đợi nó khởi động (một cửa sổ nhắc lệnh sẽ xuất hiện, hiển thị thông tin khởi động, sau đó biến mất), và sau đó di chuyển đến bàn điều khiển (Administrative Console) qua cùng đường dẫn của trình đơn Start. Thao tác này sẽ mở ra bàn điều khiển của cá thể WebSphere của bạn trong trình duyệt Web. Hình 3. Khởi động Máy chủ Ứng dụng WebSphere từ trình đơn khởi động Windows 5. Đăng nhập vào bàn điều khiển admin, mở phiếu Applications và chọn Install New Application. 6. Chọn Local file system, di chuyển đến tệp tin WAR của bạn và chọn nó. 7. Chỉ rõ /facebook-stock-demo làm bối cảnh gốc, và nhấn Next. Giữ nguyên tất cả các giá trị mặc định trên màn hình các tùy chọn cài đặt và nhấn Next. 8. Trên màn hình “Map modules to servers” chọn ứng dụng web của bạn để thêm nó vào server1. 9. Nhấn vào Finish trên màn hình summary, và WebSphere sẽ cài đặt ứng dụng web. Hãy chắc chắn nhấn vào Save dưới đáy màn hình đầu ra khi cài đặt hoàn tất. 10. Nhấn vào Enterprise Applications ở bên trái, và bạn sẽ thấy ứng dụng của bạn nằm trong danh mục các ứng dụng đã cài đặt. Chọn cái đó và nhấn Start để khởi động. 11. Để xác nhận cổng mà ứng dụng của bạn đang chạy trên đó, hãy mở phần Servers ở bên trái, nhấn Application servers, chọn server1, và trong phần Communications của cấu hình server1 nhấn Ports ((xem Hình 4). WC_defaulthost chỉ rõ cổng mà qua đó bạn có thể truy cập ứng dụng web của bạn. Trong cài đặt của tôi cổng này là 9083; thay thế giá trị ấy vào chỗ của WC_defaulthost trong tất cả các URL được chỉ ra sau đây. Hình 4. Tìm cổng HTTP của máy chủ của bạn trong Máy chủ ứng dụng WebSphere 12. Cuối cùng, để xác nhận rằng tất cả hoạt động tốt, hãy mở một cửa sổ trình duyệt nữa, vào và bạn sẽ thấy xml của stockList.jsp. Ứng dụng web MVC Spring bây giờ đã được cài đặt và làm việc dưới IBM WebSphere cung cấp một cấu trúc MVC tiêu chuẩn để phát triển mã ứng dụng Facebook của bạn trong đó. Cơ cấu một ứng dụng PHP tương tự như một ứng dụng Java Spring Cấu trúc của một ứng dụng Web Java và DispatcherServlet của Spring cung cấp một mô hình tuyệt vời cho nửa PHP của ứng dụng. Không ném qua cửa sổ những kết quả trừu tượng hóa hướng đối tượng đẹp đẽ như vậy, bạn sẽ nhanh chóng trực tiếp làm ra một số các lớp có thể giúp cho việc mô phỏng chức năng thêm thuộc tính của Spring và chức năng điều phối của MVC. Bạn sẽ viết ra một lớp Properties đọc các tệp tin thuộc tính, một lớp Injectable cho phép bạn thêm các thuộc tính từ các tệp tin đó vào các cá thể lớp, và một lớp ActionDispatcher sẽ điều phối một biến yêu cầu đến đúng lớp điều khiển để xử lý yêu cầu. Để viết mã PHP, bất kỳ trình soạn thảo văn bản nào cũng làm được, nhưng Zend Studio là tuyệt vời (xem Tài nguyên). Đọc các giá trị từ các tệp tin thuộc tính Để giữ cho những phần không thay đổi của ứng dụng nằm bên ngoài mã, bạn sẽ sử dụng một tập hợp các tệp tin thuộc tính và một lớp Properties đọc được chúng, lắp ráp một mảng kết hợp các thuộc tính mà phần còn lại của ứng dụng có thể sử dụng được, như trong liệt kê 5 (đặt Properties.php trong một thư mục con lib dưới thư mục fb_stock_demo). Liệt kê 5. Properties.php <?php class Properties { private $props; public function __construct ($propertiesFilePaths) { $this->props = array(); foreach ($propertiesFilePaths as $path) { $this->loadProperties($path); } } private function loadProperties($propertiesFilePath) { $lines = file($propertiesFilePath); foreach ($lines as $line) { $trimmed = trim($line); if (strlen($trimmed) > 0 && strchr($trimmed, 0, 1) != "#") { $split = split("=", trim($line)); $key = $split[0]; $value = $split[1]; $this->props[$key] = $value; } } } public function get($key) { if (! isset($this->props[$key])) { throw new Exception ("Properties: unknown key $key"); } return $this->props[$key]; } } Bạn cung cấp cho hàm tạo (constructor) một mảng các đường dẫn đến tệp tin thuộc tính, nó đọc lần lượt từng cái một, lắp ráp mảng kết hợp trong loadProperties(). Bằng cách nhận cả một mảng các đường dẫn tệp tin thuộc tính chứ không phải chỉ là một đường dẫn, bạn tách rời các thuộc tính phụ thuộc vào môi trường như các giá trị kết nối cơ sở dữ liệu. Điều này làm cho việc sao chép mã dễ dàng hơn từ một môi trường này đến môi trường khác (ví dụ từ phát triển đến sản xuất) không phải viết đè lên các giá trị đó; bạn chỉ cần không sao chép các tập tin đặc trưng cho môi trường hoặc thiết lập cấp quyền truy cập chúng sao cho bạn không thể viết đè lên chúng được trong khi sao chép. Thí dụ, ứng dụng này sẽ sử dụng hai tập tin thuộc tính, app.properties và db.properties, ở đây app.properties chứa các hằng số như khoá mã và bí mật API Facebook (Facebook API Key and Secret), còn db.properties chứa thông tin đăng nhập cơ sở dữ liệu. Sử dụng các phương thức thần kỳ PHP 5 để cung cấp phép thêm vào thuộc tính kiểu như Spring Bây giờ ta xem xét một số phép thần kỳ PHP 5. Để cung cấp thêm một chút gì hơn kiểu như Spring, bạn có thể thêm các thuộc tính vào một đối tượng từ một tệp tin cấu hình mà sẽ xem xét và đối xử chính xác như các biến cá thể trong đối tượng đích. Tất cả các lớp cần có các thuộc tính được thêm vào như vậy cần phải là lớp con của lớp Injectable (xem Liệt kê 6). Liệt kê 6. Lớp Injectable (PHP) class Injectable { protected $properties; private $prefix; public function Injectable($properties=null, $propPrefix=null) { $this->prefix = $propPrefix == null ? get_class($this) . '/' : $propPrefix; $this->setProperties ($properties); } public function setProperties($properties) { $this->properties = $properties; } public function __get($property) { return $this- >getProperty($property); } public function getProperty($property) { return $this->properties- >get($this->prefix . $property); } } Then chốt của lớp Injectable là phương thức __get() đó là một phương thức thần kỳ của PHP 5. Các phương thức thần kỳ là phương thức đặc biệt có sẵn trên tất cả các đối tượng PHP 5, mà PHP sử dụng để cung cấp cho các đối tượng các hành vi lõi đặc biệt;
Tài liệu liên quan