На високо ниво как работи struts2? Идвам от mvc фон
Гледайки примерен проект, виждам много от тези класове тип ___действие.
Дали това е само препратка към действие на контролер? т.е. отговор на конкретен url въз основа на get/post?
На високо ниво как работи struts2? Идвам от mvc фон
Гледайки примерен проект, виждам много от тези класове тип ___действие.
Дали това е само препратка към действие на контролер? т.е. отговор на конкретен 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. Вие го правите сами. Въпреки че използвате модела в подпори, когато преобразувате модела си във всичко, от което се нуждае вашата презентация.