Учебники

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>

Теперь щелкните правой кнопкой мыши на имени проекта и выберите « Экспорт»> «Файл WAR», чтобы создать файл «War». Затем разверните эту WAR в каталоге веб-приложений Tomcat. Наконец, запустите сервер Tomcat и попробуйте получить доступ к URL-адресу http: // 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. Если вы перезапустите программу сейчас, вы увидите следующий вывод:

Hello World Output

В дополнение к этому, инфраструктура Struts2 поставляется с перехватчиком «регистрации» для регистрации исключений. Позволяя регистратору регистрировать необработанные исключения, мы можем легко посмотреть трассировку стека и выяснить, что пошло не так

Глобальные сопоставления исключений

Мы видели, как мы можем обрабатывать конкретные действия исключений. Мы можем установить глобальное исключение, которое будет применяться ко всем действиям. Например, чтобы перехватить те же исключения NullPointerException, мы могли бы добавить тег <global-exception-mappings …> внутри тега <package …>, а его тег <result …> должен быть добавлен внутри тега <action .. .> тег в файле struts.xml следующим образом —