Professional Documents
Culture Documents
Nội dung
Bộ môn Công nghệ Phần mềm 1. Struts là gì, tại sao sử dụng Struts?
Viện CNTT & TT 2. Kiến trúc của Struts
Trường Đại học Bách Khoa Hà Nội Controller
Model
View
LẬP TRÌNH WEB HƯỚNG JAVA
3. web.xml
Bài 19: Cơ bản về Struts 4. Internationalization
5. Input Validation
Giảng viên: ThS. Trịnh Tuấn Đạt 6. Xử lý lỗi
Bộ môn CNPM 7. Chọn View trả về
Email: trinhtuandat.bk@gmail.com/dattt@soict.hut.edu.vn
DatTT-DSE-SOICT-HUST 1 DatTT-DSE-SOICT-HUST 2
Jakarta Struts
Struts là một Web application framework mã
nguồn mở, là một phần của Apache Jakarta
1.1. Struts là gì? project
http://jakarta.apache.org/struts/
DatTT-DSE-SOICT-HUST 3 DatTT-DSE-SOICT-HUST 4
DatTT-DSE-SOICT-HUST 5 DatTT-DSE-SOICT-HUST 6
1
9/10/2011
DatTT-DSE-SOICT-HUST 9 DatTT-DSE-SOICT-HUST 10
1
Request
(Controller)
Servlet
BROWSER
Redirect 3 2
5 (View) (Model)
Java Bean
Response JSP 4
DatTT-DSE-SOICT-HUST 11 DatTT-DSE-SOICT-HUST 12
2
9/10/2011
DatTT-DSE-SOICT-HUST 15 DatTT-DSE-SOICT-HUST 16
DatTT-DSE-SOICT-HUST 17 DatTT-DSE-SOICT-HUST 18
3
9/10/2011
DatTT-DSE-SOICT-HUST 21 DatTT-DSE-SOICT-HUST 22
Thực hiện vai trò của Controller Chịu trách nhiệm khởi tạo và dọn dẹp tài
Xử lý các user requests nguyên
Xác định xem user cần gì, căn cứ ào request loads các cấu hình ứng dụng trong web.xml
nhận được Duyệt lần lượt các goes through an enumeration
Lấy dữ liệu từ model (nếu cần thiết), và of all init-param elements, looking for those
Lấy ra view phù hợp trả về cho người dùng elements who's name starts with config/ for
modules
Ủy nhiệm hầu hết những công việc này cho
Để truy cập vào module foo, sử dụng URL như:
lớp Action
http://localhost:8080/myApp/foo/someAction.do
DatTT-DSE-SOICT-HUST 23 DatTT-DSE-SOICT-HUST 24
4
9/10/2011
DatTT-DSE-SOICT-HUST 27 DatTT-DSE-SOICT-HUST 28
DatTT-DSE-SOICT-HUST 29 DatTT-DSE-SOICT-HUST 30
5
9/10/2011
processInclude processForwardConfig
Nếu mapping biểu diễn một include, include kết Cuối cùng, phương thức xử lý của
quả của việc gọi đến đường dẫn (path) trong RequestProcessor lấy về ActionForward trả về từ
request này lớp Action, và sử dụng nó để chọn ra resource
processActionCreate tiếp theo (nếu có).
Tạo một thực thể của lớp được đặc tả trong Thường ActionForward sẽ dẫn đến các trang
ActionMapping đang xét (nếu cần). trình diễn (presentation page), sinh ra response
trả về cho client.
processActionPerform
Là lúc mà phương thức perform() hoặc execute()
sẽ được gọi
DatTT-DSE-SOICT-HUST 31 DatTT-DSE-SOICT-HUST 32
DatTT-DSE-SOICT-HUST 33 DatTT-DSE-SOICT-HUST 34
DatTT-DSE-SOICT-HUST 35 DatTT-DSE-SOICT-HUST 36
6
9/10/2011
8. <form-bean name="submitForm"
9. type="submit.SubmitForm"/>
10. </form-beans>
DatTT-DSE-SOICT-HUST 37 DatTT-DSE-SOICT-HUST 38
<action-mappings>
1.<!-- ========== Action Mapping Definitions ============ -->
Mỗi phần tử <action> cần định nghĩa các thuộc 2. <action-mappings>
tính sau: 3. <action path="/submit"
path: Đường dẫn tới action (tương đối so với context 4. type="submit.SubmitAction"
5. name="submitForm"
của ứng dụng) (URI của request) 6. input="/submit.jsp"
type: Tên đầy đủ của lớp Action 7. scope="request"
8. validate="true">
name: Tên của phần tử <form-bean> sử dụng với 9. <forward name="success" path="/submit.jsp"/>
action này 10. <forward name="failure" path="/submit.jsp"/>
11. </action>
input: Tên của trang hiển thị khi có lỗi validate input
form 12. </action-mappings>
7
9/10/2011
DatTT-DSE-SOICT-HUST 43 DatTT-DSE-SOICT-HUST 44
DatTT-DSE-SOICT-HUST 45 DatTT-DSE-SOICT-HUST 46
8
9/10/2011
Model: ActionForm
2.<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
3.<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
4.<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
5.<html>
1.package submit;
6.<head><title>Submit example</title></head>
Ví dụ: submit.jsp
DatTT-DSE-SOICT-HUST 53 DatTT-DSE-SOICT-HUST 54
9
9/10/2011
DatTT-DSE-SOICT-HUST 55 DatTT-DSE-SOICT-HUST 56
DatTT-DSE-SOICT-HUST 57 DatTT-DSE-SOICT-HUST 58
DatTT-DSE-SOICT-HUST 59 DatTT-DSE-SOICT-HUST 60
10
9/10/2011
DatTT-DSE-SOICT-HUST 61 DatTT-DSE-SOICT-HUST 62
11
9/10/2011
(LTV viết)
(Advanced Struts)
DatTT-DSE-SOICT-HUST 67 DatTT-DSE-SOICT-HUST 68
DatTT-DSE-SOICT-HUST 69 DatTT-DSE-SOICT-HUST 70
12
9/10/2011
ActionForm Bean
Lưu ý ActionForm Bean là một Model component,
mặc dù nó chỉ biểu diễn dữ liệu nhập bởi người Struts Model Components
dùng
SystemState Bean
Chỉ là thuật ngữ mức khái niệm: Struts không System State Bean & Business
cung cấp các API lập trình logic Bean
BusinessLogic Bean
Chỉ là thuật ngữ mức khái niệm: Struts không
cung cấp các API lập trình
DatTT-DSE-SOICT-HUST 73 DatTT-DSE-SOICT-HUST 74
DatTT-DSE-SOICT-HUST 75 DatTT-DSE-SOICT-HUST 76
13
9/10/2011
View components
DatTT-DSE-SOICT-HUST 79 DatTT-DSE-SOICT-HUST 80
DatTT-DSE-SOICT-HUST 81 DatTT-DSE-SOICT-HUST 82
Với JSP:
6.<head><title>Submit example</title></head>
7.<body>
14
9/10/2011
Ví dụ: submit.jsp
1.<logic:present name="lastName" scope="request">
2.Hello
3.<logic:equal name="submitForm" property="age" value="a">
4. young
3. web.xml
5.</logic:equal>
6.<logic:equal name="submitForm" property="age" value="c">
7. old
8.</logic:equal>
9.<bean:write name="lastName" scope="request"/>
10.</logic:present>
11.</body>
12.</html>
DatTT-DSE-SOICT-HUST 85 DatTT-DSE-SOICT-HUST 86
Ví dụ: web.xml
1. <!-- Standard Action Servlet Mapping -->
2. <servlet-mapping>
3. <servlet-name>action</servlet-name>
4. <url-pattern>*.do</url-pattern>
5. </servlet-mapping>
4. Internationalization
6.
7. <!-- Struts Tag Library Descriptors -->
8. <taglib>
9. <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
10. <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
11. </taglib>
12. <taglib>
13. <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
14. <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
15. </taglib>
16. <taglib>
17. <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
18. <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
19. </taglib>
DatTT-DSE-SOICT-HUST 89 DatTT-DSE-SOICT-HUST 90
20.</web-app>
15
9/10/2011
Mở rộng của java.util.ResourceBundle Tạo resource file cho ngôn ngữ mặc định
org.apache.struts.util.MessageResources Tạo các resource files cho mỗi ngôn ngữ
Chỉ giới hạn hỗ trợ hiển thị. Nhập liệu tùy muốn hỗ trợ
theo thiết bị client Định nghĩa tên của các resource như các
Cấu hình resource bundles trong web.xml file tham số khởi tạo
Trong trang JSP
Sử dụng <html:errors/> để hiển thị các thông
báo lỗi theo locale
DatTT-DSE-SOICT-HUST 91 DatTT-DSE-SOICT-HUST 92
DatTT-DSE-SOICT-HUST 93 DatTT-DSE-SOICT-HUST 94
Ví dụ: web.xml
1. <servlet>
2. <servlet-name>action</servlet-name>
3. <servlet-class>
5. (Input) Validation
4. org.apache.struts.action.ActionServlet
5. </servlet-class>
6. <init-param>
7. <param-name>application</param-name>
8. <param-value>
9. com.mycompany.mypackage.MyApplication
10. </param-value>
11. </init-param>
12. <!-- ... -->
13.</servlet>
DatTT-DSE-SOICT-HUST 95 DatTT-DSE-SOICT-HUST 96
16
9/10/2011
DatTT-DSE-SOICT-HUST 97 DatTT-DSE-SOICT-HUST 98
12. </action-mappings>
13.</struts-config>
DatTT-DSE-SOICT-HUST 101 DatTT-DSE-SOICT-HUST 102
17
9/10/2011
Tự định nghĩa lớp ExceptionHandler, được Cấu hình bộ xử lý ngoại lệ trong struts-
gọi đến khi phương thức execute() của 1 config.xml
Action ném ra 1 Exception <global-exceptions>
<exception
Là lớp con của key="some.key"
org.apache.struts.action.ExceptionHandler type="java.io.IOException"
Phương thức execute() phải xử lý Exception và
handler="com.yourcorp.ExceptionHandler"/>
trả về 1 đối tượng ActionForward để thông báo </global-exceptions>
với Struts sẽ forward đến đâu tiếp
com.yourcorp.ExceptionHandler.execute() sẽ
được gọi khi có bất kỳ một IOException nào
DatTT-DSE-SOICT-HUST 107
được ném ra bởi một Action
DatTT-DSE-SOICT-HUST 108
18
9/10/2011
action
4.public final class SubmitAction extends Action {
5. public ActionForward execute(ActionMapping mapping,
6. ActionForm form,
7. HttpServletRequest request,
8. HttpServletResponse response) {
<action ...> 9. SubmitForm f = (SubmitForm) form; // get the form bean
<exception 10.
11.
// and take the last name value
String lastName = f.getLastName();
key="some.key" 12. if (lastName.startsWith(“Passion”)){
13. // Translate the name to upper case
type="java.io.IOException" 14. //and save it in the request object
15. request.setAttribute("lastName", lastName.toUpperCase());
16. // Forward control to the specified success target
17. return (mapping.findForward("success"));
handler="com.yourcorp.ExceptionHandler"/> 18. }
19. else{
</action> 20. throw new WrongLastNameExcetion(lastName);
21. }
22. }
DatTT-DSE-SOICT-HUST 109 DatTT-DSE-SOICT-HUST 110
23.}
forward tới” nhờ thẻ con <forward>, con của thẻ 3. <action path="/submit"
4. type="hansen.playground.SubmitAction"
<action> hoặc thẻ <global-forwards> 5. name="submitForm"
6. input="/submit.jsp"
Trong phương thức execute() của lớp Action, 7. scope="request"
8. validate="true">
Trả về đối tượng ActionForward, ứng với 9. <forward name="success" path="/submit.jsp"/>
outcome nào. 10. <forward name="failure" path="/submit.jsp"/>
11. </action>
12. </action-mappings>
13.</struts-config>
DatTT-DSE-SOICT-HUST 113 DatTT-DSE-SOICT-HUST 114
19
9/10/2011
2.import javax.servlet.http.*;
3.import org.apache.struts.action.*;
20