Struts 2-액션
Actions모든 MVC (Model View Controller) 프레임 워크와 마찬가지로 Struts2 프레임 워크의 핵심입니다. 각 URL은 사용자의 요청을 서비스하는 데 필요한 처리 논리를 제공하는 특정 작업에 매핑됩니다.
그러나이 조치는 다른 두 가지 중요한 역할을합니다. 첫째, 조치는 JSP 또는 다른 유형의 결과에 관계없이 요청에서보기를 통해 데이터를 전송하는 데 중요한 역할을합니다. 둘째, 작업은 요청에 대한 응답으로 반환 될 뷰를 렌더링해야하는 결과를 결정하는 프레임 워크를 지원해야합니다.
액션 만들기
작업에 대한 유일한 요구 사항 Struts2String 또는 Result 개체를 반환하는 인수없는 메서드가 하나 있어야하며 POJO 여야합니다. 인수없는 메서드가 지정되지 않은 경우 기본 동작은 execute () 메서드를 사용하는 것입니다.
선택적으로 당신은 ActionSupport 다음을 포함한 6 개의 인터페이스를 구현하는 클래스 Action상호 작용. 액션 인터페이스는 다음과 같습니다-
public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
Hello World 예제에서 액션 메서드를 살펴 보겠습니다.
package com.tutorialspoint.struts2;
public class HelloWorldAction {
private String name;
public String execute() throws Exception {
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
액션 메서드가 뷰를 제어하는 점을 설명하기 위해 다음과 같이 변경해 보겠습니다. execute 메소드와 ActionSupport 클래스를 다음과 같이 확장하십시오-
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String name;
public String execute() throws Exception {
if ("SECRET".equals(name)) {
return SUCCESS;
} else {
return ERROR;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
이 예제에서 우리는 이름 속성을보기위한 실행 메소드에 몇 가지 로직을 가지고 있습니다. 속성이 문자열과 같은 경우"SECRET", 우리는 돌아 간다 SUCCESS 그 결과 그렇지 않으면 우리는 ERROR결과로서. ActionSupport를 확장했기 때문에 문자열 상수를 사용할 수 있습니다.SUCCESS및 ERROR. 이제 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>
<result name = "error">/AccessDenied.jsp</result>
</action>
</package>
</struts>
보기 만들기
아래 jsp 파일을 생성하겠습니다. HelloWorld.jspEclipse 프로젝트의 WebContent 폴더에 있습니다. 이를 수행하려면 프로젝트 탐색기에서 WebContent 폴더를 마우스 오른쪽 단추로 클릭하고New >JSP File. 이 파일은 반환 결과가 액션 인터페이스에 정의 된대로 문자열 상수 "성공"인 SUCCESS 인 경우 호출됩니다.
<%@ 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>
다음은 조치 결과가 문자열 상수 "error"와 동일한 ERROR 인 경우 프레임 워크에서 호출 할 파일입니다. 다음 내용은AccessDenied.jsp
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Access Denied</title>
</head>
<body>
You are not authorized to view this page.
</body>
</html>
우리는 또한 만들어야합니다 index.jspWebContent 폴더에 있습니다. 이 파일은 사용자가 클릭하여 Struts 2 프레임 워크에executeHelloWorldAction 클래스의 메서드를 사용하고 HelloWorld.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>
이제 web.xml 파일에 대한 변경이 필요하지 않으므로 우리가 만든 것과 동일한 web.xml을 사용하겠습니다. Examples장. 이제 우리는Hello World Struts 2 프레임 워크를 사용하는 애플리케이션.
응용 프로그램 실행
프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 Export > WARWar 파일을 만드는 파일입니다. 그런 다음 Tomcat의 webapps 디렉토리에이 WAR을 배포합니다. 마지막으로 Tomcat 서버를 시작하고 URL에 액세스하십시오.http://localhost:8080/HelloWorldStruts2/index.jsp. 이것은 다음 화면을 제공합니다-
"SECRET"이라는 단어를 입력하면 다음 페이지가 표시됩니다.
이제 "SECRET"이외의 단어를 입력하면 다음 페이지가 표시됩니다.
여러 작업 만들기
다른 요청을 처리하고 사용자에게 다른 URL을 제공하기 위해 둘 이상의 작업을 자주 정의하므로 아래에 정의 된대로 다른 클래스를 정의합니다.
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
class MyAction extends ActionSupport {
public static String GOOD = SUCCESS;
public static String BAD = ERROR;
}
public class HelloWorld extends ActionSupport {
...
public String execute() {
if ("SECRET".equals(name)) return MyAction.GOOD;
return MyAction.BAD;
}
...
}
public class SomeOtherClass extends ActionSupport {
...
public String execute() {
return MyAction.GOOD;
}
...
}
다음과 같이 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.HelloWorld"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
<result name = "error">/AccessDenied.jsp</result>
</action>
<action name = "something"
class = "com.tutorialspoint.struts2.SomeOtherClass"
method = "execute">
<result name = "success">/Something.jsp</result>
<result name = "error">/AccessDenied.jsp</result>
</action>
</package>
</struts>
위의 가상 예에서 볼 수 있듯이 작업 결과 SUCCESS 과 ERROR’s 중복됩니다.
이 문제를 해결하려면 결과 결과를 포함하는 클래스를 만드는 것이 좋습니다.