Unit 7: Design Patterns and Frameworks A framework “is an abstraction in which common code    providing generic functiona...
Struts 1: Overviewdsbw 2011/2012 q1    2
dsbw 2011/2012 q1   3
dsbw 2011/2012 q1   4
Struts 1: Terminology wrt. J2EE Core Patterns                       Struts 1        J2EE Core Patterns                    ...
Struts 1: Example - WoT’s New Userdsbw 2011/2012 q1                    6
Struts 1: Example – user_registration.vm (Velocity template)<html><head> .... </head><body>…<form action = “register.do" m...
Struts 1: Example – Form validationdsbw 2011/2012 q1                     8
Struts 1: Example - RegistrationFormpublic class RegistrationForm extends ActionForm{   protected String reg_username;   /...
Struts 1: Example – Error Messages (Message.properties file)errors.username=(*) Username requirederrors.password=(*) Passw...
Struts 1: Example – Application Error (duplicated username)dsbw 2011/2012 q1                                             11
Struts 1: Example - UserActionpublic class RegisterAction extends Action {public ActionForward execute(ActionMapping mappi...
Struts 1: Example – UserAction (cont.)    catch (BusinessException ex)    {      if (ex.getMessageList().elementAt(0).star...
Struts 1: Example - struts-config.xml (fragment)<action-mappings>  <action path="/register"        type="woTFront.Register...
Struts 1: Example - web.xml (fragment)<servlet>    <servlet-name>action</servlet-name>    <servlet-class>      org.apache....
Struts 1: Example - web.xml (fragment, cont.)<servlet>    <servlet-name>velocity</servlet-name>    <servlet-class>        ...
Struts 2 Struts 2 vs Struts 1 (according to struts.apache.org/2.x)    Enhanced Results - Unlike ActionForwards, Struts 2...
Struts 2: Tagging example                    <s:actionerror/>                    <s:form action="Profile_update" validate=...
Spring MVC Springs own implementation of the Front Controller Pattern Flexible request mapping and handling Full forms ...
Spring Framework Architecture                                                              Spring Web                     ...
Spring MVC: Request Lifecycledsbw 2011/2012 q1               21
Spring MVC: Terminology wrt. J2EE Core Patterns                    Spring MVC      J2EE Core Patterns                     ...
Spring MVC: Setting Up1.    Add the Spring dispatcher servlet to the web.xml2.    Configure additional bean definition fil...
Spring MVC: Controllerspublic class ListCustomersController implements Controller {   private CustomerService customerServ...
Spring MVC: Controllers (cont.) Interface based         Do not have to extend any base classes (as in Struts) Have opti...
JavaServer Faces (JSF) Sun’s “Official” Java-based Web application framework Specifications:       JSF 1.0 (11-03-2004)...
JSF: Application Architecture                    Servlet ContainerClient                    JSF ApplicationDevices        ...
JSF framework: MVC             Request                                Response                    FacesServlet            ...
JSF: Request Processing Lifecycle                                            Response Complete               Response Comp...
JSF: Request Processing Lifecycle Restore Component Tree:       The requesting page’s component tree is retrieved/recrea...
JSF: Request Processing Lifecycle Update Model Values:       The JSF implementation walks the component tree and set the...
JSF: Anatomy of a UI Component                                        Event                                       Handling...
JSF: Standard UI Components UIInput                        UICommand UIOutput                        UIForm UISelectB...
JSF: HTML Tag Library JSF Core Tag Library (prefix: f)         Validator, Event Listeners, Converters JSF Standard Libr...
JSF: HTML Tag Library<f:view><h:form id=”logonForm”>  <h:panelGrid columns=”2”>    <h:outputLabel for=”username”>      <h:...
JSF: Managed (Model) Bean Used to separate presentation from business logic Based on JavaBeans Similar to Struts Action...
What’s new in JSF 2.0? New Page Declaration Language (PDL) based on Apache    Facelets Custom components much easier to ...
References Books:         B. Siggelkow. Jakarta Struts Cookbook. OReilly, 2005         J. Carnell, R. Harrop. Pro Jakar...
Upcoming SlideShare
Loading in …5
×

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

1,377 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,377
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
48
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 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. 2. Struts 1: Overviewdsbw 2011/2012 q1 2
  3. 3. dsbw 2011/2012 q1 3
  4. 4. dsbw 2011/2012 q1 4
  5. 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. 6. Struts 1: Example - WoT’s New Userdsbw 2011/2012 q1 6
  7. 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. 8. Struts 1: Example – Form validationdsbw 2011/2012 q1 8
  9. 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. 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. 11. Struts 1: Example – Application Error (duplicated username)dsbw 2011/2012 q1 11
  12. 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. 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. 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. 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. 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. 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. 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. 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. 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. 21. Spring MVC: Request Lifecycledsbw 2011/2012 q1 21
  22. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 33. JSF: Standard UI Components UIInput  UICommand UIOutput  UIForm UISelectBoolean  UIColumn UISelectItem  UIData UISelectMany  UIPanel UISelectOne UISelectMany UIGraphicdsbw 2011/2012 q1 33
  34. 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. 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. 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. 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. 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

×