카테고리 없음

[Struts2] 기본적인 구조

och 2024. 11. 14. 09:08

JSP

machine이라는 키값을 getMachine이라는 메서드에 넘기고 있다.

<form action="getMachine" method="post">
    <label for="machine">Machine:</label>
    <input type="text" name="machine" id="machine" />
    <input type="submit" value="submit" />
</form>

Struts2 action Class

@Getter
@Setter
public class MachineAction extends ActionSupport {
    priavet String machine; // JSP 에서 넘겨받을 machine 변수

    @Override
    public String execute() throws Exception {
        System.out.println("Received machine value:" + machine);
        return SUCCESS; // 이 부분 어디에 정의되어 있는상수지..
    }
}

Struts2에서는 JSP에서 전달된 값을 액션 클래스에서 프로퍼티로 받을 수 있다.
위 코드에서 setter는 반드시 필요하다. 데이터를 주입할 때 setter를 사용하게 된다.

나는 여기서 데이터 레이스가 발생할 수도 있지 않을까? 생각중이다.

싱글턴

스트럿츠2의 액션 객체는 요청마다 생성된다. 따라서 프로퍼티에서 데이터레이스가 발생할 일은 없다. 단, static인 클래스변수 또는 Application Scope의 데이터를 사용하게 되면 데이터레이스가 발생할 수도 있다.

struts.xml 설정 파일 작성하기

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="default" namespace="/" extends="struts-default"> 

      <!-- getMachine 액션정의 -->
      <action name="getMachine" class="com.example.MachineAction">
          <result name="success">/success.jsp</result> <!-- 성공 시 이동할 JSP -->
      </action>
    </package>
</struts>

name : package를 식별하는 고유 이름입니다.
namespace : URL경로와 package를 매핑하는 데 사용됩니다.

  • /getMachine 요청이 들어오면, namespace="/"로 정의된 패키지에서 getMachine이라는 이름의 액션을 찾습니다.
  • 일반적으로 프로젝트가 커질수록 액션을 구분하고 관리하기 위해 서로다른 네임스페이스를 사용합니다.
    extends : 해당패키지가 확장할 기본 패키지를 지정합니다.