Unit 07: Design Patterns and Frameworks (3/3)
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Unit 07: Design Patterns and Frameworks (3/3)

on

  • 888 views

 

Statistics

Views

Total Views
888
Views on SlideShare
888
Embed Views
0

Actions

Likes
0
Downloads
31
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Unit 07: Design Patterns and Frameworks (3/3) Presentation Transcript

  • 1. Unit 7: Design Patterns and Frameworks A framework “is an abstraction in which common code providing generic functionality can be selectively overridden or specialized by user code providing specific functionality.” (from Wikipedia) Here we are going to consider 3 MVC-based Web frameworks for Java:  Struts 1  Spring MVC  JavaServer Facesdsbw 2011/2012 q1 1
  • 2. Struts 1: Overviewdsbw 2011/2012 q1 2
  • 3. dsbw 2011/2012 q1 3
  • 4. dsbw 2011/2012 q1 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 Handledsbw 2011/2012 q1 5
  • 6. Struts 1: Example - WoT’s New Userdsbw 2011/2012 q1 6
  • 7. Struts 1: Example – user_registration.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 2011/2012 q1 7
  • 8. Struts 1: Example – Form validationdsbw 2011/2012 q1 8
  • 9. Struts 1: Example - RegistrationFormpublic class RegistrationForm extends ActionForm{ protected String reg_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 (reg_username == null || reg_username.equals("")) { errors.add(“wrongUsername", new ActionMessage("errors.username”)); } // .... Remaining validations return errors; }}dsbw 2011/2012 q1 9
  • 10. Struts 1: Example – Error Messages (Message.properties file)errors.username=(*) Username requirederrors.password=(*) Password requirederrors.regCAPTCHA=(*) Invalid CAPTCHA valueserrors.duplicateUser = Username {0} is already taken by another userdsbw 2011/2012 q1 10
  • 11. Struts 1: Example – Application Error (duplicated username)dsbw 2011/2012 q1 11
  • 12. Struts 1: Example - UserActionpublic class RegisterAction extends Action {public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){ String username = ((RegistrationForm) form).getReg_username(); String password = ((RegistrationForm) form).getReg_password(); Connection dbConnection = … ; try { Transaction trans = Transaction.newTransaction("RegisterTrans"); trans.getParameterMap().put("dbConnection", dbConnection); trans.getParameterMap().put("username", username); trans.getParameterMap().put("password", password); trans.execute(); request.getSession().setAttribute("loggedUserNAME",username); request.getSession().setAttribute("loggedUserID",trans.getPara meterMap().get("userID")); return (mapping.findForward("success")); }dsbw 2011/2012 q1 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 2011/2012 q1 13
  • 14. Struts 1: Example - struts-config.xml (fragment)<action-mappings> <action path="/register" type="woTFront.RegisterAction" name="registrationForm" scope="request" validate="true" input="/user_registration.vm"> <forward name="failure" path="/error.vm"/> <forward name="duplicateUser“ path="/user_registration.vm"/> <forward name="success" path="/wall" redirect="true"/> </action>…</action-mappings>dsbw 2011/2012 q1 14
  • 15. Struts 1: Example - web.xml (fragment)<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><servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>dsbw 2011/2012 q1 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 2011/2012 q1 16
  • 17. 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 dont 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 2011/2012 q1 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 2011/2012 q1 18
  • 19. Spring MVC Springs 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 Librarydsbw 2011/2012 q1 19
  • 20. Spring Framework Architecture Spring Web Spring ORM WebApplicationContext Hibernate support Struts integration iBatis support Tiles integration Spring MVC JDO support Web utilities Spring AOP Web MVC Framework AOP infrastructure JSP support Metadata support Velocity/FreeMarker Declarative transaction support management PFD/Excel support Spring DAO Spring Context Transaction Infrastructure ApplicationContext JDBC support JNDI, EJB support DAO support Remoting Spring Core IoC Containerdsbw 2011/2012 q1 20
  • 21. Spring MVC: Request Lifecycledsbw 2011/2012 q1 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 Helperdsbw 2011/2012 q1 22
  • 23. Spring MVC: Setting Up1. Add the Spring dispatcher servlet to the web.xml2. Configure additional bean definition files in web.xml3. Write Controller classes and configure them in a bean definition file, typically META-INF/<appl>-servlet.xml4. Configure view resolvers that map view names to to views (JSP, Velocity etc.)5. Write the JSPs or other views to render the UIdsbw 2011/2012 q1 23
  • 24. Spring MVC: Controllerspublic 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 dispatcherdsbw 2011/2012 q1 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 controllerdsbw 2011/2012 q1 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 (28-06-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 tooleddsbw 2011/2012 q1 26
  • 27. JSF: Application Architecture Servlet ContainerClient JSF ApplicationDevices Business DB Phone Objects JSF Framework PDA Model Objects Laptop EJB Containerdsbw 2011/2012 q1 27
  • 28. JSF framework: MVC Request Response FacesServlet Component Model Objects Tree Managed JavaBeans View Resources Delegates Config JavaBeans Converters Property Files Validators XML Renderers Action Handlers Business ObjectsController & Event EJB Model Listeners JDO JDBCdsbw 2011/2012 q1 28
  • 29. JSF: Request Processing Lifecycle Response Complete Response CompleteRequest Restore Apply Request Process Process Process Component Value Events Validations Events Tree Render Response Response Complete Response CompleteResponse Render Process Invoke Process Update Model Response Events Application Events Values Conversion Errors Validation or Conversion Errorsdsbw 2011/2012 q1 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 2011/2012 q1 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 components 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 clientdsbw 2011/2012 q1 31
  • 32. JSF: Anatomy of a UI Component Event Handling Render Model binds has has Id has has Local Value UIComponent Validators Attribute Map has has Child Converters UIComponentdsbw 2011/2012 q1 32
  • 33. JSF: Standard UI Components UIInput  UICommand UIOutput  UIForm UISelectBoolean  UIColumn UISelectItem  UIData UISelectMany  UIPanel UISelectOne UISelectMany UIGraphicdsbw 2011/2012 q1 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 JSPdsbw 2011/2012 q1 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 2011/2012 q1 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 2011/2012 q1 36
  • 37. What’s new in JSF 2.0? New Page Declaration Language (PDL) based on Apache Facelets Custom components much easier to develop Improved Ajax integration and supportdsbw 2011/2012 q1 37
  • 38. References Books:  B. Siggelkow. Jakarta Struts Cookbook. OReilly, 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/javaserverfacesdsbw 2011/2012 q1 38