환영합니다. 초보자를 위한 Struts 튜토리얼에 오신 것을 환영합니다. Struts는 Java 웹 애플리케이션을 개발하기 위한 가장 오래된 프레임워크 중 하나입니다.
Struts 튜토리얼
Struts는 MVC 디자인 패턴의 초기 구현이었으며 Java 및 Java EE 기술의 최신 향상과 함께 많이 발전했습니다. Struts 튜토리얼 기사는 Struts 2의 기본 세부 정보와 첫 번째 “Hello World” Struts 2 애플리케이션을 만드는 방법을 제공하는 것을 목표로 합니다.
Struts 2
Apache Struts 2는 Java EE 웹 애플리케이션을 구축하기 위한 오픈 소스, 산업 표준, 유연하고 확장 가능한 프레임워크입니다. Struts 2는 OpenSymphony WebWork 프레임워크를 기반으로 하고 있습니다. Struts 2는 개발 및 구성 측면에서 매우 유연하며 Struts 2 프레임워크를 사용하여 웹 애플리케이션을 개발하는 것이 얼마나 쉬운지 살펴볼 것입니다.
Struts 2 아키텍처 다이어그램
아래 다이어그램은 웹 애플리케이션에서 Struts 2의 다양한 구성 요소를 보여줍니다.
Struts 2 Interceptors
Struts Interceptors는 요청이 처리되기 전과 후에 실행되는 Servlet Filters와 같습니다. 이들은 다양한 작업에 대해 동일한 작업을 수행하는 데 사용됩니다. 예를 들어 로깅, 세션 유효성 검사, 응답에 공통 헤더 추가 등이 있습니다.
Struts 2 ValueStack 및 OGNL
ValueStack은 클라이언트 요청을 처리하기 위해 Struts 2에서 응용 프로그램 데이터를 저장하는 저장 영역입니다. 데이터는 해당 요청 스레드에 특화된 값들을 가지기 위해 ActionContext
객체에 저장되며 ThreadLocal을 사용합니다. Object-Graph Navigation Language (OGNL)은 ValueStack에 저장된 데이터를 조작하는 데 사용되는 강력한 표현 언어입니다. 아키텍처 다이어그램에서 확인할 수 있듯이 인터셉터와 결과 페이지 모두 OGNL을 사용하여 ValueStack에 저장된 데이터에 액세스할 수 있습니다.
Struts 2 액션
Struts 2 액션 구성 요소는 클라이언트 요청을 처리합니다. Struts 2는 액션 클래스를 만들기 위한 다양한 방법을 제공합니다.
com.opensymphony.xwork2.Action
인터페이스를 구현함으로써.com.opensymphony.xwork2.ActionSupport
클래스를 확장함으로써. 일반적으로 다른 리소스로 요청을 전달하기 위해 빈 액션 클래스를 만드는 데 사용됩니다.- @Action 또는 @Actions 어노테이션을 사용하여 클래스에 주석을 단다.
- 클래스에 대한 네이밍 규칙을 따라 이름은 Action으로 끝나야 하며 execute() 메서드를 가져야 합니다.
Struts 2 결과
결과 구성 요소는 일반적으로 클라이언트 응답을 위한 JSP 또는 HTML 페이지입니다. Struts 2는 JSP 페이지에서 응답을 생성하기 위해 사용할 수 있는 자체 태그를 제공합니다. Struts 태그는 JSP 사용자 정의 태그의 훌륭한 예입니다.
Struts 2 선언적 아키텍처 및 Wiring
Struts 2는 액션 클래스와 결과 페이지를 구성하는 데 두 가지 방법을 제공합니다.
- Struts XML 파일: 우리는 WEB-INF/classes 디렉토리에 struts.xml 파일이 있습니다. 여기서 애플리케이션 액션 클래스와 결과 페이지를 구성할 수 있습니다.
- 주석: 우리는 클래스에 대한 메타데이터 정보를 제공하기 위해 자바 어노테이션을 사용할 수 있습니다. Struts 2 컨벤션 플러그인을 사용하여 자바 클래스에 @Action 및 @Result 어노테이션을 달아 액션 클래스와 연결된 결과 페이지를 구성할 수 있습니다.
어떤 방법을 사용하든 응용 프로그램을 구성하면 최종 결과는 항상 동일합니다.
Struts 튜토리얼 – Hello World XML 기반 응용 프로그램
자 첫 번째 Struts 2 Hello World 애플리케이션을 생성하는 방법을 살펴봅시다. 우선 필요한 것은 Struts 2 jar 파일입니다. 가장 쉬운 방법은 Struts 2 공식 다운로드 페이지에서 다운로드하는 것입니다. 그러나 다운로드한 아카이브의 라이브러리를 확인하면, 우리의 간단한 애플리케이션에 필요하지 않은 많은 jar 파일이 있습니다. 그래서 저는 maven 프로젝트를 생성하고 struts-core 의존성만 추가할 것입니다. 다른 모든 전이적 의존성 jar 파일은 자동으로 다운로드되어 애플리케이션에 추가됩니다. 최종 프로젝트 구조는 아래 이미지와 같을 것입니다. Eclipse에서 새로운 Dynamic Web Project Struts2XMLHelloWorld를 생성한 다음 아래 이미지와 같이 maven 프로젝트로 변환하십시오.
프로젝트 루트 디렉토리에 pom.xml 파일이 추가된 것을 알 수 있습니다. Eclipse에서 프로젝트 설정이 완료되었으니, 순서대로 다른 구성 요소를 살펴보겠습니다.
pom.xml
pom.xml 파일을 열고 struts core 의존성을 추가하면 최종 pom.xml은 아래와 같을 것입니다.
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Struts2XMLHelloWorld</groupId>
<artifactId>Struts2XMLHelloWorld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.15.1</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
</project>
알림: finalName
요소를 재정의하여 WAR 파일에 버전 번호가 추가되지 않도록 했습니다. 다른 부분은 Eclipse 자체에서 추가되며, 필요한 유일한 종속성은 현재 버전이 2.3.15.1인 struts2-core입니다(2013년 9월 10일 기준). 애플리케이션을 빌드하면 Maven Dependencies 섹션에 많은 JAR 파일이 추가되고 다음 이미지처럼 프로젝트의 lib 디렉토리에 표시됩니다.
Struts 2 web.xml 구성
웹 애플리케이션에 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
필터를 추가하고 Struts가 클라이언트 요청을 처리할 URL 패턴을 제공해야 합니다. 우리의 web.xml은 아래와 같습니다;
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xmlns="https://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Struts2XMLHelloWorld</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
2.1.3 미만의 Struts 2 버전의 경우 필터 클래스는 org.apache.struts2.dispatcher.FilterDispatcher
였습니다.
Struts 튜토리얼 – 결과 페이지
제 어플리케이션에서 사용할 세 개의 JSP 페이지가 있습니다. JSP 페이지를 생성하기 위해 Struts 2 태그를 사용하고 있습니다. login.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<%-- Using Struts2 Tags in JSP --%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
</head>
<body>
<h3>Welcome User, please login below</h3>
<s:form action="login">
<s:textfield name="name" label="User Name"></s:textfield>
<s:textfield name="pwd" label="Password" type="password"></s:textfield>
<s:submit value="Login"></s:submit>
</s:form>
</body>
</html>
양식 필드 이름 name 및 pwd에 유의하십시오. 이들은 Action 클래스에서 어떻게 사용되는지 살펴보겠습니다. welcome.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Welcome Page</title>
</head>
<body>
<h3>Welcome <s:property value="name"></s:property></h3>
</body>
</html>
struts 태그 s:property에 유의하십시오. 이를 사용하여 요청 속성을 가져올 수 있으며 이름은 login.jsp와 동일합니다. error.jsp
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Error Page</title>
</head>
<body>
<h4>User Name or Password is wrong</h4>
<s:include value="login.jsp"></s:include>
</body>
</html>
이는 간단한 JSP 페이지로 오류 메시지를 추가하고 응답에 로그인 페이지를 포함하고 있습니다.
Struts 튜토리얼 – Action 클래스
우리 어플리케이션에는 Struts 2 Action 인터페이스를 구현하는 유일한 Action 클래스가 있습니다. LoginAction.java
package com.journaldev.struts2.action;
import com.opensymphony.xwork2.Action;
public class LoginAction implements Action {
@Override
public String execute() throws Exception {
if("pankaj".equals(getName()) && "admin".equals(getPwd()))
return "SUCCESS";
else return "ERROR";
}
//양식 매개변수를 보유하기 위한 자바 빈
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
Action 클래스도 login.jsp와 동일한 변수를 가진 자바 빈이며 해당 변수의 getter 및 setter 메서드가 있습니다. Struts는 요청 매개변수를 action 클래스 변수에 매핑하는 것을 처리합니다.
Struts 튜토리얼 – 구성 파일
애플리케이션을 연결하기 위해 XML 기반 구성을 사용하므로 struts.xml이라는 이름의 Struts 구성 파일을 만들어야 합니다. 이 파일은 WEB-INF/classes 디렉터리에 있어야 합니다. struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="user" namespace="/User" extends="struts-default">
<action name="home">
<result>/login.jsp</result>
</action>
<action name="login" class="com.journaldev.struts2.action.LoginAction">
<result name="SUCCESS">/welcome.jsp</result>
<result name="ERROR">/error.jsp</result>
</action>
</package>
</struts>
“home” 액션의 경우 액션 클래스가 없으며 결과가 하나뿐이므로 요청은 login.jsp 페이지로 전달됩니다. “login” 액션의 경우 LoginAction이 액션 클래스이며 execute() 메서드가 “SUCCESS”를 반환하면 요청이 welcome.jsp에서 처리되고 “ERROR”인 경우 error.jsp 페이지로 전달됩니다. namespace=“/User”는 URL에서 액션 클래스에 액세스하기 위해 중요하며 다른 모듈을 만들기 위해 제공됩니다. 따라서 URL을 통해 애플리케이션에 액세스할 수 있습니다. https://localhost:8080/Struts2XMLHelloWorld/User/home.action
. URL이 .action으로 끝나는 것에 주목하세요. 이는 Struts 2 액션의 기본 접미사입니다. Struts 1의 경우 .do입니다.
Struts 튜토리얼 – Struts 2 Hello World 테스트
애플리케이션을 실행하면 다음과 같은 응답 페이지가 표시됩니다.
Struts2 Hello World 예제 프로젝트 다운로드
이것이 Struts 2 초보자 튜토리얼입니다. 다음 기사에서는 주석을 사용하여 Struts 2 웹 애플리케이션을 생성하지만 struts.xml 구성 파일을 사용하지 않습니다.
Source:
https://www.digitalocean.com/community/tutorials/struts-tutorial-for-beginners