1. 소개

Apache Struts 2 는 엔터프라이즈 Java 웹 애플리케이션 개발을 위한 MVC 기반 프레임워크입니다. 원래 Struts 프레임워크를 완전히 다시 작성했습니다. 오픈 소스 API 구현과 풍부한 기능 세트가 있습니다.

이 사용방법(예제)에서는 Struts2 프레임워크의 다양한 핵심 구성 요소에 대한 초보자용 소개를 제공합니다. 또한 사용 방법을 보여 드리겠습니다.

2. Struts 2 프레임워크 개요

Struts 2 기능 중 일부는 다음과 같습니다.

  • POJO(Plain Old Java Objects) 기반 작업
  • REST, AJAX, Hibernate, Spring 등을 위한 플러그인 지원
  • 구성에 대한 규칙
  • 다양한 뷰 레이어 기술 지원
  • 프로파일링 및 디버깅 용이성

2.1. Struts2의 다른 구성 요소

Struts2는 MVC 기반 프레임워크이므로 모든 Struts2 애플리케이션에는 다음 세 가지 구성 요소가 있습니다.

  1. Action 클래스 – POJO 클래스입니다(POJO는 유형 계층 구조의 일부가 아니며 독립 실행형 클래스로 사용할 수 있음을 의미함). 여기서 비즈니스 로직을 구현할 것입니다.
  2. 컨트롤러 – Struts2에서 HTTP 필터는 컨트롤러로 사용됩니다. 기본적으로 요청/응답 가로채기 및 유효성 검사와 같은 작업을 수행합니다.
  3. 보기 – 처리된 데이터를 표시하는 데 사용됩니다. 일반적으로 JSP 파일입니다.

3. 애플리케이션 설계

웹 앱 개발을 진행해 봅시다. 사용자가 특정 자동차 브랜드를 선택하면 Custom형 메시지로 인사를 받는 애플리케이션입니다.

3.1. 메이븐 의존성

pom.xml 에 다음 항목을 추가해 보겠습니다 .

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.10</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-junit-plugin</artifactId>
    <version>2.5.10</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.5.10</version>
</dependency>

의존성의 최신 버전은 여기 에서 찾을 수 있습니다 .

3.2. 비즈니스 로직

특정 입력 값에 대한 메시지를 반환하는 작업 클래스 CarAction 을 만들어 봅시다 . CarAction 에는 carName (사용자의 입력을 저장하는 데 사용됨) 및 carMessage (표시할 사용자 지정 메시지를 저장하는 데 사용됨 ) 의 두 필드가 있습니다.

public class CarAction {

    private String carName;
    private String carMessage;
    private CarMessageService carMessageService = new CarMessageService();
    
    public String execute() {
        this.setCarMessage(this.carMessageService.getMessage(carName));
        return "success";
    }
    
    // getters and setters
}

CarAction 클래스는 자동차 브랜드 에 대한 사용자 정의 메시지를 제공하는 CarMessageService 를 사용합니다.

public class CarMessageService {

    public String getMessage(String carName) {
        if (carName.equalsIgnoreCase("ferrari")){
            return "Ferrari Fan!";
        }
        else if (carName.equalsIgnoreCase("bmw")){
            return "BMW Fan!";
        }
        else {
            return "please choose ferrari Or bmw";
        }
    }
}

3.3. 사용자 입력 수락

애플리케이션의 진입점인 JSP 를 추가해 보겠습니다 . 이것은 input.jsp 파일의 내용입니다.

<body>
    <form method="get" action="/struts2/tutorial/car.action">
        <p>Welcome to Baeldung Struts 2 app</p>
        <p>Which car do you like !!</p>
        <p>Please choose ferrari or bmw</p>
        <select name="carName">
            <option value="Ferrari" label="ferrari" />
            <option value="BMW" label="bmw" />
         </select>
        <input type="submit" value="Enter!" />
    </form>
</body>

< form > 태그는 작업을 지정합니다(이 경우에는 GET 요청을 보내야 하는 HTTP URI입니다).

3.4. 컨트롤러 부분

StrutsPrepareAndExecuteFilter 는 들어오는 모든 요청을 가로채는 컨트롤러입니다. web.xml 에 다음 필터를 등록해야 합니다 .

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

StrutsPrepareAndExecuteFilter 는 와일드카드 <url-pattern>/*</url-pattern>과 일치하는 URL을 지정하므로 들어오는 모든 요청을 필터링합니다.

3.5. 애플리케이션 구성

Car 작업 클래스에 다음 어노테이션을 추가해 보겠습니다 .

@Namespace("/tutorial")
@Action("/car")
@Result(name = "success", location = "/result.jsp")

이 어노테이션의 논리를 이해해 봅시다. @ 네임스페이스 는 다른 작업 클래스에 대한 요청 URI의 논리적 분리에 사용됩니다 . 요청에 이 값을 포함해야 합니다.

또한 @Action 은 Action 클래스에 도달할 요청 URI의 실제 Endpoints을 알려줍니다 . 작업 클래스는 CarMessageService 를 참조 하고 다른 멤버 변수 carMessage 의 값을 초기화합니다 . execute() 메서드가 값 ( 우리의 경우 "success" )을 반환 한 후 해당 값과 일치하여 result.jsp 를 호출합니다.

마지막으로 @Result 에는 두 개의 매개변수가 있습니다. 첫 번째 이름 은 Action 클래스가 반환할 값을 지정합니다 . 이 값은 Action 클래스 의 execute() 메서드 에서 반환됩니다. 이것은 실행될 기본 메소드 이름입니다 .

두 번째 부분인 위치 는 execute() 메서드가 값을 반환한 후 참조할 파일을 알려줍니다 . 여기서 우리는 execute() 가 값이 " success "인 문자열을 반환 할 때 요청을 result.jsp 로 전달해야 한다고 지정합니다 .

XML 구성 파일을 제공하여 동일한 구성을 얻을 수 있습니다.

<struts>
    <package name="tutorial" extends="struts-default" namespace="/tutorial">
        <action name="car" class="com.baeldung.struts.CarAction" method="execute">
            <result name="success">/result.jsp</result>
        </action>
    </package>
</struts>

3.6. 보기

이것은 사용자에게 메시지를 표시하는 데 사용될 result.jsp 의 내용입니다.

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<body>
    <p> Hello Baeldung User </p>
    <p>You are a <s:property value="carMessage"/></p>
</body>

여기서 주목해야 할 두 가지 중요한 사항이 있습니다.

  • <@taglib prefix=”s” uri=”/struts-tags %> 에서 struts-tags 라이브러리 를 가져오고 있습니다.
  • <s:property value=”carMessage”/> 에서 struts-tags 라이브러리를 사용 하여 속성 carMessage 의 값을 인쇄합니다.

4. 애플리케이션 실행

이 웹 앱은 Apache Tomcat과 같은 모든 웹 컨테이너에서 실행할 수 있습니다. 이를 달성하는 데 필요한 단계는 다음과 같습니다.

  1. 웹 앱을 배포한 후 브라우저를 열고 다음 URL에 액세스합니다. http://www.localhost.com:8080/MyStrutsApp/input.jsp
  2. 두 가지 옵션 중 하나를 선택하고 요청을 제출하십시오.
  3. 선택한 입력 옵션에 따라 사용자 정의된 메시지 가 있는 result.jsp 페이지로 이동합니다.

5. 결론

이 사용방법(예제)에서는 첫 번째 Struts2 웹 애플리케이션을 만드는 방법에 대한 단계별 사용방법(예제)를 살펴보았습니다. 우리는 Struts2 도메인에서 다양한 MVC 관련 측면을 다루었고 개발을 위해 이들을 결합하는 방법을 보여주었습니다.

언제나처럼 이 예제은 Github 에서 Maven 프로젝트로 찾을 수 있습니다.

Generic footer banner