회사에서 새로 받은 프로젝트가 스프링이 아닌 스트러츠 프레임워크를 사용하고 있었다. (두둥)
처음으로 마주하는 스트러츠.. 굉장히 오래 된 프레임워크라고 알고 있는데 한 번 파헤쳐보자~
** 서버 실행 시 가장 먼저 실행되는 파일은 web.xml 파일


1) params 인터셉터
인터셉터는 액션의 호출을 동적으로 가로채는 객체로서 다양한 기능을 제공한다.
params 인터셉터는 ! 요청 파라미터와 동일한 이름을 가진 액션의 프로퍼티에 값을 저장하는 역할을 한다.
> 😍 이 부분에서 정말 많은 궁금증이 해소 됐다.. 스트러츠는 파라미터를 명시하지 않고 SSR 경우 데이터가 뷰단에서 백단까지 왔다갔다 하는데 도대체 어떻게?! 라는 의문이 들었는데 HTTP 요청이 들어왔을 때 인터셉터가 해당 클래스를 호출 전, 요청 파라미터와 동일한 이름을 가진 액션의 프로퍼티에 값을 저장해둔 것이다! 그래서 요청을 받는 메서드에서 파라미터를 명시해두지 않아도 메서드 내부에서 this.프로퍼티명 이렇게 데이터를 들고 올 수 있었던 것!!

-> setter를 통해 값을 저장하고, 값이 세팅 된 후에 해당 메소드가 호출 된 것이다.
return "success"; 를 하게 되면 result 태그 요소인 jsp 파일이 출력 페이지로서 화면에 보여진다.
2) struts.xml
<struts>
<package name = "ch04" extends = "struts-default">
<action name = "HelloWorld02" class = "action.HelloWorld02">
<interceptor-ref name = "params"/>
<result name = "success">/helloWorld.jsp</result>
</action>
</package>
</struts>
3) helloWorld.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>결과를 위한 JSP 페이지</title>
</head>
<body>
<h1>
${message}
</h1>
</body>
</html>
4) HelloWorld02.java
public class HelloWorld02 implements Action {
// HelloWorld02 액션에서도 HelloWorld 액션에서와 마찬가지로
// set / get 메소드를 갖는 필드를 추가할 수 있다.
// 스트럿츠 2의 액션은 자바 빈의 규칙을 따르기 때문에 필드에 대한 직접 접근하지 못하도록
// private 멤버로 지정하고, 이를 public 멤버로 선언된 메소드를 사용하도록 한다.
private String message;
private String name = "Angel";
// message 필드는 getter만 존재하므로 이 값을 외부에서 사용하기만 하고 변경하지 못하는
// read only 프로퍼티가 된다.
public String getMessage() {
return message;
}
// 반면 name 필드는 외부에서 사용하기만 하고 변경하지는 못하도록 하기 위해서 setter만 정의해 둔다.
public void setName(String name) {
this.name = name;
}
@Override
public String execute() throws Exception {
this.message = "Hello, " + name + "!";
return SUCCESS;
}
참고)