<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1096712458602465939</id><updated>2012-02-16T19:54:33.145-08:00</updated><category term='sample application'/><category term='MVC framework'/><category term='Java framework'/><category term='ActionForm'/><category term='struts'/><category term='HTTP error 404'/><title type='text'>Struts The MVC Framework</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://strutsmvcframework.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://strutsmvcframework.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Kiran Thakkar</name><uri>http://www.blogger.com/profile/06230583140441194599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_zrMXlRn5S-Y/SMwVv7OwadI/AAAAAAAAAF8/IfM2JyDXJkY/S220/kiran+choti.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1096712458602465939.post-6702660631456888910</id><published>2007-04-28T21:49:00.000-07:00</published><updated>2007-06-03T22:46:10.100-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC framework'/><category scheme='http://www.blogger.com/atom/ns#' term='HTTP error 404'/><category scheme='http://www.blogger.com/atom/ns#' term='Java framework'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><title type='text'>Handeling "page not found" using Struts</title><content type='html'>While surfing web, Most of us have encountered 404- Page not found message. Any resource you request; If it does not exist on server you would get such an error. In struts applications when you request for x.do and if there is no Action-mapping defined in struts-config.xml file for ActionForward x; You would get such an error.&lt;br /&gt;&lt;br /&gt;Unknown ActionMapping&lt;br /&gt;&lt;blockquote&gt;In struts you can define one ActionMapping which will receive all requests for which no ActionMappins is defined. It is called "Unknown ActionMapping".&lt;br /&gt;&lt;/blockquote&gt;&lt;action name="/debug" unknown="true" forward="/pages/debug.jsp"&gt;&amp;lt;action&lt;br /&gt;      name="/debug"&lt;br /&gt;      unknown="true"&lt;br /&gt;      forward="/pages/debug.jsp/&gt;&lt;br /&gt;&lt;action name="/debug" unknown="true" forward="/pages/debug.jsp"&gt;&lt;br /&gt;Notably one can also do some NLP or spell correction to seek for resource user might be looking for and can ask to give that resource. This helps improving user experience while surfing your site.&lt;/action&gt;&lt;/action&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1096712458602465939-6702660631456888910?l=strutsmvcframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://strutsmvcframework.blogspot.com/feeds/6702660631456888910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1096712458602465939&amp;postID=6702660631456888910' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/6702660631456888910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/6702660631456888910'/><link rel='alternate' type='text/html' href='http://strutsmvcframework.blogspot.com/2007/04/handeling-page-not-found-using-struts.html' title='Handeling &quot;page not found&quot; using Struts'/><author><name>Kiran Thakkar</name><uri>http://www.blogger.com/profile/06230583140441194599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_zrMXlRn5S-Y/SMwVv7OwadI/AAAAAAAAAF8/IfM2JyDXJkY/S220/kiran+choti.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1096712458602465939.post-2327854946939456086</id><published>2007-04-13T23:39:00.000-07:00</published><updated>2007-05-16T06:21:50.821-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Java framework'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionForm'/><title type='text'>Why ActionForm is not an interface?</title><content type='html'>There are few reasons why Action Form is not an interface.&lt;br /&gt;&lt;br /&gt;Extensibility&lt;br /&gt;Adding a new method in interface (in next version of struts) will break earlier application's form bean. While in case of base class one can add new method as default implementation which doesn't break earlier applications to use new version.&lt;br /&gt;&lt;br /&gt;If Action Form is an interface, people using struts would be tempted to use their business objects as Action Forms which can cause following problems.&lt;br /&gt;&lt;br /&gt;Action Form is implemented to accept any value from HTML form and then validate those properties, If any of them are found to be incorrect; can be corrected on the fly. While business objects are not designed to buffer invalid data so programmer cannot change incorrect values on the fly instead they will get an exception.&lt;br /&gt;&lt;br /&gt;Some business objects are designed to start transactions, lock resources like database while they are used. In that case; even if input fields from HTML form are invalid, resources will be locked and transactions will start which is illegal usage of resources.&lt;br /&gt;&lt;br /&gt;Auto population mechanism of struts is designed to populate object first and then validate. In that case if business objects are used as Action Form and a property of a business object is meant to change system state, Invalid value may affect system and application in turn. So using one layer of ActionForm will block such invalid property values.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1096712458602465939-2327854946939456086?l=strutsmvcframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://strutsmvcframework.blogspot.com/feeds/2327854946939456086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1096712458602465939&amp;postID=2327854946939456086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/2327854946939456086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/2327854946939456086'/><link rel='alternate' type='text/html' href='http://strutsmvcframework.blogspot.com/2007/04/why-actionform-is-not-interface.html' title='Why ActionForm is not an interface?'/><author><name>Kiran Thakkar</name><uri>http://www.blogger.com/profile/06230583140441194599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_zrMXlRn5S-Y/SMwVv7OwadI/AAAAAAAAAF8/IfM2JyDXJkY/S220/kiran+choti.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1096712458602465939.post-2420170233727633174</id><published>2007-04-13T23:10:00.000-07:00</published><updated>2007-05-16T06:21:29.342-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Java framework'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionForm'/><title type='text'>Ways of Extending ActionForm</title><content type='html'>There are two different flavors of Action Form exist.&lt;br /&gt;&lt;br /&gt;Action Form as a Java Bean&lt;br /&gt;&lt;br /&gt;In this implementation of Action Form developer will have to define a property in Action Form class for each input defined in HTML form. There will also be getter and setter for each of those properties. This concept of having properties and getter and setters for all properties is a concept of Java Bean.&lt;br /&gt;&lt;br /&gt;Action Form as a map&lt;br /&gt;&lt;br /&gt;Action Form is a mapping between HTML form properties and business object corresponding to that form. The map can be used to trap all parameters passed without defining any of the properties in advance. Each field is just another entry on the Map. This can save developers effort a bit where developer will have to define two methods (public void &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;setvalue&lt;/span&gt;(String key, Object value and public Object &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;getValue&lt;/span&gt;(String key) instead of getter and setters of each property of the form.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;DynaActionForm&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Declaring simple properties in the usual way add up to a lot of work in a larger application.To create conventional &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;JavaBean&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ActionForm&lt;/span&gt;, You need to code a field, a getter, and a setter; A lot of infrastructure just to say get this and set that. It would be faster if we could just declare the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;Java Bean&lt;/span&gt; properties instead to code each one and system takes care of defining getter and setters of those properties. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;DynaActionForms&lt;/span&gt; are designed for the purpose. You could just define an Action Form in struts-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;config&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;xml&lt;/span&gt; file and declare what all properties it holds and Struts takes care of rest of things. It is actually based on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;DynaBean&lt;/span&gt; component of the Jakarta Commons.&lt;br /&gt;&lt;br /&gt;There is one difference in reset method of Action Form in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;DynaActionForm&lt;/span&gt; implementation and Map based or &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;Java Bean&lt;/span&gt; based implementation.&lt;br /&gt;&lt;br /&gt;In case of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;DynaActionForm&lt;/span&gt; implementation; reset method will set all properties to its initial values which are defined in struts-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;config&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;xml&lt;/span&gt; while defining Action Form. while in case of other two implementation reset method will set all properties to their default values which depend on type of a property.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1096712458602465939-2420170233727633174?l=strutsmvcframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://strutsmvcframework.blogspot.com/feeds/2420170233727633174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1096712458602465939&amp;postID=2420170233727633174' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/2420170233727633174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/2420170233727633174'/><link rel='alternate' type='text/html' href='http://strutsmvcframework.blogspot.com/2007/04/ways-of-extending-actionform.html' title='Ways of Extending ActionForm'/><author><name>Kiran Thakkar</name><uri>http://www.blogger.com/profile/06230583140441194599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_zrMXlRn5S-Y/SMwVv7OwadI/AAAAAAAAAF8/IfM2JyDXJkY/S220/kiran+choti.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1096712458602465939.post-8458950457595848455</id><published>2007-04-12T22:49:00.000-07:00</published><updated>2007-05-16T06:20:57.534-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java framework'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><category scheme='http://www.blogger.com/atom/ns#' term='sample application'/><title type='text'>Sample application of struts</title><content type='html'>Any Struts application comprises of following different components. I have taken Simple Register User application to explain all those components. &lt;ol start="1" type="1"&gt; &lt;li class="MsoNormal" style=""&gt;struts-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;config&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;xml&lt;/span&gt;      (Configuration file)&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ActionServlet&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;Action Class&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;Action Form&lt;/span&gt; class&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;Action Forward&lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal" style=""&gt;web.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;xml&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt;   &lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;struts-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;config&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;xml&lt;/span&gt; is a configuration file which maps requests to Action and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_8"&gt;Action Form&lt;/span&gt; classes depending on URI received in request. And forwards response to a view component depending &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt;Action Forward&lt;/span&gt; received from Action class.&lt;br /&gt;&lt;/p&gt;      &lt;p class="MsoBlockText"&gt;&lt;span style="font-size:12;"&gt;&lt;/span&gt;&lt;/p&gt; &lt;blockquote style="color: rgb(255, 102, 102);"&gt;   &lt;p class="MsoBlockText"&gt;&lt;span style="font-size:12;"&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;struts-config&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;form-beans&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;form-bean&lt;br /&gt;         name="registerForm"&lt;br /&gt;         type="app.RegisterForm"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;/form-beans&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;action-mappings&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;action&lt;br /&gt;         path="/register"&lt;br /&gt;         type="app.RegisterAction"&lt;br /&gt;         name="RegisterForm"&lt;br /&gt;         scope="request"&lt;br /&gt;         validate="true"&lt;br /&gt;         input="/register.jsp"&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;forward name="success"  path="/success.html"/&gt;&lt;br /&gt;   &lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;forward name="failure" path="/failure.html"/&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;/action&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;/action-mappings&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;/struts-config&gt;&lt;/span&gt;&lt;span style="font-size:12;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;/blockquote&gt;&lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;br /&gt;ActionServlet&lt;/span&gt; is a controller component which reads struts-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;config&lt;/span&gt; object and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_12"&gt;controls&lt;/span&gt; whole work flow. Most of the time we use default &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;ActionSErvlet&lt;/span&gt; implementation but one can also extend &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;ActionServlet&lt;/span&gt; class to customize work flow.&lt;br /&gt;&lt;br /&gt;Action class uses helper classes to request parameter to perform any action and returns response to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;ActionServlet&lt;/span&gt; in form of &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;Action Forward&lt;/span&gt;.&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-right: 0.5in; margin-left: 0.5in;"&gt;&lt;span style="color:red;"&gt;package app;&lt;br /&gt;&lt;br /&gt;import org.apache.struts.action.*;&lt;br /&gt;import javax.servlet.http.*;&lt;br /&gt;import java.io.*;&lt;br /&gt;&lt;br /&gt;public class &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;RegisterAction&lt;/span&gt; extends Action{&lt;br /&gt;&lt;br /&gt;    public &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;ActionForward&lt;/span&gt; execute(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;ActionMapping&lt;/span&gt; mapping,&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;ActionForm&lt;/span&gt; form,&lt;br /&gt;                                             &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;HttpServletRequest&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;req&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;HttpServletResponse&lt;/span&gt; res){&lt;br /&gt;&lt;br /&gt;    &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;RegisterForm&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;refisterForm&lt;/span&gt; =  (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;RegisterForm&lt;/span&gt;)form;&lt;br /&gt;&lt;br /&gt;    String &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;userName&lt;/span&gt; = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;rf&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;getUserName&lt;/span&gt;();&lt;br /&gt;    String password1 = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;rf&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;getPassword&lt;/span&gt;1();&lt;br /&gt;    String password2 = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;rf&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;getPAssword&lt;/span&gt;2();&lt;br /&gt;&lt;br /&gt;    if(password1.equals(password2)){&lt;br /&gt;               if(User exists in database){&lt;br /&gt;                             Throw exception;&lt;br /&gt;                              mapping.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;findForward&lt;/span&gt;("failure");&lt;br /&gt;               }&lt;br /&gt;                mapping.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;findForward&lt;/span&gt;("success");&lt;br /&gt;  }&lt;br /&gt;  mapping.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;findForward&lt;/span&gt;("failure");&lt;br /&gt;  }&lt;br /&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_37"&gt;Action Form&lt;/span&gt; class defines all properties defined in form and getter and setter methods for those properties.&lt;/p&gt;   &lt;p class="MsoNormal" style="margin-right: 0.5in; margin-left: 0.5in;"&gt;&lt;span style="color:red;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-right: 0.5in; margin-left: 0.5in;"&gt;&lt;span style="color:red;"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-right: 0.5in; margin-left: 0.5in; text-align: left;"&gt;&lt;span style="color:red;"&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;package app;&lt;br /&gt;&lt;br /&gt;import org.apache.struts.action.*;&lt;br /&gt;&lt;br /&gt;public class &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;RegisterForm&lt;/span&gt; extends &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;ActionForm&lt;/span&gt;{&lt;br /&gt;&lt;br /&gt;      private String &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;userName&lt;/span&gt;;&lt;br /&gt;      private String password1;&lt;br /&gt;      private String password2;&lt;br /&gt;&lt;br /&gt;      public String &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;getUserName&lt;/span&gt;(){ return &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;userName&lt;/span&gt;;}&lt;br /&gt;      public String &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;getPassword&lt;/span&gt;1(){ return password1;}&lt;br /&gt;      public String &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;getPassword&lt;/span&gt;2(){ return password2;}&lt;br /&gt;&lt;br /&gt;      public void &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;setUserName&lt;/span&gt;(String &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;userName&lt;/span&gt;){ this.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;userName&lt;/span&gt; = &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;userName&lt;/span&gt;;}&lt;br /&gt;      public void &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;setUserName&lt;/span&gt;(String password1){ this.password1 = password1;}&lt;br /&gt;      public void &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;setUserName&lt;/span&gt;(String password2){ this.password2 = password2;}&lt;br /&gt;&lt;br /&gt;     public &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;ActionWrrors&lt;/span&gt; validate(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;ActionMapping&lt;/span&gt; mapping, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;HttpServletRequest&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;req&lt;/span&gt;){&lt;br /&gt;              &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;ActionErrors&lt;/span&gt; errors = new &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;ActionWrrors&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;if((&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;userName&lt;/span&gt;= =null) || (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;userName&lt;/span&gt;.length()&lt;1)){&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;          errors.add("userName",new &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);" class="blsp-spelling-error" id="SPELLING_ERROR_60"&gt;ActionError&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;("error.userName.required")); if((password1= =null) || (password1.length()&lt;1)){&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;          errors.add("password1",new &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);" class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;ActionError&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;("error.password1.required"));&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;if((password2= =null) || (password2.length()&lt;1)){&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;           errors.add("password2",new &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);" class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;ActionError&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;("error.password2.required"));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;return errors;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin-right: 0.5in; margin-left: 0.5in;"&gt;&lt;/p&gt; &lt;blockquote&gt;&lt;/blockquote&gt; &lt;p class="MsoNormal" style="margin-right: 0.5in; margin-left: 0.5in;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_63"&gt;ActionForward&lt;/span&gt; is the object which Action class uses to return &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_64"&gt;ActionResult&lt;/span&gt; to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_65"&gt;ActionServlet&lt;/span&gt; and then depending on that result &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_66"&gt;ActionServlet&lt;/span&gt; forwards response to any of the view component.&lt;br /&gt;&lt;br /&gt;web.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_67"&gt;xml&lt;/span&gt; is a web application deployment descriptor file. User &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_68"&gt;Needs&lt;/span&gt; to map request to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_69"&gt;ActionServlet&lt;/span&gt; instance and pass struts-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_70"&gt;config&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_71"&gt;xml&lt;/span&gt; file as a parameter to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_72"&gt;ActionServlet&lt;/span&gt; instance. Struts also has a tag library which needs to be configured in web.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_73"&gt;xml&lt;/span&gt; file.&lt;/p&gt;     &lt;p class="MsoNormal" style="margin-right: 0.5in; margin-left: 0.5in;"&gt;&lt;span style="color:red;"&gt;&amp;lt;servlet&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;servlet-name&gt;action&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/servlet-name&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;servlet-class&gt;org.apache.struts.action.ActionServlet&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/servlet-class&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;init-param&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;param-name&gt;config&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/param-name&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;param-value&gt;&lt;br /&gt;                                 /WEB-INF/conf/struts-config.xml&lt;/span&gt;&lt;span style="color:red;"&gt;&lt;br /&gt;                    &amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/param-value&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/init-param&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/servlet&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;servlet-mapping&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;servlet-nameaction&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/servlet-name&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;url-pattern&gt;*.do&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/url-pattern&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/servlet-mapping&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;taglib&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;taglib-uri&gt;/tags/struts-beans&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/taglib-uri&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;taglib-location&gt;/WEB-INF/lib/struts-bean.tld&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/taglib-location&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/taglib&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;taglib&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;taglib-uri&gt;/tags/struts-html&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/taglib-uri&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;taglib-location&gt;/WEB-INF/lib/struts-html.tld&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/taglib-location&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/taglib&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;taglib&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;taglib-uri&gt;/tags/struts-logic&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/taglib-uri&gt;&lt;br /&gt;          &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;taglib-location&gt;/WEB-INF/lib/struts-.tld&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/taglib-location&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:red;"&gt;/taglib&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;     &lt;p class="MsoNormal"&gt;Apart from this user needs to define success.html and failure.html pages and register.do file which is HTML form to enter &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_74"&gt;userName&lt;/span&gt;, password1 and password2.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1096712458602465939-8458950457595848455?l=strutsmvcframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://strutsmvcframework.blogspot.com/feeds/8458950457595848455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1096712458602465939&amp;postID=8458950457595848455' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/8458950457595848455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/8458950457595848455'/><link rel='alternate' type='text/html' href='http://strutsmvcframework.blogspot.com/2007/04/sample-application-of-struts.html' title='Sample application of struts'/><author><name>Kiran Thakkar</name><uri>http://www.blogger.com/profile/06230583140441194599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_zrMXlRn5S-Y/SMwVv7OwadI/AAAAAAAAAF8/IfM2JyDXJkY/S220/kiran+choti.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1096712458602465939.post-9160893491773983713</id><published>2007-04-08T10:15:00.000-07:00</published><updated>2007-05-16T06:20:13.936-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MVC framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Java framework'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><title type='text'>Introduction of struts MVC framework</title><content type='html'>Struts is a Java based web application framework which works on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;MVC&lt;/span&gt; design pattern.  The project was created by Craig &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;McClanahan&lt;/span&gt; in May 2000 and it is widely accepted and used Java framework.&lt;br /&gt;&lt;br /&gt;The reason behind struts widely accepted is, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ITs&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;MVC&lt;/span&gt; framework. Struts clearly differentiates between different tiers of web applications. Model, View and Controller.&lt;br /&gt;&lt;br /&gt;When request comes to server, web application container which could be Tomcat or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;weblogic&lt;/span&gt; or &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;JBoss&lt;/span&gt; forwards request to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;ActionServlet&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ActionServlet&lt;/span&gt; delegates request to one of the Action classes. Action classes generally have business logic defined or they call to helper classes which have implemented business logic.&lt;br /&gt;&lt;br /&gt;Action class based on request performs business logic and forwards request to another Action class or returns to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;ActionServlet&lt;/span&gt; with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;ActionForward&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;ActionForward&lt;/span&gt; is another Action URI, which is mapped to a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;JSP&lt;/span&gt; page which displays data.&lt;br /&gt;&lt;br /&gt;So Action class works as Model, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;JSPs&lt;/span&gt; wok as View and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;ActionServlet&lt;/span&gt; works as controller which decides which Action class to instantiate based on request and then based on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;ActionForward&lt;/span&gt; decides on which &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;JSP&lt;/span&gt;  to be called. Other than that Struts also allows you to use Velocity or Tiles at view layer to make view layer more manageable.&lt;br /&gt;&lt;br /&gt;Total work flow of struts framework:&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;A client requests for a resource with URI that matches with the Action URI pattern defined in deployment descriptor file (web.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;xml&lt;/span&gt;).&lt;/li&gt;   &lt;li&gt;The web application container passes the request to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;ActionServlet&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;   &lt;ul&gt;     &lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;ActionServlet&lt;/span&gt; gets instantiated when application is deployed. It reads struts-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;config&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;xml&lt;/span&gt; file and creates a configuration object.  This configuration object is used to map request with resources like &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;ActionForm&lt;/span&gt; bean or Action class.&lt;/li&gt;     &lt;li&gt;That is why when struts-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;config&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;xml&lt;/span&gt; file changes, we need to redeploy the whole application so as to create a new configuration object.&lt;/li&gt;   &lt;/ul&gt;   &lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;ActionServlet&lt;/span&gt; looks for mapping for the path, If no mapping is found it throws an exception.&lt;/li&gt;   &lt;li&gt;If the mapping specifies a form bean, the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;ActionServlet&lt;/span&gt; sees if there is one already or creates one. If the bean already is play, It resets and populates it from HTTP request.&lt;/li&gt;   &lt;li&gt;If the mapping has validate is set to true and Action bean has defined validate method, then it performs validation. If validation fails then &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;servlet&lt;/span&gt; forwards request to input property of Action mapping with an error message.&lt;/li&gt;   &lt;li&gt;Then &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;servlet&lt;/span&gt; finds the Action type from mapping and instantiates Action class and calls to perform or execute method of Action class.&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Action class has a business logic implementation or it uses classes known as helper classes which has implementation of business logic.&lt;/li&gt;   &lt;li&gt;The Action returns &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;ActionForward&lt;/span&gt; to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;ActionServlet&lt;/span&gt;. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;ActionForward&lt;/span&gt; is another URI which is a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;JSP&lt;/span&gt; page in most cases. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;ActionServlet&lt;/span&gt; then forwards request to that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;JSP&lt;/span&gt; page which render response for the request and sends it to browser.&lt;/li&gt; &lt;/ol&gt; This is a detailed work flow of a typical struts application. Keep in touch i will be writing on Action classes and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;ActionFormBeans&lt;/span&gt; and other configuration in my next posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1096712458602465939-9160893491773983713?l=strutsmvcframework.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://strutsmvcframework.blogspot.com/feeds/9160893491773983713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1096712458602465939&amp;postID=9160893491773983713' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/9160893491773983713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1096712458602465939/posts/default/9160893491773983713'/><link rel='alternate' type='text/html' href='http://strutsmvcframework.blogspot.com/2007/04/introduction-of-struts-mvc-framework.html' title='Introduction of struts MVC framework'/><author><name>Kiran Thakkar</name><uri>http://www.blogger.com/profile/06230583140441194599</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/_zrMXlRn5S-Y/SMwVv7OwadI/AAAAAAAAAF8/IfM2JyDXJkY/S220/kiran+choti.JPG'/></author><thr:total>4</thr:total></entry></feed>
