Struts 2-예외 처리
Struts포착되지 않은 예외를 처리하고 사용자를 전용 오류 페이지로 리디렉션하는 더 쉬운 방법을 제공합니다. 다른 예외에 대해 다른 오류 페이지를 갖도록 Struts를 쉽게 구성 할 수 있습니다.
Struts는 "예외"인터셉터를 사용하여 예외 처리를 쉽게합니다. "예외"인터셉터는 기본 스택의 일부로 포함되어 있으므로 구성하기 위해 추가 작업을 수행 할 필요가 없습니다. 즉시 사용할 수 있습니다.
HelloWorldAction.java 파일을 약간 수정 한 간단한 Hello World 예제를 살펴 보겠습니다. 여기서는 의도적으로 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 FileWar 파일을 만듭니다. 그런 다음 Tomcat의 webapps 디렉토리에이 WAR을 배포합니다. 마지막으로 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>
위의 예에서 볼 수 있듯이 이제 NullPointerException에 전용 Error.jsp를 사용하도록 Struts를 구성했습니다. 지금 프로그램을 다시 실행하면 다음과 같은 출력이 표시됩니다.
이 외에도 Struts2 프레임 워크는 예외를 기록하는 "로깅"인터셉터와 함께 제공됩니다. 로거가 포착되지 않은 예외를 기록하도록함으로써 스택 추적을 쉽게보고 무엇이 잘못되었는지 알아낼 수 있습니다.
전역 예외 매핑
액션 특정 예외를 처리하는 방법을 살펴 보았습니다. 모든 작업에 적용되는 예외를 전역 적으로 설정할 수 있습니다. 예를 들어, 동일한 NullPointerException 예외를 포착하기 위해 다음을 추가 할 수 있습니다.<global-exception-mappings...> <package ...> 태그 내부의 태그와 <result ...> 태그는 다음과 같이 struts.xml 파일의 <action ...> 태그 내부에 추가되어야합니다.
<?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>