Struts 2 - การจัดการข้อยกเว้น

Strutsให้วิธีที่ง่ายกว่าในการจัดการกับข้อยกเว้นที่ไม่ถูกจับและเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าข้อผิดพลาดเฉพาะ คุณสามารถกำหนดค่า Struts ให้มีหน้าข้อผิดพลาดที่แตกต่างกันสำหรับข้อยกเว้นที่แตกต่างกันได้อย่างง่ายดาย

Struts ทำให้การจัดการข้อยกเว้นเป็นเรื่องง่ายโดยใช้ตัวสกัดกั้น "ข้อยกเว้น" ตัวดักจับ "ข้อยกเว้น" รวมอยู่ในส่วนหนึ่งของสแต็กเริ่มต้นดังนั้นคุณจึงไม่ต้องทำอะไรเพิ่มเติมเพื่อกำหนดค่า พร้อมให้คุณใช้งานได้ทันที

ให้เราดูตัวอย่างง่ายๆของ Hello World พร้อมการปรับเปลี่ยนบางอย่างในไฟล์ HelloWorldAction.java ที่นี่เราจงใจแนะนำข้อยกเว้น NullPointer ในไฟล์HelloWorldAction รหัสการดำเนินการ

package com.tutorialspoint.struts2;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport{
   private String name;

   public String execute(){
      String x = null;
      x = x.substring(0);
      return SUCCESS;
   }
   
   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}

ให้เราเก็บเนื้อหาของ HelloWorld.jsp ดังต่อไปนี้ -

<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      Hello World, <s:property value = "name"/>
   </body>
</html>

ต่อไปนี้เป็นเนื้อหาของ index.jsp -

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
   pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>Hello World</title>
   </head>
   
   <body>
      <h1>Hello World From Struts2</h1>
      <form action = "hello">
         <label for = "name">Please enter your name</label><br/>
         <input type = "text" name = "name"/>
         <input type = "submit" value = "Say Hello"/>
      </form>
   </body>
</html>

ของคุณ struts.xml ควรมีลักษณะดังนี้ -

<?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 = "helloworld" extends = "struts-default">
     
      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
      </action>

   </package>
</struts>

ตอนนี้คลิกขวาที่ชื่อโครงการแล้วคลิก Export > WAR Fileเพื่อสร้างไฟล์ War จากนั้นปรับใช้ WAR นี้ในไดเร็กทอรี webapps ของ Tomcat สุดท้ายเริ่มเซิร์ฟเวอร์ Tomcat และพยายามเข้าถึง URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. สิ่งนี้จะสร้างหน้าจอต่อไปนี้ -

ป้อนค่า "Struts2" และส่งเพจ คุณควรเห็นหน้าต่อไปนี้ -

ดังที่แสดงในตัวอย่างข้างต้นตัวสกัดกั้นข้อยกเว้นเริ่มต้นทำงานได้อย่างยอดเยี่ยมในการจัดการข้อยกเว้น

ให้เราสร้างหน้าข้อผิดพลาดเฉพาะสำหรับข้อยกเว้นของเรา สร้างไฟล์ชื่อError.jsp โดยมีเนื้อหาดังต่อไปนี้ -

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
	pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title></title>
   </head>
   
   <body>
      This is my custom error page
   </body>
</html>

ตอนนี้ให้เรากำหนดค่า Struts เพื่อใช้หน้าข้อผิดพลาดนี้ในกรณีที่มีข้อยกเว้น ให้เราแก้ไขไฟล์struts.xml ดังต่อไปนี้ -

<?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 = "helloworld" extends = "struts-default">
   
      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <exception-mapping exception = "java.lang.NullPointerException"
         result = "error" />
         <result name = "success">/HelloWorld.jsp</result>
         <result name = "error">/Error.jsp</result>
      </action>

   </package>
</struts>

ดังที่แสดงในตัวอย่างด้านบนตอนนี้เราได้กำหนดค่า Struts เพื่อใช้ Error.jsp เฉพาะสำหรับ NullPointerException หากคุณรันโปรแกรมอีกครั้งตอนนี้คุณจะเห็นผลลัพธ์ต่อไปนี้ -

นอกจากนี้เฟรมเวิร์ก Struts2 ยังมาพร้อมกับตัวสกัดกั้น "การบันทึก" เพื่อบันทึกข้อยกเว้น ด้วยการเปิดใช้งานคนตัดไม้เพื่อบันทึกข้อยกเว้นที่ไม่ถูกจับเราสามารถดูการติดตามสแต็กและค้นหาสิ่งที่ผิดพลาดได้อย่างง่ายดาย

การแมปข้อยกเว้นส่วนกลาง

เราได้เห็นว่าเราสามารถจัดการกับข้อยกเว้นเฉพาะการดำเนินการได้อย่างไร เราสามารถกำหนดข้อยกเว้นได้ทั่วโลกซึ่งจะใช้กับการกระทำทั้งหมด ตัวอย่างเช่นหากต้องการตรวจจับข้อยกเว้น NullPointerException เดียวกันเราสามารถเพิ่ม<global-exception-mappings...> แท็กภายในแท็ก <package ... > และแท็ก <result ... > ควรถูกเพิ่มภายในแท็ก <action ... > ในไฟล์ struts.xml ดังนี้ -

<?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 = "helloworld" extends = "struts-default">
      <global-exception-mappings>
         <exception-mapping exception = "java.lang.NullPointerException"
         result = "error" />
      </global-exception-mappings>

      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction" 
         method = "execute">
         <result name = "success">/HelloWorld.jsp</result>
         <result name = "error">/Error.jsp</result>
      </action>

   </package>
</struts>