11/08/2018, 18:39

Xử lý ngoại lệ trong JSP

Học servlet Ngoại lệ thường là một đối tượng bị ném ra khi chạy. Xử lý ngoại lệ là quá trình xử lý các lỗi runtime. Ngoại lệ có thể xảy ra bất kỳ lúc nào trong ứng dụng web. Vì vậy xử lý ngoại lệ là một việc khá quan trọng để duy trì web hoạt động bình thường. Có hai cách để thực ...

Học servlet

Ngoại lệ thường là một đối tượng bị ném ra khi chạy. Xử lý ngoại lệ là quá trình xử lý các lỗi runtime. Ngoại lệ có thể xảy ra bất kỳ lúc nào trong ứng dụng web. Vì vậy xử lý ngoại lệ là một việc khá quan trọng để duy trì web hoạt động bình thường. Có hai cách để thực hiện xử lý ngoại lệ trong JSP:

  1. Bởi các thuộc tính errorPage isErrorPage của chỉ thị trang.
  2. Bởi phần tử <error-page> trong web.xml.

Ví dụ về xử lý ngoại lệ trong jsp bằng các thuộc tính của chỉ thị trang

Trong trường hợp này, bạn phải xác định và tạo một trang để xử lý các ngoại lệ, như trong trang error.jsp. Các trang có thể xảy ra ngoại lệ, định nghĩa thuộc tính errorPage, như trong trang process.jsp.

File: index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Vi du ve xu ly ngoai le trong JSP</title>
</head>
<body>
  <form action="process.jsp">
    Number 1:<input type="text" name="n1" /><br><br> 
    Number 2:<input type="text" name="n2" /><br> <br> 
    <input type="submit" value="Chia" />
  </form>
</body>
</html>

File: process.jsp

 
<%@ page errorPage="error.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Process page</title>
</head>
<body>
  <%
      String num1 = request.getParameter("n1");
      String num2 = request.getParameter("n2");

      int a = Integer.parseInt(num1);
      int b = Integer.parseInt(num2);
      int c = a / b;
      out.print(a + " chia " + b + " = " + c);
  %>
</body>
</html>

File: error.jsp

 
<%@ page isErrorPage="true"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Error page</title>
</head>
<body>
  <h3>Sorry an exception occured!</h3>
  <p>Exception is:</p>
  <%=exception%>
</body>
</html>

Run ứng dụng trên

TH ngoại lệ xảy ra:

Xử lý ngoại lệ trong JSP

Click button Chia -> ngoại lệ xảy ra -> hiển thị lỗi thông qua trang error.jsp.

Xử lý ngoại lệ trong JSP

TH không có ngoại lệ:

Xử lý ngoại lệ trong JSP

Click button Chia.

Xử lý ngoại lệ trong JSP

Ví dụ về xử lý ngoại lệ trong jsp bằng phần tử error-page của file web.xml

Cách tiếp cận này là tốt hơn bởi vì bạn không cần phải xác định thuộc tính errorPage trong mỗi trang jsp. Trong trường hợp này, hãy xác định loại ngoại lệ hoặc mã lỗi cùng với phần tử location. Nếu bạn muốn xử lý tất cả các ngoại lệ, bạn phải chỉ định java.lang.Exception trong các phần tử exception-type. Hãy xem ví dụ đơn giản:

Có 4 file sau trong ví dụ này:

  • web.xml để xác định phần tử trang lỗi.
  • index.jsp cho các giá trị đầu vào.
  • process.jsp để chia hai con số và hiển thị kết quả.
  • error.jsp để hiển thị ngoại lệ.

File web.xml:

Nếu bạn muốn xử lý bất kỳ ngoại lệ nào:

<error-page>
    <exception-type>java.lang.Exception</exception-type>
    <location>/error.jsp</location>
</error-page>

Nếu bạn muốn xử lý ngoại lệ cụ thể:

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>

File index.jsp như trong ví dụ trên.

File process.jsp

<%
    String num1 = request.getParameter("n1");
    String num2 = request.getParameter("n2");

    int a = Integer.parseInt(num1);
    int b = Integer.parseInt(num2);
    int c = a / b;
    out.print(a + " chia " + b + " = " + c);
%>

File error.jsp như trong ví dụ trên.

Học servlet
0