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 в каталоге веб-приложений 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. Если вы перезапустите программу сейчас, вы увидите следующий вывод:
В дополнение к этому, фреймворк 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>