exeption Interceptor - Xử lý ngoại lệ Trong ứng dụng web của chúng ta, tại bất cứ thời điểm nào cũng có thể xuất hiện exception.. Để giải quyết vấn đề này, Struts 2 cung cấp một kỹ thuật
Trang 1exeption Interceptor - Xử lý ngoại lệ
Trong ứng dụng web của chúng ta, tại bất cứ thời điểm nào cũng có thể xuất hiện exception Để giải quyết vấn đề này, Struts 2 cung cấp một kỹ thuật xử lý ngoại lệ toàn cục, tại đây chúng ta có thể hiển thị một global result tới người dùng
Struts 2 tự động log các Uncaught Exception và điều hướng người dùng tới trang Error Handler
Trình làm việc nội tại của exception Interceptor
Nếu xảy ra ngoại lệ nào, nó được bao trong ExceptionHolder và được đẩy vào trong ValueStack để
mà chúng ta có thể dễ dàng truy cập đối tượng Exception từ result
Ghi chú: Mình đề nghị bạn nên tạo Interceptor này như là Interceptor đầu tiên, để mà nó có thể xử
lý tất cả exception, dù cho nó được ném bởi các Interception khác
Các tham số của exception Interceptor
Có ba tham số được định nghĩa cho exception Interceptor Tất cả tham số này là tùy ý
1 logEnabled: xác định rằng log nên được kích hoạt hay là không Bạn có thể truyền true hoặc
false
2 logLevel: xác định log level, nó có thể là trace, debug, info, warn, error, fatal Theo mặc định là
debug
3 logCategory: xác định log category, ví dụ như com.mycompany.app Mặc định là
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor
Để xử lý ngoại lệ, bạn xác định global-result và global-exception-mappings trong struts.xml file
struts.xml
<? xml version = "1.0" encoding = "UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts
Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name = "aa" extends = "struts-default" >
Trang 2<result name = "myresult" > globalresult.jsp </result>
</global-results>
<global-exception-mappings>
<exception-mapping result = "myresult" exception = "java.lang.Exception" ></exception-mapping>
</global-exception-mappings>
<action name = "login" class = "com.Login" >
<result> welcome.jsp </result>
<result name = "error" > error.jsp </result>
</action>
</package>
</struts>
Phần tử con global-results của package xác định global-result cho package này
Phần tử con result của global-result xác định result page mà sẽ được truyền tới người dùng
như là một view
Phần tử con global-exception-mappings của package xác định ánh xạ ngoại lệ cho tất cả
các action của package này
Phần tử con exception-mapping của global-exception-mappings ánh xạ result đã choc ho
kiểu ngoại lệ đã cung cấp Trong ví dụ này, chúng ta sử dụng Exception mà là cha của các lớp exception như IOException, ArithmeticException, … Nghĩa là nếu có bất cứ ngoại lệ nào xuất hiện, thì result đã cho sẽ được triệu hồi
Ghi chú: Chú ý rằng global-result phải được xác định trước global-exception-mappings như khi
chúng ta sử dụng trong ví dụ trên
Hiển thị exception trong Struts 2
Chúng ta có thể hiển thị exception trên trình duyệt bằng việc in exception hoặc exceptionStack Đối tượng exception in tên của ngoại lệ trong khi exceptionStack in chi tiết về ngoại lệ đó
Trang 3globalresult.jsp
<p> Exception Name: <s:property value = "exception" /> </p>
<p> Exception Details: <s:property value = "exceptionStack" /></p>
Để hoàn thành ví dụ này, bạn cần các resource khác, đó là:
Tạo input page
JSP page này tạo một form bởi sử dụng struts-tags Nó nhận name và password từ người dùng
index.jsp
<%@ taglib uri = "/struts-tags" prefix = "s" %>
<s:form action = "login" >
<s:textfield name = "name" label = "Name" ></s:textfield>
<s:password name = "password" label = "Password" ></s:password>
<s:submit value = "login" ></s:submit>
</s:form>
Tạo lớp Action
Lớp action này chứa hai trường là name và password và một phương thức là execute Tại đây, chúng ta ném exception nếu như mật khẩu là không kết nối với struts Đây là ví dụ giả, nếu bạn comment ở dòng dưới đây trong phương thức execute thì exception sẽ không xảy ra
login.java
package com ;
public class Login
private String name , password ;
//phuong thuc getter va setter
public String execute (){
if ( password equals ( "struts" )){
Trang 4return "success" ; } else
return "error" ; }
}
Tạo các thành phần view
Có ba thành phần view, đó là: globalresult.jsp hiển thị exception message, welcome.jsp hiển thị welcome message với username và error.jsp hiển thị error message
globalresult.jsp
<%@ taglib uri = "/struts-tags" prefix = "s" %>
Sorry an exception occured!
<p> Exception Name: <s:property value = "exception" /> </p>
<p> Exception Details: <s:property value = "exceptionStack" /></p>
<form>
<input type = "button" value = "back" onclick = history back () "
</form>
welcome.jsp
<%@ taglib uri = "/struts-tags" prefix = "s" %>
Welcome, <s:property value = "name" />
error.jsp
Xin loi , xay ra loi voi username hoac password ban nhap vao !!
< jsp : include page = "index.jsp" ></ jsp : include >