building an application … with struts! presented by ted husted [ [email protected] ]
TRANSCRIPT
![Page 2: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/2.jpg)
Building an application … with Struts!
What is this presentation layer framework that has gained such widespread popularity?
Struts, a Model-View-Controller framework from Jakarta, allows clean separation between business logic and its presentation.
This session will introduce Struts to those new to it or want a refresher on the basics.
![Page 3: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/3.jpg)
Goal
Learn the basics of the Struts framework in the context of bootstrapping an application
![Page 4: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/4.jpg)
About Ted Husted
Lead author, Struts in Action
Struts forum manager for JGuru
Struts Committer (team member)
Member, Apache Software Foundation
Working developer (just like you)
![Page 5: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/5.jpg)
About You
Developed web applications
![Page 6: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/6.jpg)
About You
Developed web applications
Developed Java web applications
![Page 7: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/7.jpg)
About You
Developed web applications
Developed Java web applications
Developed Struts applications
![Page 8: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/8.jpg)
About You
Developed web applications
Developed Java web applications
Developed Struts applications
Read Struts articles
![Page 9: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/9.jpg)
About You
Developed web applications
Developed Java web applications
Developed Struts applications
Read Struts articles
Visited Struts website
![Page 10: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/10.jpg)
About You
Developed web applications
Developed Java web applications
Developed Struts applications
Read Struts articles
Visited Struts website
Read Struts books
![Page 11: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/11.jpg)
About You
Developed web applications
Developed Java web applications
Developed Struts applications
Read Struts articles
Visited Struts website
Read Struts books
![Page 12: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/12.jpg)
Learning Objectives
Recognize a MVC architectureFit Struts into an overall development planBuild a Struts application step by stepWork with fundamental Struts components, like ActionForms and Action classesGrok the Struts workflow
![Page 13: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/13.jpg)
Talk Roadmap
What are we building it with?
What do we build first?
What do we build next?
Struts: A mile-high view
![Page 14: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/14.jpg)
Model 1 versus MVC/Model 2
Model 1 – JSP contains business and presentation logicModel 2 – Servlet contains business logic; JSP contains presentation logic
![Page 15: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/15.jpg)
MVC Stereo System
Media – Model
Speakers – View
Receiver - Controller
![Page 16: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/16.jpg)
Model 1 Stereo System
Walkman Something breaks;
cheaper to replace unit With MVC/Model 2, if
you blow a speaker, you can replace a speaker
![Page 17: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/17.jpg)
Presentation versus Business Logic
Presentation Logic – HTML/JSP<bean:write name="custBean" property="discount"/>
Business Logic – Java/JDBCcustBean.setDiscount(db.Rate(custKey));
![Page 18: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/18.jpg)
Selecting a MVC framework
Several good choicesBarracudaJPublishMustangTapestryTurbineWebWorks / Open Symphony
![Page 19: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/19.jpg)
Selecting a MVC framework
Struts – Jack of all tradesComplete enoughEasy enough
![Page 20: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/20.jpg)
Selecting a MVC framework
Struts – Jack of all tradesComplete enoughEasy enoughAnd, gosh,
people like it!
![Page 21: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/21.jpg)
Talk Roadmap
What are we building it with?
What do we build first?
What do we build next?
Struts: A mile-high view
![Page 22: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/22.jpg)
Storyboard
Visio / graphical storyboard
HTML Submit to next page
<form action="result.html">Hardcode a result
Static page with realistic data
![Page 23: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/23.jpg)
Storyboard
![Page 24: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/24.jpg)
![Page 25: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/25.jpg)
What do we build first?
Storyboard
Struts Blank
It’s about the actions
Page 1, Mapping 1
![Page 26: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/26.jpg)
Struts Blank
Empty, semi-complete application
Getting started config files
Initial file structure
Rename WAR to app name e.g. “building.war”
![Page 27: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/27.jpg)
Struts Blank
web.xmlbootstrap
application.properties text messages (i18n)
struts-config.xml framework core
index.jsp, Welcome.jsp
![Page 28: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/28.jpg)
web.xml
<servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>application</param-name> <param-value>ApplicationResources</param-value> </init-param> <init-param> <param-name>config</param-name> <param-value> /WEB-INF/struts-config.xml </param-value> </init-param><!-- … -->
![Page 29: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/29.jpg)
web.xml<servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri> <taglib-location> /WEB-INF/struts-bean.tld </taglib-location>
</taglib>
<!-- . . . -->
![Page 30: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/30.jpg)
struts-config.xml <form-beans>
<!-- properties of data-entry forms <form-bean name="logonForm" type="org.apache.struts.example.LogonForm"/> --> </form-beans>
<global-forwards>
<!-- workflow destinations <forward name="logon" path="/pages/logon.jsp"/> -->
</global-forwards>
![Page 31: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/31.jpg)
struts-config.xml
<action-mappings> <!-- Default "Welcome" action --> <!-- Forwards to Welcome.jsp -->
<action path="/Welcome" forward="/pages/Welcome.jsp"/>
![Page 32: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/32.jpg)
struts-config.xml <!-- Example logon action <action path="/logon" type="org.apache.struts.example.LogonAction" name="logonForm" scope="request" input="/pages/logon.jsp"> </action> -->
<!-- Example logoff action <action path="/logoff" type="org.apache.struts.example.LogoffAction"> <forward name="success" path="/pages/index.jsp"/> </action> -->
</action-mappings>
![Page 33: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/33.jpg)
application.properties
index.title=Struts Starter Applicationindex.heading=Hello World!index.message=To get started on your own application …
![Page 34: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/34.jpg)
Index.jsp
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>
<logic:redirect forward="welcome"/>
<%--
Redirect default requests to Welcome global ActionForward.
By using a redirect, the user-agent will change address to match the path of our Welcome ActionForward.
--%>
![Page 35: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/35.jpg)
![Page 36: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/36.jpg)
welcome.jsp
index.jsp is registered as welcome page
Struts logic tag redirected to “welcome” forward
Welcome forward = “/pages/Welcome.jsp”
Client requests welcome.jsp, retains session, can now use cookies
![Page 37: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/37.jpg)
Template pattern
Struts is a base-line, “fill-in-the-blanks” framework Not an omnibus toolkit Many developer extensions available
Place to plug-in your own extensions Custom JSP tags or Velocimacros Data transformations Workflow heuristics Business objects
![Page 38: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/38.jpg)
What do we build first?
Storyboard
Struts Blank
It’s about the actions
Page 1, Mapping 1
![Page 39: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/39.jpg)
It’s about the actions
<form action=“client-story”>
Our one and only extension point
HTTP request – GET or POSTAction processes requestReturns response to browser
![Page 40: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/40.jpg)
What do we build first?
HTML Storyboard
Struts Blank
It’s about the actions
Page 1, Mapping 1
![Page 41: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/41.jpg)
Page 1, Mapping 1
Rename from search.html, result.html
Change actions to result.do and search.do <form action="/building/search.do"> <form action="/building/result.do">
Add "/search" and "/result" mappings <action path="/search" forward="/search.jsp"/> <action path="/result" forward="/result.jsp"/>
Click-through – Voila! She works
![Page 42: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/42.jpg)
Voila! She works
![Page 43: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/43.jpg)
What do we build first?
1) Capture client stories
2) Build storyboard
3) Bring over pages from storyboard
4) Migrate HTML actions to action-mappings
![Page 44: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/44.jpg)
Talk Roadmap
What are we building it with?
What do we build first?
What do we build next?
Struts: A mile-high view
![Page 45: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/45.jpg)
What do we build next?
Forms and Tags
Action Classes
![Page 46: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/46.jpg)
Forms and Tags
ActionFormParameter to JavaBean conversionValidator extension point
![Page 47: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/47.jpg)
Forms and Tags
SearchForm
HTML tags
Net result: Roundtrip
![Page 48: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/48.jpg)
Forms and Tags
SearchForm Input Properties
county, facility, permit, beforeDate, afterDate Input Validation
TestsMessages
![Page 49: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/49.jpg)
SearchForm
![Page 50: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/50.jpg)
SearchForm private String countyCode = null; public String getCountyCode() { return this.countyCode; }
public void setCountyCode(String countyCode) { this.countyCode = countyCode; }
private String countyName = null; public String getCountyName() { return this.countyName; }
public void setCountyName(String countyName) { this.countyName = countyName; }
![Page 51: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/51.jpg)
SearchForm
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
required(errors,getCountyCode(),"county");
required(errors,getFacilityCode(),"facility");
required(errors,getPermitCode(),"permit");
required(errors,getBdMonth(),"before");
required(errors,getAdMonth(),"after");
return errors;
}
![Page 52: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/52.jpg)
SearchForm protected void required(ActionErrors errors, String field, String name) {
if ((null==field) || (0==field.length())) { errors.add(name, new ActionError("errors.required",name)); }
}
ApplicationResources.properties{0} is required.
![Page 53: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/53.jpg)
HTML Tags
<tr>
<td>Name of County: </td>
<td>
<html:select property="countyCode">
<html:option value="">- select county-</html:option>
<html:option value="41">Oklahoma</html:option>
<html:option value="42">Magrathea</html:option> </html:select>
</td>
</tr>
![Page 54: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/54.jpg)
FormBeans
<form-beans>
<form-bean
name="searchForm"
type="app.http.SearchForm"
/>
</form-beans>
![Page 55: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/55.jpg)
ActionMapping
<action path="/search" forward="/search.jsp"/>
<action path="/result" forward="/result.html" name="searchForm" scope="request" validate="true" input="/search.do"/>
![Page 56: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/56.jpg)
Roundtripping
If input fails, returns to search.jspAny selection retained by JSP tags via the
SearchForm
If input passes, continues to Struts Action or another location (URI)SearchForm is saved in request scope
under attribute name “searchForm”
![Page 57: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/57.jpg)
![Page 58: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/58.jpg)
What do we build next?
Forms and Tags
Action Classes
![Page 59: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/59.jpg)
Action Classes
Input from ActionFormsOutput ActionForwardsPass data through contextBusiness logic adapterList searchPermits(String countyCode, String facilityCode, String permitCode, Date before, Date after);
![Page 60: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/60.jpg)
Action Classes
public class SearchAction extends Action {
public ActionForward perform(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
SearchForm sf = (SearchForm) form;
![Page 61: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/61.jpg)
Action Classes
List result = Repository.searchPermits( sf.getCountyCode(), sf.getFacilityCode(), sf.String permitCode, sf.getBefore(), sf.getAfter());
if (null==result) return mapping.findForward("failure");
request.setAttribute(“LIST”,list); return mapping.findForward("success");
}
}
![Page 62: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/62.jpg)
Action Classes
Servlet delegate
Singletons
Thread-safe
May be shared by ActionMappingsDecorator pattern
![Page 63: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/63.jpg)
Struts: A mile high view
![Page 64: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/64.jpg)
![Page 65: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/65.jpg)
![Page 66: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/66.jpg)
![Page 67: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/67.jpg)
![Page 68: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/68.jpg)
![Page 69: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/69.jpg)
![Page 70: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/70.jpg)
![Page 71: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/71.jpg)
![Page 72: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/72.jpg)
validation
![Page 73: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/73.jpg)
![Page 74: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/74.jpg)
![Page 75: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/75.jpg)
![Page 76: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/76.jpg)
![Page 77: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/77.jpg)
![Page 78: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/78.jpg)
![Page 79: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/79.jpg)
![Page 80: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/80.jpg)
![Page 81: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/81.jpg)
![Page 82: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/82.jpg)
Summary
In this talk, we walked through the initial steps most people would take in order to start work on a Struts application. We covered:
Selecting a MVC architecture and the web platform
Building a Struts application from storyboards and client stories
The overall Struts architecture and control flow
![Page 83: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/83.jpg)
For more information
Tutorials
Articles and presentations
Books
Seminars
Mailing List Archives
Data Access Systems
Presentation Systems
Code Generators and GUIs
Contributor Taglibs
Projects and Examples
Struts Special Interest Groups
and more.
The best resource for finding our more about Struts is still the Resources page on the Struts web site. It is regularly updated and contains links to everything Struts, including
![Page 84: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/84.jpg)
Conclusion
Make sure that Struts is the right tool for the job
Build your application, then adapt it to Struts
Struts is your presentation layer, but your application
has layers of its own.
![Page 85: Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]](https://reader036.vdocument.in/reader036/viewer/2022062421/56649db15503460f94a9fd72/html5/thumbnails/85.jpg)