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ã Ja
Trang 1Là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ọ
Trang 2 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
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
Trang 3đặ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
Trang 4
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ừ
Trang 5Apache đế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
Trang 6
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
Trang 7Developer 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
Trang 8Hì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
Trang 9http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
name>
Trang 10Tiế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ử
<servlet-name> 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
Trang 12<bean id="urlMapping" class="org.springframework.web.servlet
Trang 13
</beans>
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
Trang 142 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)
Trang 15}
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
Trang 16<price>3000</ticker>
</stock>
</stockList>
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
Trang 17Hì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
Trang 1810 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
Trang 19dụ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 http://localhost:9083/facebook-stock-demo/action/stockList,
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
Trang 20Cấ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 {
Trang 21$lines =
Trang 23if (! isset($this->props[$key])) {
throw new Exception
("Properties: unknown key $key");
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
Trang 24Liệt kê 6 Lớp Injectable (PHP)
Trang 25get_class($this) '/' :
$propPrefix;
$this->setProperties ($properties);
Trang 26Then 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; bất kỳ biến PHP và bất kỳ phương thức nào có tên bắt đầu bằng (hai gạch dưới) sẽ được coi là phương thức thần kỳ Bất cứ khi nào bạn truy cập một biến cá thể của một đối tượng, nếu biến đó không được tìm thấy trên đối tượng, PHP sẽ gọi phương thức get() của đối tượng để tìm ra giá trị của nó, chỉ cần cung cấp tên của biến được yêu cầu dưới dạng chuỗi ký tự Phương thức get() của lớp Injectable tìm kiếm thuộc tính đó trên đối tượng Properties, đặt thêm vào trước tên thuộc tính một tiền tố duy nhất của nó, mà mặc định là tên lớp của đối tượng Injectable theo sau bởi một dấu gạch chéo (Ghi chú: sử dụng dấu chấm (dot) sẽ gây ra các vấn đề cho trình phân tích PHP) Điều này làm cho việc thêm các thuộc tính từ bên ngoài vào trong một cái gì đó, ví dụ như một lớp kết nối cơ sở dữ liệu trở thành một việc tầm thường, và bạn sẽ làm ngay sau đây Các thuộc tính được thêm vào có thể được tham chiếu đến đối tượng đích như các biến
cá thể bình thường, cứ như là chúng đã được đặt trong mã rồi
Do đó bây giờ bạn có thể thêm bất kỳ thuộc tính nào mà bạn cần vào một đối tượng bằng cách chỉ rõ giá trị thuộc tính trong một tập tin thuộc tính bên ngoài, tương tự như hành vi Spring-servlet.xml của Spring Điều này rõ ràng là một
Trang 27nhóm phụ rất nhỏ các chức năng của Spring, nhưng lại khá hữu ích trong việc giữ cho mã Java và mã PHP có cấu trúc tương tự và sạch sẽ
Viết ActionDispatcher
Để duy trì một sự đối xứng với khung MVC của Spring, bạn sẽ sử dụng các lớp điều khiển như bạn đã làm trong Spring, mỗi lớp dành cho một yêu cầu, và sử dụng cùng một phép trừu tượng hóa ánh xạ các khoá URI với các tên lớp điều khiển, sao cho URI có thể chỉ cần chỉ định rõ một khoá cho yêu cầu đó, và
ActionDispatcher sẽ tạo ra và gọi đúng đối tượng điều khiển để đáp ứng lại yêu cầu, như trong Liệt kê 7 (đặt ActionDispatcher.php vào trong thư mục con lib)
Liệt kê 7 Lớp ActionDispatcher (PHP)
Trang 30cá thể của điều khiển đó (bạn cũng có thể sử dụng các lớp phản chiếu Zend 2 để làm việc này), đặt đối tượng Properties lên điều khiển đó, và gọi ra phương thức execute() của trình điều khiển đó, nhận được một đối tượng đáp ứng Sau đó nó gọi phương thức respond() của đối tượng đáp ứng, chuyển tham số là chính nó trong trường hợp đối tượng đáp ứng cần đến Dãy lời gọi phương thức có chút tiến rồi lại lui này cho phép bạn thêm vào các kiểu đáp ứng khi cần thiết mà không bao giờ phải thay đổi execute() của trình điều khiển đó, nhận được một đối tượng đáp ứng Sau đó nó gọi phương thức respond() của đối tượng đáp ứng, chuyển tham số
là chính nó trong trường hợp đối tượng đáp ứng cần đến Dãy lời gọi phương thức
có chút tiến rồi lại lui này cho phép bạn thêm vào các kiểu đáp ứng khi cần thiết
mà không bao giờ phải thay đổi ActionDispatcher đấy là tinh thần lập trình hướng đối tượng
Trang 31Các đối tượng đáp ứng xác định thực chất phải làm gì để biểu hiện đáp lại: nó tạo
ra một lớp cho mỗi kiểu đáp ứng để biểu hiện trong ActionDispatcher.php, như trong Liệt kê 8
Liệt kê 8 Các lớp đáp ứng của ActionDispatcher
Trang 33}
Lớp ModelAndView cung cấp cùng một hành vi như ModelAndView của Spring Phương thức execute của điều khiển của bạn trả lại một đối tượng ModelAndView chứa đường dẫn tập tin của khung nhìn (view) để biểu hiện và một đối tượng mô hình nếu có, và khi ActionDispatcher gọi phương thức respond() của nó, respond() chỉ làm một việc tầm thường là gửi đi tệp tin khung nhìn tới cho trình xử lý PHP, bằng cách sử dụng phương thức include() Khung nhìn được gửi có quyền truy cập
vào các biến trong phạm vi của mã gọi ra, do đó bạn tạo ra một biến có tên $model
chứa đối tượng mô hình được cung cấp, đây là cái mà tất cả các khung nhìn mong đợi có thể tìm thấy (thậm chí nếu nó là rỗng)
Lớp ControllerForward là để dành cho một trình điều khiển làm một điều gì đó nhưng sau đó lại muốn chuyển điều khiển đến một trình điều khiển
ActionDispatcher khác Phương thức respond() của nó chỉ gọi lại
ActionDispatcher với khoá của trình điều khiển mới, khởi động một lần nữa toàn
bộ quá trình đối với trình điều khiển đó (nhưng không phải đọc lại tệp tin các thuộc tính)
Do tất cả các trình điều khiển phải cung cấp một phương thức execute() và để làm cho dễ dàng thêm các thuộc tính vào chúng, tất cả chúng sẽ đều là lớp con của lớp AbstractController (xem Liệt kê 9)
Liệt kê 9 AbstractController (PHP)
Trang 34
Sử dụng index.php để khởi động việc điều phối yêu cầu
Khi ActionDispatcher sẵn sàng xử lý các yêu cầu, nó cần phải được gọi ra Hãy tạo một tệp index.php tối thiểu, hành động như là điểm vào của hệ thống điều phối (xem Liệt kê 10)
Liệt kê 10 index.php
Trang 36biến yêu cầu trình điều khiển (controller), chứa khoá của điều khiển để tạo và gọi
ra
index.php đóng một vai trò tương tự như web.xml trong ứng dụng Web Java, chuyển toàn bộ kiểm soát đến một trình điều phối yêu cầu đơn lẻ cấu hình được; DispatcherServlet của Spring về phía Java, ActionDispatcher trong PHP
Tạo ra một proxy đảo ngược từ Apache đến máy chủ ứng dụng
Để ngăn cách thế giới bên ngoài khỏi việc sử dụng hai máy chủ, hãy sửa đổi
httpd.conf và sử dụng một tệp tin htaccess cho proxy từ Apache đến máy chủ ứng dụng WebSphere đối với các yêu cầu mà bạn đã thực hiện trong java Trước tiên, trong httpd.conf (C:\Program Files\Zend\Apache2\conf\httpd.conf), thực hiện hai thay đổi:
Trang 371 Đảm bảo rằng các dòng trong Liệt kê 11 đã được bỏ dấu chú thích (nghĩa
là, phải chắc chắn rằng chúng không bắt đầu bằng một #)
Liệt kê 11.Kích hoạt mod_rewrite và mod_proxy trong httpd.conf