1 / 77

Introduction to Struts

STRUTS Part of the Jakarta Project Sponsored by the Apache Software Foundation Developed by: Roger W Barnes of Project Refinery, Inc. Introduction to Struts. STRUTS Objectives. Course Overview Unit 1 - Model-View-Controller Design Pattern Unit 2 - Model Components

heidi
Download Presentation

Introduction to Struts

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. STRUTSPart of the Jakarta ProjectSponsored by theApache Software FoundationDeveloped by: Roger W Barnes of Project Refinery, Inc. Introduction to Struts Project Refinery, Inc.

  2. STRUTS Objectives • Course Overview • Unit 1 - Model-View-Controller Design Pattern • Unit 2 - Model Components • Unit 3 - View Components • Unit 4 - Controller Components • Unit 5 - Tag Libraries Project Refinery, Inc.

  3. STRUTS Objectives • Unit 6 - STRUTS Configuration File • Unit 7 - Web Application Descriptor File • Unit 8 - Application Resources File • Unit 9 – Resources Project Refinery, Inc.

  4. Model-View-Controller Design Pattern Unit 1 Project Refinery, Inc.

  5. STRUTS MVC Design Pattern • Central controller mediates application flow • Controller delegates to appropriate handler • Handlers are tied to model components • Model encapsulates business logic • Control forwarded back through the Controller to the appropriate View Project Refinery, Inc.

  6. STRUTS MVC Design Pattern Project Refinery, Inc.

  7. STRUTS MVC Design Pattern • 3 Major Components in STRUTS • Servlet controller (Controller) • Java Server Pages (View) • Application Business Logic (Model) • Controller bundles and routes HTTP request to other objects in framework • Controller parses configuration file Project Refinery, Inc.

  8. STRUTS MVC Design Pattern • Configuration file contains action mappings (determines navigation) • Controller uses mappings to turn HTTP requests into application actions • Mapping must specify • A request path • Object type to act upon the request Project Refinery, Inc.

  9. Model Components Unit 2 Project Refinery, Inc.

  10. STRUTS Model Components • Model divided into concepts • Internal state of the system • Actions that can change that state • Internal state of system represented by • JavaBeans • Enterprise JavaBeans Project Refinery, Inc.

  11. STRUTS Model Components • JavaBeans and Scope • Page – visible within a single JSP page, for the lifetime of the current request • Request – visible within a single JSP page, as well as to any page or servlet that is included in this page, or forwarded to by this page • Session – visible to all JSP pages and servlets that participate in a particular user session, across one or more requests • Application - visible to all JSP pages and servlets that are part of a web application Project Refinery, Inc.

  12. STRUTS Model Components • ActionForm Beans • Extends the ActionForm class • Create one for each input form in the application • If defined in the ActionMapping configuration file, the Controller Servlet will perform the following: • Check session for instance of bean of appropriate class • If no session bean exists, one is created automatically • For every request parameter whose name corresponds to the name of a property in the bean, the corresponding setter method will be called • The updated ActionForm bean will be passed to the Action Class perform() method when it is called, making these values immediately available Project Refinery, Inc.

  13. STRUTS Model Components • When coding ActionForm beans consider: • The ActionForm class itself requires no specific methods to be implemented. It is used to identify the role these particular beans play in the overall architecture. Typically, an ActionForm bean will have only property getter and property setter methods, with no business logic • The ActionForm object also offers a standard validation mechanism. If you override a "stub" method, and provide error messages in the standard application resource, Struts will automatically validate the input from the form Project Refinery, Inc.

  14. STRUTS Model Components • Continued • Define a property (with associated getXxx() and setXxx() methods) for each field that is present in the form. The field name and property name must match according to the usual JavaBeans conventions • Place a bean instance on your form, and use nested property references. For example, you have a "customer" bean on your Action Form, and then refer to the property "customer.name" in your JSP view. This would correspond to the methods customer.getName() and customer.setName(string Name) on your customer bean Project Refinery, Inc.

  15. STRUTS Model Components • System State Beans • Actual state of a system is normally represented as a set of one or more JavaBeans classes, whose properties define the current state • A shopping cart system, for example, will include a bean that represents the cart being maintained for each individual shopper, and will (among other things) include the set of items that the shopper has currently selected for purchase Project Refinery, Inc.

  16. STRUTS Model Components • Business Logic Beans • Should encapsulate the functional logic of your application as method calls on JavaBeans designed for this purpose • For maximum code re-use, business logic beans should be designed and implemented so that they do not know they are being executed in a web application environment • For small to medium sized applications, business logic beans might be ordinary JavaBeans that interact with system state beans passed as arguments, or ordinary JavaBeans that access a database using JDBC calls Project Refinery, Inc.

  17. STRUTS Model Components • Business Logic Beans - Continued • For larger applications, these beans will often be stateful or stateless Enterprise JavaBeans (EJBs) Project Refinery, Inc.

  18. STRUTS Model Components • Accessing Relational Databases • Struts can define the datasources for an application from within its standard configuration file • A simple JDBC connection pool is also provided Project Refinery, Inc.

  19. View Components Unit 3 Project Refinery, Inc.

  20. STRUTS View Components • Internationalized Messages • Struts builds upon Java platform to provide assistance for building internationalized and localized applications • Locale - fundamental Java class that supports internationalization • ResourceBundle - supports messages in multiple languages • PropertyResourceBundle - standard implementation of ResourceBundle that allows you to define resources using the same "name=value" syntax used to initialize properties files • MessageFormat - allows you to replace portions of a message string with arguments specified at run time • MessageResources - lets you treat a set of resource bundles like a database, and allows you to request a particular message string for a particular Locale Project Refinery, Inc.

  21. STRUTS View Components • ApplicationResources.properties • Contains the messages in the default language for your server. If your default language is English, you might have an entry like this: prompt.hello=Hello • ApplicationResources_xx.properties • Contains the same messages in the language whose ISO language code is "xx" Project Refinery, Inc.

  22. STRUTS View Components • Forms and FormBean interactions • HTML Forms and their limitations • Errors not easily handled Project Refinery, Inc.

  23. STRUTS View Components <%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <html:html> <head> <title> <bean:message key="logon.title"/> </title> <body bgcolor="white"> <html:errors/> <html:form action=“/logonpath.do"> <table border="0" width="100%"> <tr> <th align="right"> <html:message key="prompt.username"/> </th> <td align="left"> <html:text property="username" size="16"/> </td> </tr> <tr> <td align="right"> <html:submit> <bean:message key="button.submit"/> </html:submit> </td> Project Refinery, Inc.

  24. STRUTS View Components • Building Forms with Struts • The taglib directive tells the JSP page compiler where to find the tag library descriptor for the Struts tag library • message tag is used to look up internationalized message strings from a MessageResources object containing all the resources for this application • The errors tag displays any error messages that have been stored by a business logic component, or nothing if no errors have been stored Project Refinery, Inc.

  25. STRUTS View Components • Building Forms with Struts – continued • The form tag renders an HTML <form> element, based on the specified attributes • The form tag also associates all of the fields within this form with a request scoped FormBean that is stored under the key FormName • The form bean can also be specified in the Struts configuration file, in which case the Name and Type can be omitted here • The text tag renders an HTML <input> element of type "text“ • The submit and reset tags generate the corresponding buttons at the bottom of the form Project Refinery, Inc.

  26. STRUTS View Components • Input field types supported • checkboxes • hidden fields • password input fields • radio buttons • reset buttons • select lists • options • submit buttons • text input fields • textareas Project Refinery, Inc.

  27. STRUTS View Components • Useful Presentation Tags • [logic] iterate repeats its tag body once for each element of a specified collection (which can be an Enumeration, a Hashtable, a Vector, or an array of objects) • [logic] present depending on which attribute is specified, this tag checks the current request, and evaluates the nested body content of this tag only if the specified value is present • [logic] notPresent the companion tag to present, notPresent provides the same functionality when the specified attribute is not present Project Refinery, Inc.

  28. STRUTS View Components • Useful Presentation Tags – continued • [html] link generates a HTML <a> element as an anchor definition or a hyperlink to the specified URL, and automatically applies URL encoding to maintain session state in the absence of cookie support • [html] img generates a HTML <img> element with the ability to dynamically modify the URLs specified by the "src" and "lowsrc" attributes in the same manner that <html:link> can • [bean] parameter retrieves the value of the specified request parameter, and defines the result as a page scope attribute of type String or String Project Refinery, Inc.

  29. STRUTS View Components • Automatic Form Validation • Struts offers an additional facility to validate the input fields it has received • To utilize this feature, override the validate() method in your ActionForm class • The validate() method is called by the controller servlet after the bean properties have been populated, but before the corresponding action class's perform() method is invoked Project Refinery, Inc.

  30. STRUTS View Components • Page Composition with Includes • The development of the various segments of a site is easier if you can divide up the work, and assign different developers to the different segments • Use the include capability of JavaServer Pages technology to combine the results into a single result page, or use the include tag provided with Struts Project Refinery, Inc.

  31. STRUTS View Components • Page Composition with Includes – continued • There are three types of include available, depending on when you want the combination of output to occur: • An <%@ include file="xxxxx" %> directive can include a file that contains java code or jsp tags • The include action (<jsp:include page="xxxxx" flush="true" />) is processed at request time, and is handled transparently by the server • The bean:include tag takes either a an argument "forward" representing a logical name mapped to the jsp to include, or the "id" argument, which represents a page context String variable to print out to the jsp page Project Refinery, Inc.

  32. Controller Components Unit 4 Project Refinery, Inc.

  33. STRUTS Controller Components • Struts includes a Servlet that implements the primary function of mapping a request URI to an Action class (ActionServlet) Project Refinery, Inc.

  34. STRUTS Controller Components • Your primary responsibilities are: • Write an Action class (that is, an extension of the Action class) for each logical request that may be received • Write the action mapping configuration file (in XML) that is used to configure the controller servlet (struts-config.xml) • Update the web application deployment descriptor file (in XML) for your application to include the necessary Struts components • Add the appropriate Struts components to your application Project Refinery, Inc.

  35. STRUTS Controller Components • Action Classes: • The Action class defines a perform method that you override • public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException; Project Refinery, Inc.

  36. STRUTS Controller Components • The goal of an Action class is to process this request, and then to return an ActionForward object that identifies the JSP page (if any) to which control should be forwarded to generate the corresponding response Project Refinery, Inc.

  37. STRUTS Controller Components • A typical Action class will implement the following logic in its perform() method • Validate the current state of the user's session • If validation has not yet occurred, validate the form bean properties as necessary • Perform the processing required to deal with this request • Update the server-side objects that will be used to create the next page of the user interface • Return an appropriate ActionForward object that identifies the JSP page to be used to generate this response, based on the newly updated beans Project Refinery, Inc.

  38. STRUTS Controller Components • Design issues to remember when coding Action classes include the following • The controller Servlet creates only one instance of your Action class, and uses it for all requests. Thus, you need to code your Action class so that it operates correctly in a multi-threaded environment, just as you must code a Servlet's service() method safely • The most important principle that aids in thread-safe coding is to use only local variables, not instance variables, in your Action class Project Refinery, Inc.

  39. STRUTS Controller Components • Design issues to remember when coding Action classes include the following – continued • The beans that represent the Model of your system may throw exceptions due to problems accessing databases or other resources. You should trap all such exceptions in the logic of your perform() method, and log them to the application logfile • As a general rule, allocating scarce resources and keeping them across requests from the same user (in the user's session) can cause scalability problems Project Refinery, Inc.

  40. STRUTS Controller Components • The ActionMapping Implementation • type - Fully qualified Java class name of the Action implementation class used by this mapping. • name - The name of the form bean defined in the config file that this action will use • path - The request URI path that is matched to select this mapping. See below for examples of how matching works. • unknown - Set to true if this action should be configured as the default for this application, to handle all requests not handled by another action. Only one action can be defined as a default within a single application. • validate - Set to true if the validate() method of the action associated with this mapping should be called. Project Refinery, Inc.

  41. STRUTS Controller Components • The Actions Mapping Configuration File • The developer's responsibility is to create an XML file named struts-config.xml, and place it in the WEB-INF directory of your application • The outermost XML element must be <struts-config> • Inside of the <struts-config> element, there two important elements that you use to describe your actions: Project Refinery, Inc.

  42. STRUTS Controller Components • <form-beans>This section contains your form bean definitions. You use a <form-bean> element for each form bean, which has the following important attributes: • name: The name of the request or session level attribute that this form bean will be stored as • type: The fully-qualified Java classname of your form bean Project Refinery, Inc.

  43. STRUTS Controller Components • <action-mappings>This section contains your action definitions. You use an <action> element for each of your actions you would like to define. Each action element has requires the following attributes to be defined: • path: The application context-relative path to the action • type: The fully qualified java classname of your Action class • name: The name of your <form-bean> element to use with this action Project Refinery, Inc.

  44. STRUTS Controller Components • One more section of good use is the <data-sources> section, which specifies data sources that your application can use.This is how you would specify a basic data source for your application inside of struts-config.xml: <struts-config> <data-sources> <data-source autoCommit="false" description="Example Data Source Description" driverClass="org.postgresql.Driver" maxCount="4" minCount="2" password="mypassword" url="jdbc:postgresql://localhost/mydatabase" user="myusername"/> </data-sources> </struts-config> Project Refinery, Inc.

  45. STRUTS Controller Components • The Web Application Deployment Descriptor • The final step in setting up the application is to configure the application deployment descriptor (stored in file WEB-INF/web.xml) to include all the Struts components that are required Project Refinery, Inc.

  46. Tag Libraries Unit 5 Project Refinery, Inc.

  47. STRUTS Tag Libraries • HTML Tags • Bean Tags • Logic Tags • Template Tags • Custom Tags Project Refinery, Inc.

  48. HTML Tags • The tags in the Struts HTML library form a bridge between a JSP view and the other components of a Web application. Since a dynamic Web application often depends on gathering data from a user, input forms play an important role in the Struts framework. Consequently, the majority of the HTML tags involve HTML forms. Other important issues addressed by the Struts-HTML tags are messages, error messages, hyperlinking and internationalization. Project Refinery, Inc.

  49. HTML "form" tags button cancel checkboxes file hidden image multibox password input fields radio buttons reset buttons HTML "form" tags select lists with embedded option options submit buttons text input fields textareas HTML Tags Project Refinery, Inc.

  50. HTML Tags – Typical HTML Form <HTML> <BODY> <FORM> <TABLE WIDTH="100%"> <TR><TD>First Name</TD> <TD><INPUT TYPE="TEXT" NAME="Name" SIZE="40" MAXLENGTH="40"></TD></TR> <TR><TD>Street Address</TD> <TD><INPUT TYPE="TEXT" NAME="Address" SIZE="40" MAXLENGTH="40"></TD></TR> <TR><TD>City</TD> <TD><INPUT TYPE="TEXT" NAME="City" SIZE="20" MAXLENGTH="20"></TD></TR> <TR><TD>State</TD> <TD><INPUT TYPE="TEXT" NAME="State" SIZE="2" MAXLENGTH="2"></TD></TR> <TR><TD>Postal Code</TD> <TD><INPUT TYPE="TEXT" NAME="ZipCode" SIZE="9" MAXLENGTH="9"></TD></TR> <TR><TD ALIGN=CENTER><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Save"></TD> <TD><INPUT TYPE="RESET" NAME="Reset" VALUE="Cancel"></TD></TR> </TABLE> </FORM> </BODY> </HTML> Project Refinery, Inc.

More Related