Để Struts2 có thể hoạt động được chúng ta phải cấu hình cho nó. Cấu hình struts2 được cấu hình trong một số tệp tin cấu hình quan trọng sau:
- web.xml
- struts.xml
- struts-config.xml
- struts.properties
Thực tế, chỉ cần cấu hình Struts2 trong 2 tệp cấu hình web.xml và struts.xml là Struts2 đã có thể hoạt động được như trong bài Hello World trong Struts2.
Trong bài này chúng ta sẽ tìm hiểu thêm 2 tập tin cấu hình struts-config.xml và struts.properties.
Nội dung chính
Tệp web.xml
Tệp cấu hình web.xml là tệp cấu hình J2EE xác định cách các thành phần của yêu cầu HTTP được xử lý bởi servlet container. Nó không phải là tập tin cấu hình Struts2, nhưng nó là một tệp tin cần được cấu hình để Struts2 hoạt động.
Tệp tin này như một cánh cổng cho bất kỳ ứng dụng web nào. Tệp web.xml cần phải được tạo trong thư mục WebContent/WEB-INF.
Dưới đây là một ví dụ được định nghĩa trong bài Hello World trong Struts2.
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>struts2-helloworld</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- STRUTS2 DEFINITION --> <filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.FilterDispatcher </filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Lưu ý: chúng ta ánh xạ bộ lọc Struts2 đến /*, và không phải để /*.action nghĩa là tất cả các url sẽ được phân tích cú pháp bởi bộ lọc struts. Vấn đền này được giải thích trong bài Annotations trong Struts2.
Xem chi tiết về việc cấu hình cho các version khác của Struts2 tại đây: https://struts.apache.org/docs/webxml.html
Tệp struts.xml
Tệp struts.xml chứa thông tin cấu hình mà bạn sẽ sửa đổi khi thêm các action mới. Tập tin này có thể được sử dụng để ghi đè cài đặt mặc định cho một ứng dụng, ví dụ struts.devMode = false và các thiết lập khác được định nghĩa trong tệp thuộc tính. Tập tin này có thể được tạo ra trong thư mục WEB-INF/classes. Trong eclipse các bạn chỉ cần tạo file struts.xml ở thư mục source gốc của project, chẳng hạn như "src".
Dưới đây là tệp struts.xml chúng ta đã tạo ra trong bài ví dụ Hello World.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="vn.viettuts.action.HelloWorldAction" method="execute"> <result name="success">/HelloWorld.jsp</result> </action> <!-- more actions can be listed here --> </package> <!-- more packages can be listed here --> </struts>
Các thẻ trong Struts.xml
Điều đầu tiên cần lưu ý là DOCTYPE. Tất cả các tệp cấu hình struts cần phải có đúng loại tài liệu như trong ví trên. <Struts> là phần tử thẻ gốc, tiếp đó là các thẻ <package>. Ở đây <package> cho phép tách và mô đun hóa cấu hình. Điều này rất hữu ích khi bạn có một dự án lớn và dự án được chia thành các mô-đun khác nhau.
Thẻ package
Giả sử, nếu dự án của bạn có ba miền - business_applicaiton, customer_application và staff_application, bạn có thể tạo ra ba package và lưu các action liên quan trong package phù hợp. Thẻ package có các thuộc tính sau:
Thuộc tính | Miêu tả |
---|---|
name (yêu cầu) | Mã nhận dạng duy nhất cho package. |
extends | Được sử dụng để mở rộng package từ một package. Theo mặc định, chúng tôi sử dụng struts-default là package cơ sở. |
abstract | Nếu được đánh dấu true, package không có sẵn cho người dùng cuối. |
namespace | Không gian tên duy nhất cho các action. |
Thẻ constant
Thẻ constant cùng với tên và giá trị thuộc tính sẽ được sử dụng để ghi đè lên bất kỳ thuộc tính sau đây quy định tại default.properties, giống như chúng ta chỉ cần cài đặt thuộc tính struts.devMode. Thiết lập thuộc tính struts.devMode cho phép chúng ta xem thêm các thông báo gỡ lỗi trong tệp log.
Thẻ action
Chúng ta định nghĩa các thẻ action tương ứng với mọi URL mà chúng ta muốn truy cập và chúng ta định nghĩa một lớp với phương thức execute() sẽ được thực thi bất cứ khi nào chúng ta sẽ truy cập URL tương ứng.
Kết quả xác định những gì được trả lại cho trình duyệt sau khi một action được thực thi. Chuỗi trả lại từ action phải là tên của một kết quả. Các kết quả được cấu hình theo action như trên, hoặc như một kết quả "global", có sẵn cho mọi action trong một package. Kết quả có các thuộc tính name và type tùy chọn. Giá trị tên mặc định là "success".
Mô đun tệp Struts.xml
Tệp Struts.xml có thể phát triển theo thời gian và do đó việc sử dụng package là một cách để mô đun hóa, nhưng struts cung cấp một cách khác để mô đun tệp struts.xml. Bạn có thể chia tệp thành nhiều tệp xml và nhập chúng theo cách sau.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <include file="my-struts1.xml"/> <include file="my-struts2.xml"/> </struts>
Tệp struts-config.xml
Tệp cấu hình struts-config.xml là liên kết giữa các thành phần View và Model trong Web Client nhưng bạn sẽ không phải đụng vào các cài đặt này. Các tập tin cấu hình cơ bản có chứa các yếu tố chính sau đây:
No. | Interceptor và mô tả |
---|---|
1 | Struts-config
Đây là nút gốc của tệp cấu hình. |
2 | Form-beans
Đây là nơi bạn ánh xạ lớp con của ActionForm vào một tên. Bạn sử dụng tên này làm bí danh cho ActionForm của mình trong suốt phần còn lại của tệp struts-config.xml và ngay cả trên các trang JSP của bạn. |
3 | global forwards
Phần này sẽ ánh xạ một trang trên webapp của bạn vào một tên. Bạn có thể sử dụng tên này để tham khảo trang thực. Điều này tránh các URL mã hoá trên các trang web của bạn. |
4 | action-mappings
Đây là nơi bạn khai báo xử lý biểu mẫu và chúng còn được gọi là action-mappings. |
5 | controller
Phần này cấu hình Struts nội tại và hiếm khi được sử dụng trong các tình huống thực tế. |
6 | plug-in
Phần này nói với Struts nơi tìm các tệp thuộc tính của bạn, có chứa các nhắc nhở và thông báo lỗi |
Sau đây là tệp struts-config.xml mẫu:
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd"> <struts-config> <!-- ========== Form Bean Definitions ============ --> <form-beans> <form-bean name="login" type="test.struts.LoginForm"/> </form-beans> <!-- ========== Global Forward Definitions ========= --> <global-forwards> </global-forwards> <!-- ========== Action Mapping Definitions ======== --> <action-mappings> <action path="/login" type="test.struts.LoginAction" > <forward name="valid" path="/jsp/MainMenu.jsp"/> <forward name="invalid" path="/jsp/LoginView.jsp"/> </action> </action-mappings> <!-- ========== Controller Definitions ======== --> <controller contentType="text/html;charset=UTF-8" debug="3" maxFileSize="1.618M" locale="true" nocache="true"/> </struts-config>
Tập tin struts.properties
Tập tin cấu hình này cung cấp một cơ chế để thay đổi hành vi mặc định của framework. Trên thực tế tất cả các thuộc tính chứa trong tệp tin cấu hình struts.properties cũng có thể được định cấu hình trong web.xml sử dụng init-param, cũng như sử dụng thẻ constant trong tệp tin cấu hình struts.xml. Nhưng nếu bạn muốn giữ những thứ tách biệt và cụ thể thì bạn có thể tạo tập tin này trong thư mục WEB-INF/classes.
Các giá trị được cấu hình trong tệp này sẽ ghi đè các giá trị mặc định được định cấu hình trong default.properties chứa trong thư viện struts2-core-xyzjar. Có một vài thuộc tính mà bạn có thể xem xét thay đổi bằng cách sử dụng tệp struts.properties:
### When set to true, Struts will act much more friendly for developers struts.devMode = true ### Enables reloading of internationalization files struts.i18n.reload = true ### Enables reloading of XML configuration files struts.configuration.xml.reload = true ### Sets the port that the server is run on struts.url.http.port = 8080
Ở đây mọi dòng bắt đầu bằng dấu thăng(#) sẽ được giả định như là một comment và nó sẽ bị bỏ qua bởi Struts2.
Tệp struts-default.xml
Các tập tin cấu hình khác là struts-default.xml. Tệp này chứa cài đặt cấu hình chuẩn cho Struts và bạn sẽ không phải đụng vào các cài đặt này cho 99,99% dự án của mình. Vì lý do này, chúng tôi sẽ không đưa ra quá nhiều chi tiết về tệp này. Nếu bạn quan tâm, hãy xem tệp tin default.properties có sẵn trong thư viện struts2-core-2.3.3.jar.