На високо ниво как работи struts2? Идвам от mvc фон

На високо ниво как работи struts2? Идвам от mvc фон

Гледайки примерен проект, виждам много от тези класове тип ___действие.

Дали това е само препратка към действие на контролер? т.е. отговор на конкретен 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