Re: where can i find the controller class or package
>(2) Then, as you said, WeblogRequestMapper is the overall entry for >processing all request. WeblogRequestMapper.handleRequest() will parse the >requesting url, then find the corresponding "Action name" to process the >request. WeblogRequestMapper will map all requests looking for the front tier, if no match does a chain.doFilter(..). If the request ends in .rol (aka .action) will be picked up by the struts application. The struts .action as been replaced by .rol. >(b) Another question is that, in class BookmarkEdit, there is "save()" >method besides "myPrepare()" and "execute()". >From the code,* I cannot clearly see how the save() method is called, or >who will call save() method?* from bookmarkEdit.jsp the save method is called via Dynamic Method Invocation (DMI) https://cwiki.apache.org/confluence/display/WW/Action+Configuration#ActionConfiguration-DynamicMethodInvocation eg save is called via !save on the submit: Cheers Greg On 24 February 2018 at 19:02, x86 wjwrote: > hi Greg, > > *1. According to your explanation, I try to express the request > processing. * > When a request comes in: > (1) Firstly, several filterings will filter the request. > (2) Then, as you said, WeblogRequestMapper is the overall entry for > processing all request. WeblogRequestMapper.handleRequest() will parse > the > requesting url, then find the corresponding "Action name" to process the > request. > (3) After finding the "Action name", then corresponding Action Class will > really process the business function. while the mapping from "action name' > to "action class" is specified in Struts.xml. > (4) The 'Action class' will process the logic. It firstly runs > its myPrepare() method, then call the execution() method. > (5)After processing the execute() method, then continue the pass the > several filterings. > > The processing of an incoming request is right as what I said? > > *2. From the structs, each "action" corresponds to a "action class". Aslo, > There is more than one action is processed by the same action class.* > For example, > > class="org.apache.roller.weblogger.ui.struts2.editor. > BookmarkEdit"> > bookmarkAdd > bookmarkForm.add.title > .BookmarkEdit > bookmarks > bookmarks > > > class="org.apache.roller.weblogger.ui.struts2.editor. > BookmarkEdit"> > bookmarkEdit > bookmarkForm.edit.title > .BookmarkEdit > bookmarks > > bookmarks > ${weblog} > ${folderId} > > bookmarkEdit > > > (a) we can see "bookmarkAdd" and "bookmarkEdit' the two actions are both > processed by "org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit". > But there is only one execute() method in class BookmarkEdit. It means > "bookmarkAdd' and "bookmarkEdit" are processed by the same execution() > method? > If so, *how does execute() distinguish the two different actions to process > differently?* > > (b) Another question is that, in class BookmarkEdit, there is "save()" > method besides "myPrepare()" and "execute()". > From the code,* I cannot clearly see how the save() method is called, or > who will call save() method?* > > > > I am new to structs and roller. A lot of details I would like to ask and > hope make it clear. > Thank you for your help. > Best regards, > Wuxia Jin > > > On Sat, Feb 24, 2018 at 12:07 PM, Greg Huber wrote: > > > .should be WeblogRequestMapper > > > > Cheers Greg > > > > On 24 February 2018 at 04:39, x86 wj wrote: > > > > > Roller is in a web architecture of "presentation -> business logic -> > > > persistent layer". But the project is complex. From the source code, I > > have > > > no idea which packages(or classes) are responsible for the controller. > > The > > > following will list an example to express my meaning. > > > > > > For example, Jpetstore is a small project with only 24 classes. > > > https://github.com/mybatis/jpetstore-6/blob/master/src/ > > > main/java/org/mybatis/jpetstore/web/actions/OrderActionBean.java > > > > > > This link shows that OrderActionBean is one of the controller class in > > > web.action package. OrderActionBean.listOrders is one function entry > > > provided by system. > > > > > > So, I would like to know, in roller,* where can I find the similar > > > 'controllerClass.method()' that clearly present function's entry*. Can > > you > > > give me some example? > > > > > > Thanks a lot for your time. I really need your help. > > > Best regards, > > > Wuxia Jin > > > > > >
Re: where can i find the controller class or package
@Dave, Great! Your explanation is very clear and in detail. It really helps me a lot. I think I understand the overall process.: ) Thanks for your time. Best regards, Wuxia Jin On Sat, Feb 24, 2018 at 3:02 PM, Davewrote: > Hi Wuxia Jin, > > Some answers below... > > > > The processing of an incoming request is right as what I said? > > Yes, that is mostly correct, but not all requests are handle by Struts. > > To understand how Roller works, you should also look at the web.xml file > and how it maps URL paths to Java classes. > > Also, understand that there are two parts of Roller: > > 1) the weblog editor and admin interface, which exists at the URL path > /roller-ui and is written using Struts and JSP pages (see the struts.xml > and tiles.xml to see how Struts is configured) and > > 2) the Roller weblog page rendering system, which uses a set of Servlets > which call the Velocity template engine to display weblog pages using > Velocity templates. > > In the web.xml there is a RequestMapping filter. If that filter sees a > request for a weblog page then it calls a servlet to display the weblog > page or weblog RSS feed (using Velocity). > > If the RequestMapper does not handle a request, then the next filter, which > is the Struts filter, will handle the request and determine which Struts > action is to be called. > > > > *2. From the structs, each "action" corresponds to a "action class". > Aslo, > > There is more than one action is processed by the same action class.* > > If so, *how does execute() distinguish the two different actions to > process > differently?* > > The BookmarkEdit action is called twice. > > First, it is called with no method name specified in the URL and the > execute() method returns INPUT, which tells struts to display the > ".BookmarkEdit" Tile which includes the BookmarkEdit.jsp page. That causes > the Bookmark Edit page to be displayed to the user. > > Second, when a user clicks the Save button then Bookmark edit action is > called again but this time with the save method specified in the URL (by a > !save notation). That means that the save() method gets called, and a new > bookmark is added or an existing bookmark is updated. > > > > (b) Another question is that, in class BookmarkEdit, there is "save()" > > method besides "myPrepare()" and "execute()". > > From the code,* I cannot clearly see how the save() method is called, or > > who will call save() method?* > > Yes, that is confusing and sort of a hack. There is a form parameter that > carries an action name of either "bookmarkAdd" or "bookmarkEdit" and there > is a method called isAdd() which looks at that parameter and decides > whether to add a new bookmark or update an existing bookmark. > > Hope that helps. > > Best regards, > Dave > > > On Sat, Feb 24, 2018 at 2:02 PM x86 wj wrote: > > > hi Greg, > > > > *1. According to your explanation, I try to express the request > > processing. * > > When a request comes in: > > (1) Firstly, several filterings will filter the request. > > (2) Then, as you said, WeblogRequestMapper is the overall entry for > > processing all request. WeblogRequestMapper.handleRequest() will parse > the > > requesting url, then find the corresponding "Action name" to process the > > request. > > (3) After finding the "Action name", then corresponding Action Class will > > really process the business function. while the mapping from "action > name' > > to "action class" is specified in Struts.xml. > > (4) The 'Action class' will process the logic. It firstly runs > > its myPrepare() method, then call the execution() method. > > (5)After processing the execute() method, then continue the pass the > > several filterings. > > > > The processing of an incoming request is right as what I said? > > > > *2. From the structs, each "action" corresponds to a "action class". > Aslo, > > There is more than one action is processed by the same action class.* > > For example, > > > > > class="org.apache.roller.weblogger.ui.struts2.editor. > BookmarkEdit"> > > bookmarkAdd > > bookmarkForm.add.title > > .BookmarkEdit > > bookmarks > > bookmarks > > > > > > > class="org.apache.roller.weblogger.ui.struts2.editor. > BookmarkEdit"> > > bookmarkEdit > > bookmarkForm.edit.title > > .BookmarkEdit > > bookmarks > > > > bookmarks > > ${weblog} > > ${folderId} > > > > bookmarkEdit > > > > > > (a) we can see "bookmarkAdd" and "bookmarkEdit' the two actions are both > > processed by "org.apache.roller.weblogger.ui.struts2.editor. > BookmarkEdit". > > But there is only one execute() method in class BookmarkEdit. It means > > "bookmarkAdd' and "bookmarkEdit" are processed by the same execution() > > method? > > If so, *how does execute() distinguish the two different actions to > process > > differently?* > > > > (b) Another question is that, in class BookmarkEdit, there is
Re: where can i find the controller class or package
Hi Wuxia Jin, Some answers below... > The processing of an incoming request is right as what I said? Yes, that is mostly correct, but not all requests are handle by Struts. To understand how Roller works, you should also look at the web.xml file and how it maps URL paths to Java classes. Also, understand that there are two parts of Roller: 1) the weblog editor and admin interface, which exists at the URL path /roller-ui and is written using Struts and JSP pages (see the struts.xml and tiles.xml to see how Struts is configured) and 2) the Roller weblog page rendering system, which uses a set of Servlets which call the Velocity template engine to display weblog pages using Velocity templates. In the web.xml there is a RequestMapping filter. If that filter sees a request for a weblog page then it calls a servlet to display the weblog page or weblog RSS feed (using Velocity). If the RequestMapper does not handle a request, then the next filter, which is the Struts filter, will handle the request and determine which Struts action is to be called. > *2. From the structs, each "action" corresponds to a "action class". Aslo, > There is more than one action is processed by the same action class.* > If so, *how does execute() distinguish the two different actions to process differently?* The BookmarkEdit action is called twice. First, it is called with no method name specified in the URL and the execute() method returns INPUT, which tells struts to display the ".BookmarkEdit" Tile which includes the BookmarkEdit.jsp page. That causes the Bookmark Edit page to be displayed to the user. Second, when a user clicks the Save button then Bookmark edit action is called again but this time with the save method specified in the URL (by a !save notation). That means that the save() method gets called, and a new bookmark is added or an existing bookmark is updated. > (b) Another question is that, in class BookmarkEdit, there is "save()" > method besides "myPrepare()" and "execute()". > From the code,* I cannot clearly see how the save() method is called, or > who will call save() method?* Yes, that is confusing and sort of a hack. There is a form parameter that carries an action name of either "bookmarkAdd" or "bookmarkEdit" and there is a method called isAdd() which looks at that parameter and decides whether to add a new bookmark or update an existing bookmark. Hope that helps. Best regards, Dave On Sat, Feb 24, 2018 at 2:02 PM x86 wjwrote: > hi Greg, > > *1. According to your explanation, I try to express the request > processing. * > When a request comes in: > (1) Firstly, several filterings will filter the request. > (2) Then, as you said, WeblogRequestMapper is the overall entry for > processing all request. WeblogRequestMapper.handleRequest() will parse the > requesting url, then find the corresponding "Action name" to process the > request. > (3) After finding the "Action name", then corresponding Action Class will > really process the business function. while the mapping from "action name' > to "action class" is specified in Struts.xml. > (4) The 'Action class' will process the logic. It firstly runs > its myPrepare() method, then call the execution() method. > (5)After processing the execute() method, then continue the pass the > several filterings. > > The processing of an incoming request is right as what I said? > > *2. From the structs, each "action" corresponds to a "action class". Aslo, > There is more than one action is processed by the same action class.* > For example, > > class="org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit"> > bookmarkAdd > bookmarkForm.add.title > .BookmarkEdit > bookmarks > bookmarks > > > class="org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit"> > bookmarkEdit > bookmarkForm.edit.title > .BookmarkEdit > bookmarks > > bookmarks > ${weblog} > ${folderId} > > bookmarkEdit > > > (a) we can see "bookmarkAdd" and "bookmarkEdit' the two actions are both > processed by "org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit". > But there is only one execute() method in class BookmarkEdit. It means > "bookmarkAdd' and "bookmarkEdit" are processed by the same execution() > method? > If so, *how does execute() distinguish the two different actions to process > differently?* > > (b) Another question is that, in class BookmarkEdit, there is "save()" > method besides "myPrepare()" and "execute()". > From the code,* I cannot clearly see how the save() method is called, or > who will call save() method?* > > > > I am new to structs and roller. A lot of details I would like to ask and > hope make it clear. > Thank you for your help. > Best regards, > Wuxia Jin > > > On Sat, Feb 24, 2018 at 12:07 PM, Greg Huber wrote: > > > .should be WeblogRequestMapper > > > > Cheers Greg > > > > On 24 February 2018 at 04:39,
Re: where can i find the controller class or package
hi Greg, *1. According to your explanation, I try to express the request processing. * When a request comes in: (1) Firstly, several filterings will filter the request. (2) Then, as you said, WeblogRequestMapper is the overall entry for processing all request. WeblogRequestMapper.handleRequest() will parse the requesting url, then find the corresponding "Action name" to process the request. (3) After finding the "Action name", then corresponding Action Class will really process the business function. while the mapping from "action name' to "action class" is specified in Struts.xml. (4) The 'Action class' will process the logic. It firstly runs its myPrepare() method, then call the execution() method. (5)After processing the execute() method, then continue the pass the several filterings. The processing of an incoming request is right as what I said? *2. From the structs, each "action" corresponds to a "action class". Aslo, There is more than one action is processed by the same action class.* For example, bookmarkAdd bookmarkForm.add.title .BookmarkEdit bookmarks bookmarks bookmarkEdit bookmarkForm.edit.title .BookmarkEdit bookmarks bookmarks ${weblog} ${folderId} bookmarkEdit (a) we can see "bookmarkAdd" and "bookmarkEdit' the two actions are both processed by "org.apache.roller.weblogger.ui.struts2.editor.BookmarkEdit". But there is only one execute() method in class BookmarkEdit. It means "bookmarkAdd' and "bookmarkEdit" are processed by the same execution() method? If so, *how does execute() distinguish the two different actions to process differently?* (b) Another question is that, in class BookmarkEdit, there is "save()" method besides "myPrepare()" and "execute()". >From the code,* I cannot clearly see how the save() method is called, or who will call save() method?* I am new to structs and roller. A lot of details I would like to ask and hope make it clear. Thank you for your help. Best regards, Wuxia Jin On Sat, Feb 24, 2018 at 12:07 PM, Greg Huberwrote: > .should be WeblogRequestMapper > > Cheers Greg > > On 24 February 2018 at 04:39, x86 wj wrote: > > > Roller is in a web architecture of "presentation -> business logic -> > > persistent layer". But the project is complex. From the source code, I > have > > no idea which packages(or classes) are responsible for the controller. > The > > following will list an example to express my meaning. > > > > For example, Jpetstore is a small project with only 24 classes. > > https://github.com/mybatis/jpetstore-6/blob/master/src/ > > main/java/org/mybatis/jpetstore/web/actions/OrderActionBean.java > > > > This link shows that OrderActionBean is one of the controller class in > > web.action package. OrderActionBean.listOrders is one function entry > > provided by system. > > > > So, I would like to know, in roller,* where can I find the similar > > 'controllerClass.method()' that clearly present function's entry*. Can > you > > give me some example? > > > > Thanks a lot for your time. I really need your help. > > Best regards, > > Wuxia Jin > > >
Re: where can i find the controller class or package
.should be WeblogRequestMapper Cheers Greg On 24 February 2018 at 04:39, x86 wjwrote: > Roller is in a web architecture of "presentation -> business logic -> > persistent layer". But the project is complex. From the source code, I have > no idea which packages(or classes) are responsible for the controller. The > following will list an example to express my meaning. > > For example, Jpetstore is a small project with only 24 classes. > https://github.com/mybatis/jpetstore-6/blob/master/src/ > main/java/org/mybatis/jpetstore/web/actions/OrderActionBean.java > > This link shows that OrderActionBean is one of the controller class in > web.action package. OrderActionBean.listOrders is one function entry > provided by system. > > So, I would like to know, in roller,* where can I find the similar > 'controllerClass.method()' that clearly present function's entry*. Can you > give me some example? > > Thanks a lot for your time. I really need your help. > Best regards, > Wuxia Jin >
Re: where can i find the controller class or package
The back office is a struts application (struts.xml), whilst on the front presentation tier is custom implementation. The nearest thing to a controller I guess would be org/apache/roller/weblogger/ui/rendering/WebsiteRequestMapper class. Cheers Greg On 24 February 2018 at 04:39, x86 wjwrote: > Roller is in a web architecture of "presentation -> business logic -> > persistent layer". But the project is complex. From the source code, I have > no idea which packages(or classes) are responsible for the controller. The > following will list an example to express my meaning. > > For example, Jpetstore is a small project with only 24 classes. > https://github.com/mybatis/jpetstore-6/blob/master/src/ > main/java/org/mybatis/jpetstore/web/actions/OrderActionBean.java > > This link shows that OrderActionBean is one of the controller class in > web.action package. OrderActionBean.listOrders is one function entry > provided by system. > > So, I would like to know, in roller,* where can I find the similar > 'controllerClass.method()' that clearly present function's entry*. Can you > give me some example? > > Thanks a lot for your time. I really need your help. > Best regards, > Wuxia Jin >
where can i find the controller class or package
Roller is in a web architecture of "presentation -> business logic -> persistent layer". But the project is complex. From the source code, I have no idea which packages(or classes) are responsible for the controller. The following will list an example to express my meaning. For example, Jpetstore is a small project with only 24 classes. https://github.com/mybatis/jpetstore-6/blob/master/src/main/java/org/mybatis/jpetstore/web/actions/OrderActionBean.java This link shows that OrderActionBean is one of the controller class in web.action package. OrderActionBean.listOrders is one function entry provided by system. So, I would like to know, in roller,* where can I find the similar 'controllerClass.method()' that clearly present function's entry*. Can you give me some example? Thanks a lot for your time. I really need your help. Best regards, Wuxia Jin