struts-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Struts Wiki] Update of "StrutsManualActionClasses" by MichaelJouravlev
Date Wed, 28 Jun 2006 05:52:30 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Struts Wiki" for change notification.

The following page has been changed by MichaelJouravlev:
http://wiki.apache.org/struts/StrutsManualActionClasses

------------------------------------------------------------------------------
  
  == Action Classes ==
  
- The goal of an Action class is to process a request and return an ActionForward object.
Action class can either implement a ''stateless service'', or can manage a logical ''web resource''.
+ The goal of an Action class is to process a request and return an ActionForward object.
Action class can either implement a ''stateless service'' like "search", or can manage a logical
''web resource'' like "Customer".
  
- !ActionForward object identifies where control should be transferred to provide the appropriate
response, and usually designates either another Action (see [:ActionChaining:action chaining])
or a presentation page. Struts is agnostic to presentation technology, so response can be
generated using JSP file, Tile definition, Velocity template, XSLT stylesheet or using other
means.
+ !ActionForward object identifies where control should be transferred to provide the appropriate
response, and usually designates either another Action (see [:ActionChaining:action chaining])
or a presentation page. Struts is agnostic to presentation technology, so response can be
generated using JSP file, Tile definition, Velocity template, XSLT stylesheet or other rendering
engine.
  
  !ActionForward object represents a logical outcome of processing a request. By not defining
a specific menu choice or a page URL it is possible to separate state of a resource from its
visual representation.
  
- The following picture illustrates the difference between Struts and ASP.NET using a simple
"render page" use case. In Struts this means something like "Process request and transfer
control to appropriate location, like a JSP page that corresponds to current status of the
Action". In ASP.NET this simply means "Display that page".
+ The following picture illustrates a simple "render page" use case implemented with Struts
and ASP.NET. In Struts the requests means something like "Process request data and transfer
control to a JSP page that corresponds to result of the processing". In ASP.NET the request
simply means "Display the page".
  
  inline:basic_action_asp.gif
  
@@ -31, +31 @@

  
  Note that the code of the search action is not affected by this decision. In Struts the
outcomes returned by an action are much more stable than the presentation locations. On contrary,
in ASP.NET the outcome is simply the page that was requested.
  
- == Action As Service ==
- 
- Base Action class handles all incoming requests with one callback method, {{{execute()}}}.
Two overloaded versions of this method are available. Choosing one or another depends on your
servlet environment:
+ Action class handles all incoming requests with one callback method, {{{execute()}}}. Two
overloaded versions of this method are available. Choosing one or another depends on your
servlet environment:
  
  {{{public ActionForward execute(ActionMapping mapping,
                               ActionForm form,
@@ -49, +47 @@

  
  Since the majority of teams using the framework are focused on building web applications,
most projects will only use the "!HttpServletRequest" version. A non-HTTP execute() method
has been provided for applications that are not specifically geared towards the HTTP protocol.
  
+ == Action And Web Forms ==
+ 
+ The most common use case in an interactive web application is submitting of HTML form. A
user expects that if input data is not valid, the form would be redisplayed, keeping information
entered by the user, and displaying relevant error messages.
+ 
+ This use case is so common and so important that it gave name to a certain web framework
developed by a company from Redmond. This company spent significant amount of time making
sure that developing for Web is as easy as designing a desktop application. How does Struts
fare?
+ 
+ First, a brief recap of HTTP specification. HTTP defines eight request methods, two of these
directly relate to handling of web forms. Below are relevant quotes from RFC 2616, abridged
and slightly edited for readability:
+ 
+ '''GET:''' The GET method means retrieve whatever information is identified by the Request-URI.
GET method SHOULD NOT have the significance of taking an action other than retrieval [and]
ought to be considered "safe".
+ 
+ '''POST:''' The POST method is used to request the server to accept the entity enclosed
in the request. POST is designed to allow a uniform method to  ... post a message to a bulletin
board, newsgroup, mailing list ... [or] to provide a block of data, such as the result of
submitting a form, to a data-handling process.
+ 
+ The HTTP specification defines a fundamental concept of web interaction in two distinct
phases:
+  * On ''render phase'' (''output phase'', ''render response phase'') the browser retrieves
information identified by request URI. This can be a static page, an output of some process
or a visual representation of a resource that corresponds to URI.
+  * On ''input phase'' (''submit phase'', ''event phase'', ''apply request values phase'')
the browser sends input data to an URI, usually by submitting an HTML form.
+ 
  == Action And Setup/Submit Pattern ==
  
- A request/response sequence of an interactive web application is typically composed out
of two phases.
+ Two-phase request/response concept is traditionally implemented in Struts with setup/submit
pattern:
+  * ''setup action'' (''pre-action'', ''output action'', ''render action'') prepares output
data for display. It loads data from database, queues it into one or more arbitrary objects
located in the request or session scope, then forwards to a view, usually a JSP page.
+  * ''submit action'' (''post-action'', ''input action'', ''accept action'', ''event action'')
processes input data from web form and redisplays the web form if errors has been found. If
input does not contain errors, submit action updates application state and forwards to a success
page. 
  
+ One of the reasons of splitting this functionality into two actions is that Action class
uses just one {{{execute()}}} method to handle all kinds of requests. (Servlet has separate
{{{doGet()}}} and {{{doPost()}}} methods.)
-  * On ''render phase'' (''output phase'', ''render response phase'') the browser requests
a web resource to render itself.
-  * On ''input phase'' (''submit phase'', ''event phase'', ''apply request values phase'')
the browser sends input data to a web resource, usually by submitting an HTML form.
- 
- In Struts a web resource is represented with Action or Action/!ActionForm combination.
- 
- These two phases correspond closely to HTTP GET and POST methods. HTTP specification recommends
to use POST method for non-idempotent requests, like those that modify application state.
GET method should be used for requests that can be safely repeated several times, like rendering
a web page.
- 
- Two-phase request/response approach is traditionally implemented with setup/submit pattern:
-  * ''setup action'' (''pre-action'', ''output action'', ''render action'') prepares output
data for display. It loads data from database and queues it into one or more arbitrary objects
located in the request or session scope.
-  * ''submit action'' (''post-action'', ''input action'', ''accept action'', ''event action'')
processes input data and redisplays the same data entry form if errors has been found in the
input. If input does not contain errors, submit action updates application state and forwards
to a success page. 
- 
- A significant factor to adopting this pattern was the fact that Action class has only one
{{{execute()}}} method instead of separate {{{doGet()}}} and {{{doPost()}}} methods that Servlet
has.
  
  inline:setup_submit.gif
  

Mime
View raw message