[DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3)

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    1 Favorite

    [DSBW Spring 2009] Unit 07: WebApp Design Patterns & Frameworks (3/3) - Presentation Transcript

    1. Unit 7: Design Patterns and Frameworks  “A framework is a defined support structure in which another software project can be organized and developed. A framework may include support programs, code libraries, a scripting language, or other software to help develop and glue together the different components of a software project” (from Wikipedia)  Here we are going to consider 3 MVC-based Web frameworks for Java: Struts 1  Spring MVC  JavaServer Faces  dsbw 2008/2009 2q 1
    2. Struts 1: Overview dsbw 2008/2009 2q 2
    3. dsbw 2008/2009 2q 3
    4. dsbw 2008/2009 2q 4
    5. Struts 1: Terminology wrt. J2EE Core Patterns Struts 1 J2EE Core Patterns Implementation Concept ActionServlet Front Controller RequestProcessor Application Controller UserAction Businesss Helper ActionMapping View Mapper ActionForward View Handle dsbw 2008/2009 2q 5
    6. Struts 1: Example - Wall’s New User dsbw 2008/2009 2q 6
    7. Struts 1: Example – wall_register.vm (Velocity template) <html><head> .... </head> <body> … <form action = “register.do\" method=\"post\"> User’s Nickname: <input name=“username\" value=\"$!registrationForm.username\" size=40> $!errors.wrongUsername.get(0) Password : <input name=“userpassword“ size=40> $!errors.wrongPassword.get(0) <!–- CAPTCHA CODE --> <input type=\"submit\" name=\"insert\" value=“insert\"> </form> <center>$!errors.regDuplicate.get(0)</center> </body></html> dsbw 2008/2009 2q 7
    8. Struts 1: Example – Form validation dsbw 2008/2009 2q 8
    9. Struts 1: Example - RegistrationForm public class RegistrationForm extends ActionForm { protected String username; // ... The remaining form attributes + getter & setter methods public void reset(ActionMapping mapping, HttpServletRequest request) { /* ... Attribute initialization */ } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (username== null || username.equals(\"\")) { errors.add(“wrongUsername\", new ActionMessage(\"errors.username”)); } // .... Remaining validations return errors; } } dsbw 2008/2009 2q 9
    10. Struts 1: Example – Error Messages (Message.properties file) errors.username=(*) Username required errors.password=(*) Password required errors.regCAPTCHA=(*) Invalid CAPTCHA values errors.duplicateUser = Username '{0}' is already taken by another user dsbw 2008/2009 2q 10
    11. Struts 1: Example – Application Error (duplicated username) dsbw 2008/2009 2q 11
    12. Struts 1: Example - UserAction public class RegisterAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String username = ((RegistrationForm) form).getUsername(); String password = ((RegistrationForm) form).getUserpassword(); TransactionFactory txf = (TransactionFactory) request. aaaagetSession().getServletContext().getAttribute(\"transactionFactory\"); try { Transaction trans = txf.newTransaction(\"RegisterTrans\"); trans.getParameterMap().put(\"username\", username); trans.getParameterMap().put(\"password\", password); trans.execute(); request.getSession().setAttribute(\"user\",username); request.getSession().setAttribute(\"userID\", trans.getParameterMap().get(\"userID\")); return (mapping.findForward(\"success\")); } dsbw 2008/2009 2q 12
    13. Struts 1: Example – UserAction (cont.) catch (BusinessException ex) { if (ex.getMessageList().elementAt(0).startsWith(\"Username\")) { ActionMessages errors = new ActionMessages(); errors.add(\"regDuplicate\", new ActionMessage(\"errors.duplicateUser\",username)); this.saveErrors(request, errors); form.reset(mapping,request); return (mapping.findForward(\"duplicateUser\")); } else { request.setAttribute(\"theList\",ex.getMessageList()); return (mapping.findForward(\"failure\")); } } } } dsbw 2008/2009 2q 13
    14. Struts 1: Example - struts-config.xml (fragment) <action-mappings> <action path=\"/register\" type=\"wallFront.RegisterAction\" name=\"registrationForm\" scope=\"request\" validate=\"true\" input=\"/wall_register.vm\"> <forward name=\"failure\" path=\"/error.vm\"/> <forward name=\"duplicateUser“ path=\"/wall_register.vm\"/> <forward name=\"success\" path=\"/wall\" redirect=\"true\"/> </action> … </action-mappings> dsbw 2008/2009 2q 14
    15. Struts 1: Example - web.xml (fragment) <!-- Standard Action Servlet Configuration --> <servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> </servlet> <!-- Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> dsbw 2008/2009 2q 15
    16. Struts 1: Example - web.xml (fragment, cont.) <servlet> <servlet-name>velocity</servlet-name> <servlet-class> org.apache.velocity.tools.view.servlet.VelocityViewServlet </servlet-class> <init-param> <param-name>org.apache.velocity.toolbox</param-name> <param-value>/WEB-INF/toolbox.xml</param-value> </init-param> <init-param> <param-name>org.apache.velocity.properties</param-name> <param-value>/WEB-INF/velocity.properties</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>velocity</servlet-name> <url-pattern>*.vm</url-pattern> </servlet-mapping> dsbw 2008/2009 2q 16
    17. Struts 2  Struts 1 + Webwork = Struts 2  Struts 2 vs Struts 1 (according to struts.apache.org/2.x)  Enhanced Results - Unlike ActionForwards, Struts 2 Results can actually help prepare the response.  Enhanced Tags - Struts2 tags don't just output data, but provide stylesheet- driven markup, so that we consistent pages can be created with less code.  POJO forms - No more ActionForms: we can use any JavaBean we like or put properties directly on our Action classes.  POJO Actions - Any class can be used as an Action class. Even the interface is optional!  First-class AJAX support - The AJAX theme gives interactive applications a boost. Easy-to-test Actions – Struts 2 Actions are HTTP independent and can be  tested without resorting to mock objects.  Intelligent Defaults - Most framework configuration elements have a default value that we can set and forget. dsbw 2008/2009 2q 17
    18. Struts 2: Tagging example <s:actionerror/> <s:form action=\"Profile_update\" validate=\"true\"> <s:textfield label=\"Username\" name=\"username\"/> <s:password label=\"Password\" name=\"password\"/> <s:password label=\"(Repeat) Password\" name=\"password2\"/> <s:textfield label=\"Full Name\" name=\"fullName\"/> <s:textfield label=\"From Address\" name=\"fromAddress\"/> <s:textfield label=\"Reply To Address\" name=\"replyToAddress\"/> <s:submit value=\"Save\" name=\"Save\"/> <s:submit action=\"Register_cancel\" value=\"Cancel\" name=\"Cancel\" onclick=\"form.onsubmit=null\"/> </s:form> dsbw 2008/2009 2q 18
    19. Spring MVC  Spring's own implementation of the Front Controller Pattern  Flexible request mapping and handling  Full forms support  Supports several view technologies  JSP/Tiles, Velocity, FreeMarker  Support integration with other MVC frameworks  Struts, Tapestry, JavaServerFaces, WebWork  Provides a JSP Tag Library dsbw 2008/2009 2q 19
    20. Spring Framework Architecture Spring Web Spring ORM WebApplicationContext Hibernate support Struts integration Spring MVC iBatis support Tiles integration Spring AOP JDO support Web MVC Web utilities AOP infrastructure Framework Metadata support JSP support Declarative transaction Velocity/FreeMarker Spring Context Spring DAO management support PFD/Excel support Transaction Infrastructure ApplicationContext JDBC support JNDI, EJB support DAO support Remoting Spring Core IoC Container dsbw 2008/2009 2q 20
    21. Spring MVC: Request Lifecycle dsbw 2008/2009 2q 21
    22. Spring MVC: Terminology wrt. J2EE Core Patterns Spring MVC J2EE Core Patterns Concept DispatcherServlet Front Controller / Application Controller HandlerMapping Command Mapper ModelAndView View Handle / Presentation Model ViewResolver View Mapper Controller Business Helper dsbw 2008/2009 2q 22
    23. Spring MVC: Setting Up 1. Add the Spring dispatcher servlet to the web.xml 2. Configure additional bean definition files in web.xml 3. Write Controller classes and configure them in a bean definition file, typically META-INF/<appl>-servlet.xml 4. Configure view resolvers that map view names to to views (JSP, Velocity etc.) 5. Write the JSPs or other views to render the UI dsbw 2008/2009 2q 23
    24. Spring MVC: Controllers public class ListCustomersController implements Controller { private CustomerService customerService; public void setCustomerService(CustomerService customerService) { this.customerService = customerService; } public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception { return new ModelAndView(“customerList”, “customers”, customerService.getCustomers()); } }  ModelAndView object is simply a combination of a named view and a Map of objects that are introduced into the request by the dispatcher dsbw 2008/2009 2q 24
    25. Spring MVC: Controllers (cont.)  Interface based Do not have to extend any base classes (as in Struts)   Have option of extending helpful base classes Multi-Action Controllers   Command Controllers Dynamic binding of request parameters to POJO (no  ActionForms) Form Controllers  Hooks into cycle for overriding binding, validation, and inserting  reference data Validation (including support for Commons Validation)  Wizard style controller  dsbw 2008/2009 2q 25
    26. JavaServer Faces (JSF)  Sun’s “Official” Java-based Web application framework  Specifications:  JSF 1.0 (11-03-2004)  JSF 1.1 (25-05-2004)  JSF 1.2 (11-05-2006)  JSF 2.0 (2009?)  Main characteristics: UI component state management across requests   Mechanism for wiring client-generated events to server side application code  Allow custom UI components to be easily built and re-used  A well-defined request processing lifecycle  Designed to be tooled dsbw 2008/2009 2q 26
    27. JSF: Application Architecture Servlet Container Client JSF Application Devices Business DB Phone Objects JSF Framework PDA Model Objects Laptop EJB Container dsbw 2008/2009 2q 27
    28. JSF framework: MVC Request Response Model Objects Component FacesServlet Tree Managed JavaBeans View Resources Delegates JavaBeans Converters Config Property Files Validators XML Renderers Action Business Objects Handlers Controller EJB Model & Event JDO Listeners JDBC dsbw 2008/2009 2q 28
    29. JSF: Request Processing Lifecycle Response Complete Response Complete Restore Request Apply Request Process Process Process Component Value Events Validations Events Tree Render Response Response Complete Response Complete Response Render Process Invoke Process Update Model Response Events Application Events Values Conversion Errors Validation or Conversion Errors dsbw 2008/2009 2q 29
    30. JSF: Request Processing Lifecycle  Restore Component Tree: The requesting page’s component tree is retrieved/recreated.   Stateful information about the page (if existed) is added to the request.  Apply Request Value:  Each component in the tree extracts its new value from the request parameters by using its decode method.  If the conversion of the value fails, an error message associated with the component is generated and queued .  If events have been queued during this phase, the JSF implementation broadcasts the events to interested listeners.  Process Validations:  The JSF implementation processes all validators registered on the components in the tree. It examines the component attributes that specify the rules for the validation and compares these rules to the local value stored for the component. dsbw 2008/2009 2q 30
    31. JSF: Request Processing Lifecycle  Update Model Values:  The JSF implementation walks the component tree and set the corresponding model object properties to the components' local values.  Only the bean properties pointed at by an input component's value attribute are updated  Invoke Application:  Action listeners and actions are invoked  The Business Logic Tier may be called  Render Response:  Render the page and send it back to client dsbw 2008/2009 2q 31
    32. JSF: Anatomy of a UI Component Event Render Handling Model binds has has Id has has Validators UIComponent Local Value Attribute Map has has Child Converters UIComponent dsbw 2008/2009 2q 32
    33. JSF: Standard UI Components  UIInput  UICommand  UIOutput  UIForm  UISelectBoolean  UIColumn  UISelectItem  UIData  UISelectMany  UIPanel  UISelectOne  UISelectMany  UIGraphic dsbw 2008/2009 2q 33
    34. JSF: HTML Tag Library  JSF Core Tag Library (prefix: f)  Validator, Event Listeners, Converters  JSF Standard Library (prefix: h)  Express UI components in JSP dsbw 2008/2009 2q 34
    35. JSF: HTML Tag Library <f:view> <h:form id=”logonForm”> <h:panelGrid columns=”2”> <h:outputLabel for=”username”> <h:outputText value=”Username:”/> </h:outputLabel> <h:inputText id=”username” value=”#{logonBean.username}”/> <h:outputLabel for=”password”> <h:outputText value=”Password:”/> </h:outputLabel> <h:inputSecret id=”password” value=”#{logonBean.password}”/> <h:commandButton id=”submitButton” type=”SUBMIT” action=”#{logonBean.logon}”/> <h:commandButton id=”resetButton” type=”RESET”/> </h:panelGrid> </h:form> </f:view> dsbw 2008/2009 2q 35
    36. JSF: Managed (Model) Bean  Used to separate presentation from business logic  Based on JavaBeans  Similar to Struts ActionForm concept  Can also be registered to handle events and conversion and validation functions  UI Component binding example: <h:inputText id=”username” value=”#{logonBean.username}”/> dsbw 2008/2009 2q 36
    37. References  Books:  B. Siggelkow. Jakarta Struts Cookbook. O'Reilly, 2005  J. Carnell, R. Harrop. Pro Jakarta Struts, 2nd Edition. Apress, 2004  C. Walls, R. Breidenbach. Spring in Action. Manning, 2006.  B. Dudney, J. Lehr, B. Willis, L. Mattingly. Mastering JavaServer Faces. Willey, 2004.  Web sites:  struts.apache.org  rollerjm.free.fr/pro/Struts11.html  www.springframework.org  static.springframework.org/spring/docs/1.2.x/reference/mvc.html  java.sun.com/javaee/javaserverfaces dsbw 2008/2009 2q 37

    + Carles FarréCarles Farré, 6 months ago

    custom

    626 views, 1 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 626
      • 626 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 1
    • Downloads 0
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories