На высоком уровне, как работает struts2? Я исхожу из фона mvc

На высоком уровне, как работает struts2? Я исхожу из фона mvc

Глядя на пример проекта, я вижу множество этих классов типа ___action.

Это просто действие ссылается на действие контроллера? то есть ответ на конкретный URL-адрес на основе get/post?


person Blankman    schedule 16.07.2010    source источник


Ответы (2)


Типичный рабочий процесс Struts2 (имейте в виду, что Struts2 чрезвычайно настраиваемый, его части хорошо разделены)

struts.xml => определяет «сопоставления»:

  • который action выполняется для каждого URL
  • один или несколько results : какой ресурс (обычно 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() будет вызывать сервисный уровень.

Таким образом, не очень ясно, является ли действие контроллером или контроллером + моделью, я бы сказал позже, потому что оно не только имеет логику для обработки запроса, но также действует как контейнер данных (ввод и результат). Но только в рамках запроса.

person leonbloy    schedule 16.07.2010

Я всегда понимал, что действия — это ваши контроллеры. Вы нажимаете URL-адрес, сопоставляете его с действием, ваше действие контролирует, какая бизнес-логика происходит, например, «загрузить объект домена» или «просто перейти к jsp».

JSP — это ваши взгляды. Я думаю, что если вы создаете RIA, в котором действия обрабатывают xhrs и возвращают json, компонент V MVC находится за пределами структуры - это ваши extjs или что-то еще, что вы используете для представления.

Struts всегда казался действительно фреймворком VC, потому что вы не определяете свою модель с помощью struts. Вы делаете это сами. Хотя вы используете модель в стойках, когда вы конвертируете свою модель во все, что нужно вашей презентации.

person hvgotcodes    schedule 16.07.2010