850 likes | 955 Views
Building an application … with Struts!. Presented by Ted Husted [ ted@husted.com ]. Building an application … with Struts!. What is this presentation layer framework that has gained such widespread popularity?
E N D
Building an application … with Struts! Presented by Ted Husted [ ted@husted.com ]
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.
Goal Learn the basics of the Struts framework in the context of bootstrapping an application
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)
About You • Developed web applications
About You • Developed web applications • Developed Java web applications
About You • Developed web applications • Developed Java web applications • Developed Struts applications
About You • Developed web applications • Developed Java web applications • Developed Struts applications • Read Struts articles
About You • Developed web applications • Developed Java web applications • Developed Struts applications • Read Struts articles • Visited Struts website
About You • Developed web applications • Developed Java web applications • Developed Struts applications • Read Struts articles • Visited Struts website • Read Struts books
About You • Developed web applications • Developed Java web applications • Developed Struts applications • Read Struts articles • Visited Struts website • Read Struts books
Learning Objectives • Recognize a MVC architecture • Fit Struts into an overall development plan • Build a Struts application step by step • Work with fundamental Struts components, like ActionForms and Action classes • Grok the Struts workflow
Talk Roadmap • What are we building it with? • What do we build first? • What do we build next? • Struts: A mile-high view
Model 1 versus MVC/Model 2 • Model 1 – JSP contains business and presentation logic • Model 2 – Servlet contains business logic; JSP contains presentation logic
MVC Stereo System • Media – Model • Speakers – View • Receiver - Controller
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
Presentation versus Business Logic • Presentation Logic – HTML/JSP • <bean:write name="custBean" property="discount"/> • Business Logic – Java/JDBC • custBean.setDiscount(db.Rate(custKey));
Selecting a MVC framework • Several good choices • Barracuda • JPublish • Mustang • Tapestry • Turbine • WebWorks / Open Symphony
Selecting a MVC framework • Struts – Jack of all trades • Complete enough • Easy enough
Selecting a MVC framework • Struts – Jack of all trades • Complete enough • Easy enough • And, gosh, people like it!
Talk Roadmap • What are we building it with? • What do we build first? • What do we build next? • Struts: A mile-high view
Storyboard • Visio / graphical storyboard • HTML • Submit to next page • <form action="result.html"> • Hardcode a result • Static page with realistic data
What do we build first? • Storyboard • Struts Blank • It’s about the actions • Page 1, Mapping 1
Struts Blank • Empty, semi-complete application • Getting started config files • Initial file structure • Rename WAR to app name • e.g. “building.war”
Struts Blank • web.xml • bootstrap • application.properties • text messages (i18n) • struts-config.xml • framework core • index.jsp, Welcome.jsp
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><!-- … -->
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> <!-- . . . -->
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>
struts-config.xml <action-mappings> <!-- Default "Welcome" action --> <!-- Forwards to Welcome.jsp --> <action path="/Welcome" forward="/pages/Welcome.jsp"/>
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>
application.properties index.title=Struts Starter Applicationindex.heading=Hello World!index.message=To get started on your own application …
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. --%>
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
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
What do we build first? • Storyboard • Struts Blank • It’s about the actions • Page 1, Mapping 1
It’s about the actions • <form action=“client-story”> • Our one and only extension point • HTTP request – GET or POST • Action processes request • Returns response to browser
What do we build first? • HTML Storyboard • Struts Blank • It’s about the actions • Page 1, Mapping 1
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
What do we build first? • Capture client stories • Build storyboard • Bring over pages from storyboard • Migrate HTML actions to action-mappings
Talk Roadmap • What are we building it with? • What do we build first? • What do we build next? • Struts: A mile-high view
What do we build next? • Forms and Tags • Action Classes
Forms and Tags • ActionForm • Parameter to JavaBean conversion • Validator extension point
Forms and Tags • SearchForm • HTML tags • Net result: Roundtrip
Forms and Tags • SearchForm • Input Properties • county, facility, permit, beforeDate, afterDate • Input Validation • Tests • Messages
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; }