Spring、Struts2、SAStrutsの違い

早見表

Struts2 SAStruts Spring
画面遷移 struts.xmlで指定 URLに合ったActionクラスが実行 @RequestMapping等で指定
画面の値を受けとる方法 クラス変数に自動的に格納 クラス変数に自動的に格納(@ActionForm) @ModelAttributeや引数など
画面に値を渡す方法 クラス変数に格納 クラス変数に格納 model.addAttributeで格納

画面遷移

Spring

アノテーション(@RequestMapping/@PostMapping/@GetMapping)で遷移先を指定する
jspjava
・formactionで遷移先URLを指定

<form:form method="post">
    <input type="submit" value="確認へ進む" formaction="offer_confirm"/>
</form:form>

javajsp
・@Controllerのついたクラスを用意する
・@Post/GetMappingでURLに紐づくメソッドを用意する
・returnで開くjspを指定する

@Controller
public class ConfirmOffer {

    // コンテキストルート+offer_confirmのURLの場合、これが実行される
    @PostMapping("offer_confirm")
    public String confirm(Model model) {

        // confirmOffer.jspを開く
        return "confirmOffer";
    }
}
Struts2

struts.xmlで実行するメソッドや表示するjspを指定する
jspjava
・actionでstruts.xmlに紐づく名前を指定する

<s:form action="hello">
    <s:submit value="HelloWorldページへ行く" />
</s:form>

struts.xml
jspで指定した名前に紐づく定義のクラス、メソッドが実行される
(HelloWorldActionクラスのexecuteメソッドが実行)

<struts>
    <package name="default" extends="struts-default">
        <action name="hello" class="sample.HelloWorldAction" method="execute">
            <result name="success">/jsp/HelloWorld.jsp</result>
        </action>
    </package>
</struts>

javajsp
struts.xmlで指定したメソッドが実行される
・returnの値がstruts.xmlに紐づき、表示するjspを指定する

public class HelloWorldAction {
    public String execute() {
        // struts.xmlに紐づく値を返す
        return "success";
    }
}

struts.xml
・result nameがメソッドの戻り値と紐づく、表示するjspを指定する

<struts>
    <package name="default" extends="struts-default">
        <action name="hello" class="sample.HelloWorldAction" method="execute">
            <result name="success">/jsp/HelloWorld.jsp</result>
        </action>
    </package>
</struts>

値の受け渡し

Spring

jspjava
・modelAttributeを使用することでjava側でまとめて受け取れる

<form:form modelAttribute="offerForm" method="post">
    <label>ユーザーID:</label>
    <form:input path="userId"/><br>
    <label>名前:</label>
    <form:input path="name"/><br>

    <input type="submit" value="確認へ進む" formaction="offer_confirm"/>

    <input type="hidden" name="hiddenItem" value="hiddenValue">
</form:form>

javajsp
・ @ModelAttributeを使うとFormで取得可能
・model.addAttributeでjspに渡せる

@Controller
public class ConfirmOffer {

    @PostMapping("offer_confirm")
    public String confirm(Model model,
            @ModelAttribute("offerForm") OfferForm form, // formの値を取得
            @RequestParam(name="userId") String id,      // これでも取得可能
            String hiddenItem    // これでも取得可能
            ) {

        // jspに値を渡す
        model.addAttribute("offerForm", form);

        return "confirmOffer";
    }
}
Struts2

クラス変数を用意しておくと自動で画面の値がセットされる
jspjava
jspの項目のnameとクラス変数の名前は合わせておくこと

<s:form action="hello">
    <s:textfield name="name" />
    <s:submit value="HelloWorldページへ行く" />
</s:form>

・クラス変数とそのgetter/setterを用意しておくことで自動で値が入る
jspに渡す処理は不要

public class HelloWorldAction {

    public String execute() {
        System.out.println(name);
        return "success";
    }

    // jspの変数名と同じ名前でクラス変数を用意
    private String name;

    // getterを用意しておくこと
    public String getName() {
        return name;
    }
    // setterを用意しておくこと
    public void setName(String name) {
        this.name = name;
    }
}

javajsp
javaのgetterが実行される

    <body>
        <s:property value="name" />さん
    </body>