Tải bản đầy đủ (.doc) (50 trang)

BÁO CÁO SEMINAR STRUTS 2 pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (566.53 KB, 50 trang )

TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO SEMINAR STRUTS 2
Bộ môn Chuyên Đề Java
Giáo Viên Hướng Dẫn
Thầy : Ngô Bá Nam Phương
Nhóm Thực Hiện
MSSV Họ Tên
0512007 Lê Văn Bình
0512337 Trương Trung Thế
0512386 Lê Cung Tưởng
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
Mục lục


 !"
#$%"
%"
&$%'%()*%+,
-.%/0*123!$%4
-.%/$%5%()*%+4
67%89%(:(%*!$%5%()*%+;
<$%%=>(?(@
<%A%*B(@
-?7*$%
-?7* C!8D
?-?7* C!E*F*
EF*0G("
EF*"
G("


7*1%(%H%I"
J(A(%G(,
?G( %(EF*G(,
G(,
G( %(G(4
Struts 2 Page 
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
('%((+(%G(4
5(*KG(4
!LM(8G(;
M(G(;
NOAN( (%G(;
B$%(G(@
+P$G(@
*?G(
*G(Q
M(%(A*%
J77(%(A*% R!I
*3(%(A*%D
7M!%*!%
'SGME$
T!$%M!
?**EO%?(
M('*%M!"
M((8U( VA)*% V (M!,
(M(?M!,
5M(%((M!,
M(?(M!4
?M(( !4

M((8(%(!4
M((+?*8M!4
Struts 2 Page D
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
(M(V-(KV (O%?(4
5M(% *M!;
!M(((M!;
$((SAF*%*A!)*A!%*A;
$((SAF*%*A!)*A!%*AD@
BM(*?*?*8M!D@
+M(A *)((M!D@
W>WGME$D
M(A%*A(%KM!D
?M(M!D
M(F*M!D
M(A%M!D
(M(?(M!D
5M( (M!DD
!M( (M!DD
M((M!DD
M(AM!DD
BM(%M!DX
+M(5V((V ((5M!DX
M((%*%M!D
M(AA( M!D
M((%!(M!D"
*M(!((%*%M!D"
AM(*%M!D,
Struts 2 Page X

Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
:M(?(M!D,
PEB80$%D,
M(N( M!D,
M(JM!D4
DM(M!D;
XM($?M!X
M(Y M!XD
"M( (F(A+(%M!XX
,M(??( A(M!X
4M((8%(M!X,
;M(**A((%M!X,
@M(%(( %((* (M!X;
PM0+Z*@
I. Giới thiệu mô hình MVC
- MVC viết tắt từ cụm từ Model-View-Controller
- MVC lần đầu được sử dụng vào năm 1979 trong ứng dụng Smalltalk.Nó được phát
triển bởi Trygve Reenskaug
- Ngày nay với sự phát triển của công nghệ,một ứng dụng có thể được tách thành nhiều
phần (layer) và chúng được chạy ở trên nhiều máy tính khác nhau,chẳng hạn như: tầng
giao diện (The presentation/User Interface) ,tầng nghiệp vụ (Business logic/Controller),
tầng truy xuất dữ liệu (data access model). Mô hình MVC ra đời để đáp ứng cho những
yêu cầu trên,và nó được chọn làm kiến trúc triển khai trên các ứng dụng web application.
- Trong ứng dụng web application thì:
+ Tầng View: là các trang HTML/XHTML
+ Tần Controller: đóng vai trò trung gian trong việc bắt sự kiện (event) do người dùng
tương tác trên tầng giao diện (View Layer),sau đó ứng với các sự kiện này nó sẽ đánh
thức các xử lý nghiệp vụ tương ứng ở tầng nghiệp vụ (Model Layer).Kết quả nhận được
sau khi xử lý sẽ được gửi trả lại tầng giao diện

Struts 2 Page 
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
+ Tầng Model: đóng vai trò trong việc xử lý tất cả các thao tác nghiệp vụ,từ việc truy
xuất cơ sở dữ liệu,tính toán kết quả trả về…
- Một số framework sử dụng mô hình MVC: Swing, Struts, Tapestry, Spring MVC
Framework, ASP.NET MVC Framework, PureMVC Framework for Actionscript,
CakePHP…
1. Lợi ích của việc sử dụng mô hình MVC
Tách biệt rõ ràng nhiệm vụ của từng layer: model-view-controller => giúp cho
việc phân công công việc trong nhóm (work team) được dễ dàng.
- Mang lại hiệu quả cao trong việc tổ chức và tái sử dụng lại code.Chẳng hạn như
với kiến trúc tổ chức của model thì kết quả trả về là trung lập,nó không theo 1
chuẩn formatting (danh sách chuỗi,XML,JSON…) nào cả => có thể tái sử dụng
lại cho các tầng View ở ứng dụng khác.
- Tính dễ thay đổi (modifiability) tầng View hay tầng Model nếu có nhu cầu vì
mỗi tầng nay hoàn toàn tách biệt và không có mối ảnh hưởng ràng buộc với nhau.
- Thông thường,HTTP protocol truyền tham số request theo kiểu chuỗi thông
thường,và chuỗi này phải được chuyển đổi (convert) sang các định dạng (format)
thích hợp tùy theo mỗi ứng dụng.Công việc này đòi hỏi tốn nhiều thời gian và dễ
gây ra lỗi.Với kiến trúc Model của mô hình MVC,dữ liệu này sẽ tự động được
convert thành giá trị của các biến thuộc tính trong lớp đối tượng.
II. Giới thiệu về Struts 2
1. Giới thiệu struts 2
- Vào tháng 12/2005,Struts và webwork framework đã được kết hợp với nhau để phát triển nên
Struts 2 Framework. Struts 2 Framework rất thích hợp và dễ dàng mở rộng để phát triển các ứng
dụng web với mức độ khác nhau
- Trang chủ: />- Apache Struts 2 requires:
• Servlet API 2.4
• JSP API 2.0

• Java 5
Struts 2 Page "
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
2. Ích lợi của Struts 2 Framework
Struts 2 được xây dựng và phát triển dựa trên nền tảng mô hình MVC nên nó thừa
hưởng được đầy đủ các ưu điểm mà mô hình MVC đem lại.
- Dễ dàng tùy chỉnh (customize) chu kỳ xử lý (request lifecycles ) cho từng action
- Giải quyết hiệu quả vấn đề internationlization và localization trong các ứng
dụng web
- Tự động chuyển đổi kiểu dữ liệu chuỗi truyền thống trong tham số request
parameter thành các đối tượng lớp dữ liệu java => tiết kiệm được thời gian và
công sức cho các lập trình viên
- Cung cấp các thẻ tag,các themes và templates giúp cho việc làm giao diện GUI
trở nên dễ dàng,nhanh lẹ và tăng tính tái sử dụng.
- Tính mở rộng (Extensibility) cao thông qua việc hỗ trợ các plug-in
- Hỗ trợ portal
- Hỗ trợ AJAX
- Dễ dàng tích hợp với Spring framework và Hibernate.
Struts 2 Page ,
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
III. Kiến trúc và hoạt động của Struts 2
1. Kiến trúc của Struts 2 framework
Hình 1: Kiến Trúc Của Struts 2 Framework
i. ActionContextCleanup : là tùy chọn và được sử dụng khi tích hợp với các
công nghệ như SiteMash Plugin.
ii. FilterDepatcher: là bộ lọc nó Sử dụng ActionMapper để xác định xem
Action nào được call và sau đó giao quyền lại cho ActionProxy
iii. ActionProxy: lấy những action từ struts.xml qua sự giúp đỡ của

ConfigurationManager từ đó tạo ra những ActionInvocation thực hiện gọi Action
mà ta đã config trong struts.xml trước đó nó gọi tới những interceptor (nếu được
config). Và sau đó lấy về kết quả thích hợp tái tạo lại các trang jsp theo mẫu nào
đó và trả về lại cho người dùng.
iv. Action là một lớp do developer tự định nghĩa, đây là lớp làm việc cơ bản , Là
một POJO (Plain old java object) có phương thức execute() .
Struts 2 Page 4
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
v. Template: chứa kết quả trả về cho người dùng. Trong Struts2 nó là những
result của Action được config trong struts.xml. Có một số loại result sau:
• Chain Result
• Dispatcher Result
• FreeMarker Result
• HttpHeader Result
• Redirect Result
• Redirect Action Result
• Stream Result
• Velocity Result
• XSL Result
• PlainText Result
2. Quá trình xử lý request trong Struts2 framework
a. Người sử dụng gửi yêu cầu đến server để yêu cầu một số tài nguyên của ứng
dụng
b. Bộ điều khiển lọc (FilterDispatcher) xem xét yêu cầu và sau đó xác định một
Action thích hợp
c. Các bộ chặn (Interceptors) được ứng dụng: các cấu hình bộ chặn áp dụng cho
các chức năng chung như: luồng công việc, thẩm định, tải file … được tự động
ứng dụng vào yêu cầu
d. Thực thi Action: sau khi phương thức action được thực thi để thực hiện các

hoạt động liên quan đến cơ sở dữ liệu như sắp xếp hoặc nhận dữ liệu từ cơ sở dữ
liệu
e. Sinh kết quả
f. Sau đó kết quả yêu cầu được trả về thông qua bộ chặn theo chiều ngược lại. Kết
quả trả về cho phép chúng ta thực hiện thu dọn hoặc thêm quá trình xử lý
g. Hiển thị kết quả cho người sử dụng: việc điều khiển cuối cùng được trả về cho
trình chứa servlet, nó sẽ gửi kết quả trả về cho trình duyệt của người sử dụng
Struts 2 Page ;
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
Hình 2: Tổng quan xử lý request trong Struts 2
Hình 3: Xử lý request trong Struts 2
IV. Cấu hình Struts 2 trên Netbeans
1. Cấu hình struts 2 project
Một project của Struts 2 trên netbeans IDE cũng như bao project Web khác trên Netbeans
nhưng có thêm một số phần quan trọng để cấu hình cũng như là thư viện để struts 2 hoạt
động. Để cấu hình cho struts hoat động thì đầu tiên phải tạo một project bình thường và
Struts 2 Page @
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
server của struts 2 chính là Tomcat và framework thì ta không chọn. Sau đó download thư
viện struts 2 về.
Bước tiếp theo thực hiện giải nén file thư viện struts ra một nơi nào đó trên ổ cứng. Và thực
hiện add thư viện vào project của mình. Đối với một project Struts 2 đơn giản ta chỉ cần add
các file .jar sau : commons-logging-1.0.4.jar, ognl-2.6.11.jar, xwork-2.0.4.jar, freemarker-
2.3.8.jar, struts2-core-2.0.11.jar là đủ khi cần ta có thể add thêm các thư viện khác.
Ta đã xong phần add thư viện cho project struts 2.
Bước tiếp ta thực hiện tạo các file cấu hình là struts.xml trong package source, và chỉnh lại
file cấu hình web.xml và thêm file applicationContext.xml trong package WEB-INF
Để struts 2 hoạt động thì bạn phải viết lại file web.xml như sau:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="
xmlns:xsi="
xsi:schemaLocation="
/> <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>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
Struts 2 Page 
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Tiếp đến là file Struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
" /><struts>

<package name = "packagename" extends="struts-default">
<!—thêm những action hay interceptor vào đây >
</package>
</struts>
Và nội dung file applicationContext.xml sẽ là:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
" /><beans default-autowire="autodetect">
<! add your spring beans here >
</beans>
2. Khai báo Struts 2
Có 2 cách để thực hiện khai báo cho struts2 là dùng xml để khai báo và dùng Annotation
để khai báo. Sau đây là 2 cách khai báo đó trên môi trường của Netbeans
Struts 2 Page 
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
Hình 4 Khai báo struts 2
a. Khai báo dùng xml
Để hiểu hơn về cách cấu hình này thì chúng ta sẽ xem qua ví dụ sau:
<action name="Login" class="manning.Login">
<result>/AccountPage.jsp</result>
<result name="input">/Login.jsp</result>
</action>
<action name="Registration" >
<result>/Registration.jsp</result>
</action>
<action name="Register" class="manning.Register">
<result>/RegistrationSuccess.jsp</result>
<result name="input">/Registration.jsp</result>
</action>

i. Action
- Trong cách khai báo trên thì ứng với mỗi action ta sẽ khai báo trong thẻ
“action” trong thẻ action thì có các thuộc tính như
• Name: là tên của action mà ta sẽ gọi
• Class : là ActionClass thực hiện xử lý action trên
• Method: nếu người dùng không khai báo attribute method này thì
đồng nghĩa với việc Struts sẽ chọn phương thức execute trong
ActionClass mà thực hiện. Còn nếu người dùng khai báo chổ này thì
Struts 2 Page D
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
Struts sẽ lấy phương thức được khai báo để thực hiện sử lý cho
action đó.
- Ngoài method như trên còn có một dạng gọi là WildCard method.
o Đôi khi ta thao tác trên một đối tượng có một tập các action ví dụ
như SinhVien có các action mà người dùng thường sử dụng như là
delete, insert , update, … thì ta có một cách đơn giản để khai báo
mapping cho action là dùng wildcard method.
o Cách khai báo
 <action name=”*ActionName” class=”ClassAction”
method=”{1}”>….</action>
 <action name=”ActionName_*” class=”ClassAction”
method=”{1}”>….</action>
o Cách sử dụng:
 <s:form action=”deleteAction.action”>…</s:form>
 <s:form action=”Action_delete.action”>…</s:form>
 Với delete là một phương thức trong ClassAction.
- Thỉnh thoảng thì chúng ta khai báo một action nhưng action đó không tồn tại
nên struts sẽ báo lỗi, Chúng ta không muốn đều này xảy ra vì thế mà struts
cung cấp thêm cho chúng ta cách config một action gọi là Default action để

khi struts thực hiện mapping mà không tìm thấy action nào phù hợp nó sẽ
thực hiện action default này.
<package name="Hello" extends="action-default">
<default-action-ref name="UnderConstruction">
<action name="UnderConstruction">
<result>/UnderConstruction.jsp</result>
</action>
ii. Result
- Trong thẻ action còn có thẻ con là result.
• Khi 1 Action được thực hiện thành công, nó sẽ trả về 1 chuỗi.
• Giá trị của chuỗi được sử dụng để chọn thành phần kết quả
• 1 action mapping sẽ thường có 1 tập thể hiện các kết quả khác nhau
có thể xảy ra.
• Có các tên kết quả đã được xác định trước(tokens)
• ›ng dụng có thể định nghĩa các tên kết quả khác(token) để khớp với
1 số trường hợp mong muốn.
- Result định nghĩa trước gồm:
• String SUCCESS = "success";
• String NONE = "none";
• String ERROR = "error";
• String INPUT = "input";
• String LOGIN = "login";
- Result Element:
Struts 2 Page X
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
• Name: tên result là giá trị trả về khi action thực hiện , nó có thể là
tokens có sẳn hoặc là một tokens do mình định nghĩa.
• Type :kiểu result quy định kiểu result : depatcher, chain… Nếu
người dùng không khai báo thì struts sẽ lấy mặt định là depatcher.

• Có 3 cách để khai báo result:
o Khai báo không dùng type là default
<result name="success" type="dispatcher">
<param name="location">/ThankYou.jsp</param>
</result>
o Khai báo sử dụng type defaults
<result>
<param name="location">/ThankYou.jsp</param>
</result>
o Khai báo sử dụng type default, param cũng default
<result>/ThankYou.jsp</result>
b. Khai báo dùng Annotation
Đối với cách khai báo dùng Annotations thì ta sẽ xem xét ví dụ sau
@Results({
@Result(name="input", value="/RegistrationSuccess.jsp" )
@Result(value="/RegistrationSuccess.jsp" )
})
public class Login implements Action {
public String execute() {
//Business logic for login
}
}
Đây là cách khai báo trong lúc cài đặt ActionClass.
Trong 2 cách trên người ta thường dùng nhất là cách dùng XML để cấu hình. Có
một số người thì quen sử dụng các công nghệ cũ chỉ thực hiện cấu hình trên
XML thì sẽ nhanh chóng tiếp cận hơn là cách dùng Annotation.
Struts 2 Page 
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
V. Actions và Results

1. Actions
Khi một request được gởi từ phía người dùng đến server thì nó sẽ được ánh xạ thành một
action tương ứng (do mình cấu hình). Và action này sẽ được controller điều hướng cho
một classAction tương ứng thực thi (do chúng ta cấu hình).
• ActionClass : Nó là đơn vị làm việc cơ bản. Nó là một POJO mà có thêm phương
thức execute(). Thường thì ActionClass được kế thừa từ lớp ActionSupport.
• ActionSupport: nằm trong package: com.opensymphony.xwork2. ActionSupport nó
được implement từ lớp Action, LocaleProvider, TextProvider, Validateable,
ValidationAware . Nó có một số thuộc tính final kế thừa từ lớp Action và được xem
như là kết quả trả về từ action : ERROR, INPUT, LOGIN, NONE, SUCCESS. Có
phương thức chủ yếu là execute() ,và một số phương thức tham khảo tại nguồn.
2. Results
Không giống như Struts1 kết quả của một action là một ActionForward. Trong Struts2 khi
một phương thức thực thi một action hoàn thành thì kết quả nó trả về là một chuỗi và tùy vào
chuỗi này mà ta có thể cấu hình để struts mapping với một tập các thể hiện của kết quả trả về
cho người dùng
Các loại results struts hỗ trợ sẵn
• Depatcher Result.
• Redirect Action Result
• Chain Result
• Redirect Result
• FreeMaker Result
• Velocity Result
• Plain Text Result
• Tiles Result
• HttpHeader Result
• Stream Result
• Global Result
Struts 2 Page "
Trường Đại Học Khoa Học Tự Nhiên

Khoa Công Nghệ Thông Tin
a. Depatcher Result
Thực hiện include hoặc là forward đến một view thường là một trang jsp. Nếu trong quá
trình khai báo mà ta không khai báo loại result thì mặc định Struts sẽ hiểu result theo kiểu
Depatcher
VD:
<result name="success" type="dispatcher">
<param name="location">foo.jsp</param>
</result>
b. Redirect Action Result
Kết quả trả sau khi thực hiện action sẽ sử dụng ActionMapper để redirect để thực hiện
một action khác
Tham số:
• actionName : là tên action sẽ redirect tới
• namespace: là namespace chứa actionName. Nếu namespace là null thì Struts
xem actionName nằm trong cùng namespace với action gọi nó.
VD: <package name="public" extends="struts-default">
<action name="login" class=" ">
<result type="redirect-action">
<param name="actionName">dashboard</param>
<param name="namespace">/secure</param>
</result>
</action>
</package>
<package name="secure" extends="struts-default" namespace="/secure">
<action name="dashboard" class=" ">
<result>dashboard.jsp</result>
<result name="error" type="redirect-action">error</result>
</action>
<action name="error" class=" ">

<result>error.jsp</result>
</action>
</package>
c. Chain Result
Result này sẽ call đến toàn một action khác với toàn bộ interceptor stack và result của
chính bản thân nó.
Cách khai báo hoàn toàn giống với redirect action result chỉ thay chổ type là chain.
Tham số:
• actionName: là action sẽ chuyển hướng đến
Struts 2 Page ,
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
• namespace: là namespace chứa actionName, nếu là null thì là trong cùng
namespace với action hiện tại
• method: là phương thức sẽ được gọi ở class Action của action đích. Nếu không
khai báo thì sử dụng phương thức execute.
• skipAction: danh sách các action cách nhau bởi dấu “,” là những action có thể
được chuyển hướng đến
VD:
<action name=”login” class=”…”>
<result>/success.jsp</result>
<result name=”error” type=”chain”>error</result>
</action>
<action name=”error” class=”…”>
<result>error.jsp</result>
</action>
d. Redirect Result
Result này sẽ thực hiện redirect browser tới một vị trí/ trang khác . tương tự như
HttpServletSponse.sendRedirect(url).
Tham số

• location : là vị trí cần redirect tới
VD:
<result name="success" type="redirect">
<param name="location">foo.jsp</param>
<param name="parse">false</param>
</result>
e. FreeMaker Result
Sẽ render một view sữ dụng template FreeMaker
Tham số
• Location : nơi lưu template
• contentType: loại nội dung. Mặc định là “text/html”
• writeIfCompleted – (mặc định là false), write vào stream khi và chỉ khi không có
lỗi nào trong quá trình xử lý mẫu. Cài đặt template_exception_handler=rethrow
trong freemarker.properties sẽ có hiệu quả tương tự.
VD:
<result name="success" type="freemarker">foo.ftl</result>
f.Velocity Result
Giả lập một môi trường thực thi jsp và hiển thị theo mẫu Velocity
Tham số:
• location : là vị trí mẫu để thực hiện xử lý
VD:
<result name="success" type="velocity">
<param name="location">foo.vm</param>
Struts 2 Page 4
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
</result>
g. Plain Text Result
Result này thực hiện trả về nội dung theo định dạng text bình thường. Thường được
sử dụng khi muốn thể hiện một trang web dưới dạng text bình thường.

Tham số:
• Location : vị trí file cần show nội dung
• charSet: tập ký tự được sữ dụng
VD:
<action name="displayJspRawContent" >
<result type="plaintext">
<param name="location">/myJspFile.jsp</param>
<param name="charSet">UTF-8</param>
</result>
</action>
h. Tiles Result
Đây là một plugin trong struts, tạo thuận tiện cho việc tái sữ dụng mã html
i. HttpHeader Result
Là một custom Result cài đặt trang thái và header của HTTP bằng cách tùy chọn giá
trị của valueStack. Thường được dùng để thông báo lỗi cho người dùng.
Tham số
• status - http servlet trả về mã trạng thái mà sẽ được thiết lập trên một
response.
• headers – giá trị header.
• error - http servlet trả về mã lỗi mà sẽ được thiết lập trên một response.
• errorMessage – thông điệp lỗi để thiết lập trên response nếu tham số 'error'
được thiết lập.
VD:
<result name="success" type="httpheader">
<param name="status">204</param>
Struts 2 Page ;
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
<param name="headers.a">a custom header value</param>
<param name="headers.b">another custom header value</param>

</result>
<result name="proxyRequired" type="httpheader">
<param name="error">305</param>
<param name="errorMessage">this action must be accessed through a
prozy</param>
</result>
j.Stream Result
Một loại Result tùy chọn để gửi dữ liệu thô (thông qua InputStream) trực tiếp đến
HttpResponse. Rất hữu ích cho phép người sử dụng tải nội dung.
Tham số
• contentType – mặc định là text/plain.
• contentLength – độ dài bytes.
• contentDispostion – giá trị các bố trí nội dung header để chỉ ra tên file (mặc định
= inline, các giá trị đặc trưng filename="document.pdf".
• inputName – tên của thuộc tính InputStream từ action chuyển đến (mặc định =
inputStream).
• bufferSize – kích thước của bộ đệm để copy từ input vào output (mặc định =
1024).
VD:
<result name="success" type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">imageStream</param>
<param name="contentDisposition">filename="document.pdf"</param>
<param name="bufferSize">1024</param>
</result>
k. XSL Result
XSL Result sử dụng XSLT để chuyển một đối tượng action sang XML. Những phiên
bản mới đây đã được thay đổi đặc tả để thỏa mãn với các luật Xalan.
Tham số
• location (default) – nơi đến sau khi thực thi.

Struts 2 Page @
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
• matchingPattern – mẫu chỉ kết hợp với các phần tử mong muốn, mặc định nó kết
hợp với mọi thứ.
• excludingPattern – mẫu loại bỏ các phần tử không mong muốn, mặc định không
có gì.
l.Global Result
Loại kết quả này thường được dùng khi kết quả này được gán cho nhiều action khác
nhau thì nếu ta khai báo trong mỗi action thì trở thành dư thừa do đó ta khai báo
một lần và khi action thực hiện nếu trả ra đúng với một token nào đó thì result
này sẽ được gọi
VD:
<global-results>
<result name="error">/Error.jsp</result>
</global-results>
Lúc này khi bất kì action nào trả về chuỗi error thì sẽ thực hiện depatcher tới
Error.jsp
m. Custom Result:
Ngoài các Result trên thì developper có thể tự tạo cho mình một Result.
Để custom một Result thì tạo một class và nó implement từ interface
com.opensymphony.xwork2.Result có phương thức exectue.
VI. Giới Thiệu Interceptors
Interceptor là một phần rất quan trọng trong Struts2 nó được cấu hình để thực hiện các chức năng
như workflow, validation, upload file,…
Khi được config thì khi một action triệu gọi nó sẽ qua các bộ interceptor nếu không bị interceptor
điều hướng thì nó sẽ thực hiện action được gọi sau đó sẽ trả về kq và qua interceptor một lần nữa
nhưng theo chiều ngược lại sau đó trà kết quả về cho người dùng.
Struts 2 Page 
Trường Đại Học Khoa Học Tự Nhiên

Khoa Công Nghệ Thông Tin
Hình 5 : Interceptor trong Action Life Circle
1. Danh sách các Interceptor dựng sẵn
Interceptor Name
Alias Interceptor alias
Chaining Interceptor chain
Checkbox Interceptor checkbox
Cookie Interceptor cookie
Conversion Error Interceptor conversionError
Create Session Interceptor createSession
Debugging Interceptor debugging
Execute And Wait Interceptor execAndWait
Exception Interceptor exception
File Upload Interceptor fileUpload
I18N Interceptor i1n8
Struts 2 Page 
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
Logger Interceptor logger
Message Store Interceptor store
Model Driven Interceptor modelDriven
Scoped Model Driven Interceptor scopedModelDriven
Parameters Interceptor params
Prepare Interceptor prepare
Scope Interceptor scope
Static Parameters Interceptor staticParams
Roles Interceptor role
Timer Interceptor timer
Token Interceptor token
Token Session Interceptor tokenSession

Validation Interceptor validation
WorkFlow Interceptor workflow
Parameter Filter Interceptor N/A
Profiling Interceptor profiling
2. Custom một Interceptor
Ngoài những interceptor trên thì ta cũng có thể tạo ra những interceptor cho chính chúng ta.
Trong xwork cung cấp cho chúng ta một Interface Interceptor. Interface này có 3 phương
thức chính là:
• init(): Phương thức được gọi đúng một lần sau khi Interceptor được tạo ra.
• intercept(): phương thức được gọi mỗi khi action được invoke và Intercept này sẽ
thực hiện trước và sau khi action execute.
• destroy: phương thức gọi khi interceptor bị hủy . Thực hiện giải phóng tài
nguyên.
Trong xwork cũng cung cấp cho chúng ta một class abstract AbstractInterceptor lớp này
implement từ Interface Interceptor. Nó cung cấp cho chúng ta 2 phương thức init() và
destroy() rỗng.
Struts 2 Page D
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
i. Tạo interceptor
Để tạo một Interceptor thì ta thực hiện tạo một class và cho extends từ class
AbstractInterceptor hay implement từ interface Interceptor. Sau đó thực hiện viết lại
các phương thức cho phù hợp với muc đích của mình.
VD:
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class SimpleInterceptor extends AbstractInterceptor
{
public String intercept(ActionInvocation invocation) throws Exception{
MyAction action = (MyAction)invocation.getAction();

action.setDate(new Date());
return invocation.invoke();
}
}
Trong khi tạo một Interceptor chúng ta làm việc với 1 interface khá là quan trong là
ActionInvocation. Inteface này nó đại diện cho trạng thực thi của một Action.
Trong interface này có phương thức quan trọng là phương thức invoke(). Phương thức
này để triệu gọi đến bước kế tiếp trong chuỗi xử lý một action
ii. Sử dụng custom interceptor:
Strong struts.xml ta thực hiện khai báo interceptor của mình như sau:

<interceptors>
<interceptor name="myinterc1" class=" "/>
<interceptor name=" myinterc2" class=" "/>
</interceptors>
<action name="login" class="tutorial.Login">
<interceptor-ref name="myinterc1"/>
<interceptor-ref name=" myinterc2"/>
<result name="input">login.jsp</result>
<result name="success“ type="redirect-action">/secure/home</result>
</action>

Có những lúc chúng ta muốn các interceptor của chúng ta thực hiện theo một thức tự và
sữ dụng nhiều lần cùng một thứ tự đó thì nếu dùng cách khai báo từng interceptor
trong mỗi action thì sẽ dư thừa. Do đó trong struts2 có khái niểm stack để chúng ta
khai báo thứ tự của các interceptor mình sẽ dùng.
Để hiểu rõ thì xem ví dụ sau:
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="timer" class=" "/>

<interceptor name="logger" class=" "/>
<interceptor-stack name="myStack">
<interceptor-ref name="timer"/>
<interceptor-ref name="logger"/>
Struts 2 Page X
Trường Đại Học Khoa Học Tự Nhiên
Khoa Công Nghệ Thông Tin
</interceptor-stack>
</interceptors>
<action name="login" class="tutuorial.Login">
<interceptor-ref name="myStack"/>
<result name="input">login.jsp</result>
<result name="success“ type="redirect-action">/secure/home</result>
</action>
</package>
VII. Các Tags trong struts 2
Tag library gồm: User Interface (UI) tags và non-UI tags , AJAX
1. FORM TAGS
a. Using Struts Tags
Muốn sử dụng Tag Lib cần khai báo dòng sau vào đầu trang JSP
<%@ taglib prefix="s" uri="/struts-tags" %>
b. Common Attributes
The Common attributes
Name Data Type Description
cssClass String CSS class
cssStyle String CSS style
title String Thuộc tính tiêu đề
Disabled String Thuộc tính vô hiệu hóa
Label* String Nhãn
labelPosition* String Vị trí của label

Key String Tên của thuộc tính
Requiredposition * String
name String Thuộc tính name
required Boolean
tabIndex String Thuộc tính tabindex
value String Giá trị
Template-related attributes
Name Data Type Description
Struts 2 Page 

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×