На высоком уровне, как работает struts2? Я исхожу из фона mvc
Глядя на пример проекта, я вижу множество этих классов типа ___action.
Это просто действие ссылается на действие контроллера? то есть ответ на конкретный URL-адрес на основе get/post?
На высоком уровне, как работает struts2? Я исхожу из фона mvc
Глядя на пример проекта, я вижу множество этих классов типа ___action.
Это просто действие ссылается на действие контроллера? то есть ответ на конкретный URL-адрес на основе get/post?
Типичный рабочий процесс Struts2 (имейте в виду, что Struts2 чрезвычайно настраиваемый, его части хорошо разделены)
struts.xml
=> определяет «сопоставления»:
action
выполняется для каждого URLresults
: какой ресурс (обычно JSP) генерирует представление для каждого результата, возвращаемого действиемСледовательно, например, скажем, struts.xml
содержит
<action name="add" class="example.SumAction">
<result name="error">/Error.jsp</result>
<result name="success">/SumResult.jsp</result>
</action>
И ваше действие Java:
public class SumAction {
private int x;
private int x;
private int z;
// getters and setters ommited
public String execute() {
z = x + y;
return "success";
}
}
Затем запрос http://mysite.com/mywebapp/add.action?x=10&y=20
заставит Struts2 создать экземпляр объекта SumAction
, установить свойства x
и y
и вызвать метод execute
. Если возвращается «успех», то он помещает действие в некоторую «область действия», перенаправляя его в «/SumResult.jsp», в котором обычно используется некоторый тег struts2 для отображения результата, извлекая его из объекта действия.
Result: <b><s:property value="z" /></b>
Конечно, в менее тривиальных сценариях метод execute()
будет вызывать сервисный уровень.
Таким образом, не очень ясно, является ли действие контроллером или контроллером + моделью, я бы сказал позже, потому что оно не только имеет логику для обработки запроса, но также действует как контейнер данных (ввод и результат). Но только в рамках запроса.
Я всегда понимал, что действия — это ваши контроллеры. Вы нажимаете URL-адрес, сопоставляете его с действием, ваше действие контролирует, какая бизнес-логика происходит, например, «загрузить объект домена» или «просто перейти к jsp».
JSP — это ваши взгляды. Я думаю, что если вы создаете RIA, в котором действия обрабатывают xhrs и возвращают json, компонент V MVC находится за пределами структуры - это ваши extjs или что-то еще, что вы используете для представления.
Struts всегда казался действительно фреймворком VC, потому что вы не определяете свою модель с помощью struts. Вы делаете это сами. Хотя вы используете модель в стойках, когда вы конвертируете свою модель во все, что нужно вашей презентации.