SlideShare a Scribd company logo
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 Unit 3 - View Components Unit 4 - Controller Components Unit 5 - Tag Libraries
STRUTS  Objectives Unit 6 - STRUTS Configuration File Unit 7 - Web Application Descriptor File Unit 8 - Application Resources File Unit 9 – Resources
Model-View-Controller Design Pattern Unit 1
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
STRUTS  MVC Design Pattern
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
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
Model Components Unit 2
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
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
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
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
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
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
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
STRUTS  Model Components Business Logic Beans - Continued For larger applications, these beans will often be stateful or stateless Enterprise JavaBeans (EJBs)
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
View Components Unit 3
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
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"
STRUTS  View Components Forms and FormBean interactions HTML Forms and their limitations Errors not easily handled
STRUTS  View Components <%@ page language=&quot;java&quot; %>  <%@ taglib uri=&quot;/WEB-INF/struts-html.tld&quot; prefix=&quot;html&quot; %>  <%@ taglib uri=&quot;/WEB-INF/struts-bean.tld&quot; prefix=&quot;bean&quot; %> <html:html>  <head> <title> <bean:message key=&quot;logon.title&quot;/> </title>  <body bgcolor=&quot;white&quot;> <html:errors/>  <html:form action=“/logonpath.do&quot;>  <table border=&quot;0&quot; width=&quot;100%&quot;>  <tr> <th align=&quot;right&quot;> <html:message key=&quot;prompt.username&quot;/> </th>  <td align=&quot;left&quot;> <html:text property=&quot;username&quot; size=&quot;16&quot;/> </td> </tr>  <tr> <td align=&quot;right&quot;> <html:submit> <bean:message key=&quot;button.submit&quot;/> </html:submit> </td>
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
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 &quot;text“ The submit and reset tags generate the corresponding buttons at the bottom of the form
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
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
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 &quot;src&quot; and &quot;lowsrc&quot; 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
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
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
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=&quot;xxxxx&quot; %>  directive can include a file that contains java code or jsp tags The include  action  ( <jsp:include page=&quot;xxxxx&quot; flush=&quot;true&quot; /> ) is processed at request time, and is handled transparently by the server The  bean:include  tag takes either a an argument &quot;forward&quot; representing a logical name mapped to the jsp to include, or the &quot;id&quot; argument, which represents a page context String variable to print out to the jsp page
Controller Components Unit 4
STRUTS  Controller Components Struts includes a Servlet that implements the primary function of mapping a request URI to an  Action  class (ActionServlet)
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
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;
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
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
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
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
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.
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:
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
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
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=&quot;false&quot;  description=&quot;Example Data Source Description&quot; driverClass=&quot;org.postgresql.Driver&quot; maxCount=&quot;4&quot; minCount=&quot;2&quot; password=&quot;mypassword&quot; url=&quot;jdbc:postgresql://localhost/mydatabase&quot; user=&quot;myusername&quot;/>  </data-sources>  </struts-config>
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
Tag Libraries Unit 5
STRUTS  Tag Libraries HTML Tags Bean Tags Logic Tags Template Tags Custom Tags
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.
HTML Tags HTML &quot;form&quot; tags button  cancel  checkboxes  file  hidden  image  multibox  password input fields  radio buttons  reset buttons  HTML &quot;form&quot; tags select lists with embedded  option  options  submit buttons  text input fields  textareas
HTML Tags  – Typical HTML Form <HTML> <BODY> <FORM> <TABLE WIDTH=&quot;100%&quot;> <TR><TD>First Name</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;Name&quot; SIZE=&quot;40&quot; MAXLENGTH=&quot;40&quot;></TD></TR> <TR><TD>Street Address</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;Address&quot; SIZE=&quot;40&quot; MAXLENGTH=&quot;40&quot;></TD></TR> <TR><TD>City</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;City&quot; SIZE=&quot;20&quot; MAXLENGTH=&quot;20&quot;></TD></TR> <TR><TD>State</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;State&quot; SIZE=&quot;2&quot; MAXLENGTH=&quot;2&quot;></TD></TR> <TR><TD>Postal Code</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;ZipCode&quot; SIZE=&quot;9&quot; MAXLENGTH=&quot;9&quot;></TD></TR> <TR><TD ALIGN=CENTER><INPUT TYPE=&quot;SUBMIT&quot; NAME=&quot;Submit&quot; VALUE=&quot;Save&quot;></TD> <TD><INPUT TYPE=&quot;RESET&quot; NAME=&quot;Reset&quot; VALUE=&quot;Cancel&quot;></TD></TR> </TABLE> </FORM> </BODY> </HTML>
HTML Tags  – Typical Struts Form <HTML:HTML> <BODY> <HTML:FORM Action=&quot;/CustomerForm&quot; focus=“name” > <TABLE WIDTH=&quot;100%&quot;> <TR><TD><bean:message key=&quot;customer.name&quot;/></TD> <TD><HTML:TEXT property=&quot;name&quot; size=&quot;40&quot; maxlength=&quot;40&quot; /></TD></TR> <TR><TD><bean:message key=&quot;customer.address&quot;/></TD> <TD><HTML:TEXT property=&quot;address&quot; size =&quot;40&quot; maxlength =&quot;40&quot; /></TD></TR> <TR><TD><bean:message key=&quot;customer.city&quot;/></TD> <TD><HTML:TEXT property=&quot;city&quot; size =&quot;20&quot; maxlength =&quot;20&quot; /></TD></TR> <TR><TD><bean:message key=&quot;customer.state&quot;/></TD> <TD><HTML:TEXT property=&quot;state&quot; size =&quot;2&quot; maxlength =&quot;2&quot; /></TD></TR> <TR><TD><bean:message key=&quot;customer.zip&quot;/></TD> <TD><HTML:TEXT property=&quot;zip&quot; size =&quot;9&quot; maxlength =&quot;9&quot; /></TD></TR> <TR><TD ALIGN=CENTER><html:submit property=&quot;action&quot; value =&quot;Save&quot;/></TD> <TD><html:reset property=&quot;action&quot; value =&quot;Reset&quot;/></TD></TR> </TABLE> </HTML:FORM> </BODY> </HTML:HTML>
Bean Tags The &quot;struts-bean&quot; tag library provides substantial enhancements to the basic capability provided by  <jsp:useBean> , as discussed in the following sections: Bean Properties  - Extended syntax to refer to JavaBean properties with simple names (same as the standard JSP tags  <jsp:getProperty>  and  <jsp:setProperty> ), nested names (a property named  address.city  returns the value retrieved by the Java expression  getAddress().getCity() ), and indexed names (a property named  address[3]  retrieves the fourth address from the indexed &quot;address&quot; property of a bean).  Bean Creation  - New JSP beans, in any scope, can be created from a variety of objects and APIs associated with the current request, or with the servlet container in which this page is running.  Bean Output  - Supports the rendering of textual output from a bean (or bean property), which will be included in the response being created by your JSP page.
Bean Tags   Tag Name Description cookie Define a scripting variable based on the value(s) of the specified request cookie.  define Define a scripting variable based on the value(s) of the specified bean property.  header Define a scripting variable based on the value(s) of the specified request header.  include Load the response from a dynamic application request and make it available as a bean.  message Render an internationalized message string to the response.  page Expose a specified item from the page context as a bean.  parameter Define a scripting variable based on the value(s) of the specified request parameter.  resource Load a web application resource and make it available as a bean.  size Define a bean containing the number of elements in a Collection or Map.  struts Expose a named Struts internal configuration object as a bean.  write Render the value of the specified bean property to the current JspWriter.
Bean Tag Example <table border=&quot;2&quot;> <tr> <th align=&quot;left&quot;><bean:message key=“imagebroker.lob”/></th> <th align=&quot;left&quot;><bean:message key=“imagebroker.unitnbr”/></th> <th align=&quot;left&quot;><bean:message key=“imagebroker.onbase_dns”/></th> </tr> <logic:iterate id=&quot;image&quot; property=&quot;collection&quot;  name=&quot;ImageLocationListForm&quot;> <tr> <td><a href=&quot;ImageLocationListForm.do?lob=<bean:write name='image'  property='lob'/> &unitnbr=<bean:write name='image' property='unitnbr'/> &onbase_dns=<bean:write name='image' property='onbase_dns'/>&quot; > <bean:write name=&quot;image&quot; property=&quot;lob&quot;/></a></td> <td><bean:write name=&quot;image&quot; property=&quot;unitnbr&quot;/></td>  <td><bean:write name=&quot;image&quot; property=&quot;onbase_dns&quot;/></td>  </tr> </logic:iterate> </table>
Logic Tags The Logic tag library contains tags that are useful in managing conditional generation of output text, looping over object collections for repetitive generation of output text, and application flow management.
Logic Tags For tags that do value comparisons ( equal ,  greaterEqual ,  greaterThan ,  lessEqual ,  lessThan ,  notEqual ), the following rules apply: The specified value is examined. If it can be converted successfully to a  double  or a  long , it is assumed that the ultimate comparison will be numeric (either floating point or integer). Otherwise, a String comparison will be performed.  The variable to be compared to is retrieved, based on the selector attribute(s) ( cookie ,  header ,  name ,  parameter ,  property ) present on this tag. It will be converted to the appropriate type for the comparison, as determined above.  A request time exception will be thrown if the specified variable cannot be retrieved, or has a null value.  The specific comparison for this tag will be performed, and the nested body content of this tag will be evaluated if the comparison returns a  true  result.
Logic Tags For tags that do substring matching ( match ,  notMatch ), the following rules apply: The specified variable is retrieved, based on the selector attribute(s) ( cookie ,  header ,  name ,  parameter ,  property ) present on this tag. The variable is converted to a String, if necessary.  A request time exception will be thrown if the specified variable cannot be retrieved, or has a null value.  The specified value is checked for existence as a substring of the variable, in the position specified by the  location  attribute, as follows: at the beginning (if location is set to  start ), at the end (if location is set to  end ), or anywhere (if location is not specified).
Logic Tags   Tag Name Description empty Evaluate the nested body content of this tag if the requested variable is either null or an empty string.  equal Evaluate the nested body content of this tag if the requested variable is equal to the specified value.  forward Forward control to the page specified by the specified ActionForward entry.  greaterEqual Evaluate the nested body content of this tag if requested variable is greater than or equal to specified value.  greaterThan Evaluate the nested body content of this tag if the requested variable is greater than the specified value.  iterate Repeat the nested body content of this tag over a specified collection.  lessEqual Evaluate the nested body content of this tag if requested variable is greater than or equal to specified value.  lessThan Evaluate the nested body content of this tag if the requested variable is less than the specified value.  match Evaluate the nested body content of this tag if specified value is an appropriate substring of requested variable.  messagesNotPresent Generate the nested body content of this tag if the specified message is not present in this request.  messagesPresent Generate the nested body content of this tag if the specified message is present in this request.  notEmpty Evaluate the nested body content of this tag if the requested variable is neither null nor an empty string.  notEqual Evaluate the nested body content of this tag if the requested variable is not equal to the specified value.  notMatch Evaluate the nested body content of tag if specified value not an appropriate substring of requested variable.  notPresent Generate the nested body content of this tag if the specified value is not present in this request.  present Generate the nested body content of this tag if the specified value is present in this request.  redirect Render an HTTP Redirect
Logic Tags - Example <html:html> <head> <title><bean:message key=&quot;imagebrokerlink.title&quot;/></title> <META name=&quot;GENERATOR&quot; content=&quot;IBM WebSphere Studio&quot;> </head> <body> <html:form action=&quot;/ImageLocationForm&quot; > <center> <font size=3> <br> <b> <logic:notEqual property=&quot;action&quot; name=&quot;ImageLocationForm&quot; value=&quot;Insert&quot;> <bean:message key=&quot;imagelocationdetail.title&quot;/> </logic:notEqual> <logic:equal property=&quot;action&quot; name=&quot;ImageLocationForm&quot; value=&quot;Insert&quot;> <bean:message key=&quot;imagelocationinsert.title&quot;/> </logic:equal> … …
Template Tags The Template tag library contains three tags: put, get, and insert. Put tags put content into request scope, which is retrieved by a get tag in a different JSP page (the template). That template is included with the insert tag.
Template Tags Insert  Inserts (includes, actually) a template. Templates are JSP pages that include parameterized content. That content comes from put tags that are children of insert tags.  Put  Puts content into request scope. Get  Gets the content from request scope that was put there by a put tag.
Custom Tags  <%@ taglib uri=&quot;WEB-INF/imagebroker.tld&quot; prefix=&quot;broker&quot; %> <table width=750 cellspacing=0 cellpadding=2 border=2 > <tr> <td><broker:form  lob='<%=test.getLob()%>'  unitnbr='<%=test.getUnitnbr()%>'  userid='<%=test.getUserid()%>' > <broker:doctype value=&quot;Invoice&quot;/> <broker:keyword name=&quot;CompanyNbr&quot; value=&quot;55555&quot;/> <broker:keyword name=&quot;PONbr&quot; value=&quot;M12345&quot;/> <broker:constraint name=&quot;FromDate&quot; value=&quot;02/02/2002&quot;/> <broker:constraint name=&quot;ToDate&quot; value=&quot;02/28/2002&quot;/> Image Broker Link Test </broker:form> </td> </tr> </table>
Custom Tags – tld File <tag> <name>doctype</name> <tagclass>com.pri.brokertag.ImageBrokerDoctype</tagclass> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
Custom Tags – Tag Class public class ImageBrokerDoctype extends TagSupport { private String value = null; public int doStartTag() throws JspException { Hashtable ht = null; String keyword_count = null; int iCnt = 0; HttpServletRequest request = (HttpServletRequest)    pageContext.getRequest(); ht = (Hashtable) request.getAttribute(&quot;keyword_parms&quot;); keyword_count = (String)        request.getAttribute(&quot;queryobject_count&quot;); iCnt ++; ht.put(&quot;QueryObject&quot; + iCnt, value); request.setAttribute(&quot;keyword_parms&quot;, ht); request.setAttribute(&quot;queryobject_count&quot;, new String(new    Integer(iCnt).toString())); return EVAL_PAGE;  } }
STRUTS Configuration File Unit 6
STRUTS 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. This format of this document is constrained by it's definition in &quot;struts-config_1_0.dtd&quot;. The outermost XML element must be  <struts-config> .
STRUTS Configuration File Inside of the <struts-config> element, there are two important elements that are used to describe your actions:  <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 : A unique identifier for this bean, which will be used to reference it in corresponding action mappings. Usually, this is also the name of the request or session attribute under which this form bean will be stored.  type : The fully-qualified Java classname of your form bean.  <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 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
Struts-config.xml <?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?> <!DOCTYPE struts-config PUBLIC &quot;-//Apache Software Foundation//DTD Struts Configuration 1.0//EN&quot; &quot;http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd&quot;> <struts-config> <!-- ========== Form Bean Definitions =================================== --> <form-beans> <form-bean  name=&quot;CryptForm&quot; type=&quot;com.pri.imagebrokerWeb.CryptForm&quot; /> </form-beans> <!-- ========== Global Forward Definitions ============================== --> <global-forwards> <forward name=&quot;start&quot; path=&quot;/index.html&quot;/> </global-forwards> <!-- ========== Action Mapping Definitions ============================== --> <action-mappings> <action  path=&quot;/CryptForm&quot; type=&quot;com.pri.imagebrokerWeb.CryptAction&quot;  name=&quot;CryptForm&quot;  scope=&quot;request&quot;  input=&quot;/pgCrypt.jsp&quot;> <forward name=&quot;encrypt&quot;  path=&quot;/pgCryptDisplay.jsp&quot;/> </action> </action-mappings> </struts-config>
Web Application Descriptor File Unit 7
Web.xml File 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. Using the deployment descriptor for the example application as a guide, we see that the following entries need to be created or modified.
Web.xml File <?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?> <!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN&quot; &quot;http://java.sun.com/j2ee/dtds/web-app_2_2.dtd&quot;> <web-app id=&quot;WebApp&quot;> <display-name>imagebrokerWeb</display-name> <!-- Action Servlet Configuration --> <servlet id=&quot;Servlet_1&quot;> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>application</param-name><param-value>imagebrokerWeb</param-value> </init-param> <init-param> <param-name>config</param-name><param-value>WEB-INF/struts-config.xml</param-value> </init-param> </servlet>
Web.xml File - continued <!-- Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- The Welcome File List --> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list>
Web.xml File - continued <!-- Struts Tag Library Descriptors --> <taglib> <taglib-uri>WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>WEB-INF/struts-html.tld</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>WEB-INF/struts-logic.tld</taglib-uri> <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> </taglib> </web-app>
Application Resources File Unit 8
Application.properties File error.cryptvalue.required=<li>You must enter some text.</li> error.lob.required=<li>You must enter the Line of Business.</li> error.unitnbr.required=<li>You must enter the Unit Number.</li> error.onbase_dns.required=<li>You must enter the OnBase DNS.</li> imagebroker.linkname=Project Refinery, Inc. imagebroker.title=pri Image Broker imagebrokerlink.title=pri Image Broker Link Test imagelocationlist.title=Image Location List imagelocationdetail.title=Image Location Detail imagelocationinsert.title=Image Location Insert errors.header= errors.footer=
Resources Unit 9
Resources Main Struts Web Site http://jakarta.apache.org/struts/index.html Struts User Guide http://jakarta.apache.org/struts/userGuide/index.html Various Struts Resources http://jakarta.apache.org/struts/resources.html Ted Husted Web Site http://www.husted.com/struts/
Ad

More Related Content

What's hot (19)

Java Server Faces (JSF) - advanced
Java Server Faces (JSF) - advancedJava Server Faces (JSF) - advanced
Java Server Faces (JSF) - advanced
BG Java EE Course
 
Jsp advance part i
Jsp advance part iJsp advance part i
Jsp advance part i
sameersaxena90
 
Spring MVC Basics
Spring MVC BasicsSpring MVC Basics
Spring MVC Basics
Bozhidar Bozhanov
 
Annotation-Based Spring Portlet MVC
Annotation-Based Spring Portlet MVCAnnotation-Based Spring Portlet MVC
Annotation-Based Spring Portlet MVC
John Lewis
 
Spring mvc 2.0
Spring mvc 2.0Spring mvc 2.0
Spring mvc 2.0
Rudra Garnaik, PMI-ACP®
 
Hibernate III
Hibernate IIIHibernate III
Hibernate III
People Strategists
 
JSP Technology I
JSP Technology IJSP Technology I
JSP Technology I
People Strategists
 
.NET Core, ASP.NET Core Course, Session 11
.NET Core, ASP.NET Core Course, Session 11.NET Core, ASP.NET Core Course, Session 11
.NET Core, ASP.NET Core Course, Session 11
Amin Mesbahi
 
Struts course material
Struts course materialStruts course material
Struts course material
Vibrant Technologies & Computers
 
Rational Publishing Engine and Rational RequisitePro
Rational Publishing Engine and Rational  RequisiteProRational Publishing Engine and Rational  RequisitePro
Rational Publishing Engine and Rational RequisitePro
GEBS Reporting
 
Java Server Faces (JSF) - Basics
Java Server Faces (JSF) - BasicsJava Server Faces (JSF) - Basics
Java Server Faces (JSF) - Basics
BG Java EE Course
 
Spring 3.x - Spring MVC
Spring 3.x - Spring MVCSpring 3.x - Spring MVC
Spring 3.x - Spring MVC
Guy Nir
 
Spring Framework-II
Spring Framework-IISpring Framework-II
Spring Framework-II
People Strategists
 
Spring MVC 3.0 Framework
Spring MVC 3.0 FrameworkSpring MVC 3.0 Framework
Spring MVC 3.0 Framework
Ravi Kant Soni ([email protected])
 
What is struts_en
What is struts_enWhat is struts_en
What is struts_en
techbed
 
Spring Framework - III
Spring Framework - IIISpring Framework - III
Spring Framework - III
People Strategists
 
Jsf
JsfJsf
Jsf
Esraa Yaseen
 
.NET Core, ASP.NET Core Course, Session 10
.NET Core, ASP.NET Core Course, Session 10.NET Core, ASP.NET Core Course, Session 10
.NET Core, ASP.NET Core Course, Session 10
Amin Mesbahi
 
Spring MVC Architecture Tutorial
Spring MVC Architecture TutorialSpring MVC Architecture Tutorial
Spring MVC Architecture Tutorial
Java Success Point
 

Similar to Struts Intro Course(1) (20)

Struts N E W
Struts N E WStruts N E W
Struts N E W
patinijava
 
Struts Introduction Course
Struts Introduction CourseStruts Introduction Course
Struts Introduction Course
guest764934
 
ASP.NET MVC introduction
ASP.NET MVC introductionASP.NET MVC introduction
ASP.NET MVC introduction
Tomi Juhola
 
MVC
MVCMVC
MVC
akshin
 
Introducing Struts 2
Introducing Struts 2Introducing Struts 2
Introducing Struts 2
wiradikusuma
 
Struts 2
Struts 2Struts 2
Struts 2
Lalit Garg
 
Asp Net Advance Topics
Asp Net Advance TopicsAsp Net Advance Topics
Asp Net Advance Topics
Ali Taki
 
Struts Ppt 1
Struts Ppt 1Struts Ppt 1
Struts Ppt 1
JayaPrakash.m
 
Spring from a to Z
Spring from  a to ZSpring from  a to Z
Spring from a to Z
sang nguyen
 
Apachecon 2002 Struts
Apachecon 2002 StrutsApachecon 2002 Struts
Apachecon 2002 Struts
yesprakash
 
Introduction to Alfresco Surf Platform
Introduction to Alfresco Surf PlatformIntroduction to Alfresco Surf Platform
Introduction to Alfresco Surf Platform
Alfresco Software
 
Html JavaScript and CSS
Html JavaScript and CSSHtml JavaScript and CSS
Html JavaScript and CSS
Radhe Krishna Rajan
 
Struts ppt 1
Struts ppt 1Struts ppt 1
Struts ppt 1
pavanteja86
 
Migration from ASP to ASP.NET
Migration from ASP to ASP.NETMigration from ASP to ASP.NET
Migration from ASP to ASP.NET
Information Technology
 
MVC & SQL_In_1_Hour
MVC & SQL_In_1_HourMVC & SQL_In_1_Hour
MVC & SQL_In_1_Hour
Dilip Patel
 
Struts
StrutsStruts
Struts
s4al_com
 
Session 1
Session 1Session 1
Session 1
Asif Atick
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
yuvalb
 
D22 portlet development with open source frameworks
D22 portlet development with open source frameworksD22 portlet development with open source frameworks
D22 portlet development with open source frameworks
Sunil Patil
 
D22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksD22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source Frameworks
Sunil Patil
 
Struts Introduction Course
Struts Introduction CourseStruts Introduction Course
Struts Introduction Course
guest764934
 
ASP.NET MVC introduction
ASP.NET MVC introductionASP.NET MVC introduction
ASP.NET MVC introduction
Tomi Juhola
 
Introducing Struts 2
Introducing Struts 2Introducing Struts 2
Introducing Struts 2
wiradikusuma
 
Asp Net Advance Topics
Asp Net Advance TopicsAsp Net Advance Topics
Asp Net Advance Topics
Ali Taki
 
Spring from a to Z
Spring from  a to ZSpring from  a to Z
Spring from a to Z
sang nguyen
 
Apachecon 2002 Struts
Apachecon 2002 StrutsApachecon 2002 Struts
Apachecon 2002 Struts
yesprakash
 
Introduction to Alfresco Surf Platform
Introduction to Alfresco Surf PlatformIntroduction to Alfresco Surf Platform
Introduction to Alfresco Surf Platform
Alfresco Software
 
MVC & SQL_In_1_Hour
MVC & SQL_In_1_HourMVC & SQL_In_1_Hour
MVC & SQL_In_1_Hour
Dilip Patel
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
yuvalb
 
D22 portlet development with open source frameworks
D22 portlet development with open source frameworksD22 portlet development with open source frameworks
D22 portlet development with open source frameworks
Sunil Patil
 
D22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source FrameworksD22 Portlet Development With Open Source Frameworks
D22 Portlet Development With Open Source Frameworks
Sunil Patil
 
Ad

More from wangjiaz (20)

We9 Struts 2.0
We9 Struts 2.0We9 Struts 2.0
We9 Struts 2.0
wangjiaz
 
Workshop Sutdio3(1)
Workshop Sutdio3(1)Workshop Sutdio3(1)
Workshop Sutdio3(1)
wangjiaz
 
Ye Ying(1)
Ye Ying(1)Ye Ying(1)
Ye Ying(1)
wangjiaz
 
Zhanbin Web2.0
Zhanbin Web2.0Zhanbin Web2.0
Zhanbin Web2.0
wangjiaz
 
U Co M Protocol
U Co M ProtocolU Co M Protocol
U Co M Protocol
wangjiaz
 
Tt Seminar Taipei 9605(1)
Tt Seminar Taipei 9605(1)Tt Seminar Taipei 9605(1)
Tt Seminar Taipei 9605(1)
wangjiaz
 
The New Iphone
The New IphoneThe New Iphone
The New Iphone
wangjiaz
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
wangjiaz
 
Sxdylgn(1)
Sxdylgn(1)Sxdylgn(1)
Sxdylgn(1)
wangjiaz
 
S11flash(1)
S11flash(1)S11flash(1)
S11flash(1)
wangjiaz
 
Role Play Exercises
Role Play ExercisesRole Play Exercises
Role Play Exercises
wangjiaz
 
Recruit(1)
Recruit(1)Recruit(1)
Recruit(1)
wangjiaz
 
web 2.0 class notes
web 2.0 class notesweb 2.0 class notes
web 2.0 class notes
wangjiaz
 
Ye Ying(1)
Ye Ying(1)Ye Ying(1)
Ye Ying(1)
wangjiaz
 
Xzzx20060302 1
Xzzx20060302 1Xzzx20060302 1
Xzzx20060302 1
wangjiaz
 
We9 Struts 2.0
We9 Struts 2.0We9 Struts 2.0
We9 Struts 2.0
wangjiaz
 
Workshop Sutdio3(1)
Workshop Sutdio3(1)Workshop Sutdio3(1)
Workshop Sutdio3(1)
wangjiaz
 
Ye Ying(1)
Ye Ying(1)Ye Ying(1)
Ye Ying(1)
wangjiaz
 
Zhanbin Web2.0
Zhanbin Web2.0Zhanbin Web2.0
Zhanbin Web2.0
wangjiaz
 
U Co M Protocol
U Co M ProtocolU Co M Protocol
U Co M Protocol
wangjiaz
 
Tt Seminar Taipei 9605(1)
Tt Seminar Taipei 9605(1)Tt Seminar Taipei 9605(1)
Tt Seminar Taipei 9605(1)
wangjiaz
 
The New Iphone
The New IphoneThe New Iphone
The New Iphone
wangjiaz
 
Struts Mitac(1)
Struts Mitac(1)Struts Mitac(1)
Struts Mitac(1)
wangjiaz
 
Sxdylgn(1)
Sxdylgn(1)Sxdylgn(1)
Sxdylgn(1)
wangjiaz
 
S11flash(1)
S11flash(1)S11flash(1)
S11flash(1)
wangjiaz
 
Role Play Exercises
Role Play ExercisesRole Play Exercises
Role Play Exercises
wangjiaz
 
Recruit(1)
Recruit(1)Recruit(1)
Recruit(1)
wangjiaz
 
web 2.0 class notes
web 2.0 class notesweb 2.0 class notes
web 2.0 class notes
wangjiaz
 
Ye Ying(1)
Ye Ying(1)Ye Ying(1)
Ye Ying(1)
wangjiaz
 
Xzzx20060302 1
Xzzx20060302 1Xzzx20060302 1
Xzzx20060302 1
wangjiaz
 
Ad

Recently uploaded (20)

Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Learn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step GuideLearn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step Guide
Marcel David
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.
gregtap1
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Asthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdfAsthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdf
VanessaRaudez
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
Automation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From AnywhereAutomation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From Anywhere
Lynda Kane
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdfSAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
SAP Modernization: Maximizing the Value of Your SAP S/4HANA Migration.pdf
Precisely
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
Learn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step GuideLearn the Basics of Agile Development: Your Step-by-Step Guide
Learn the Basics of Agile Development: Your Step-by-Step Guide
Marcel David
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.Network Security. Different aspects of Network Security.
Network Security. Different aspects of Network Security.
gregtap1
 
Semantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AISemantic Cultivators : The Critical Future Role to Enable AI
Semantic Cultivators : The Critical Future Role to Enable AI
artmondano
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5..."Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
"Client Partnership — the Path to Exponential Growth for Companies Sized 50-5...
Fwdays
 
Asthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdfAsthma presentación en inglés abril 2025 pdf
Asthma presentación en inglés abril 2025 pdf
VanessaRaudez
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath MaestroDev Dives: Automate and orchestrate your processes with UiPath Maestro
Dev Dives: Automate and orchestrate your processes with UiPath Maestro
UiPathCommunity
 
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager APIUiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPath Community Berlin: Orchestrator API, Swagger, and Test Manager API
UiPathCommunity
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
tecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdftecnologias de las primeras civilizaciones.pdf
tecnologias de las primeras civilizaciones.pdf
fjgm517
 
Automation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From AnywhereAutomation Dreamin': Capture User Feedback From Anywhere
Automation Dreamin': Capture User Feedback From Anywhere
Lynda Kane
 

Struts Intro Course(1)

  • 1. STRUTS Part of the Jakarta Project Sponsored by the Apache Software Foundation Developed by: Roger W Barnes of Project Refinery, Inc. Introduction to Struts
  • 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
  • 3. STRUTS Objectives Unit 6 - STRUTS Configuration File Unit 7 - Web Application Descriptor File Unit 8 - Application Resources File Unit 9 – Resources
  • 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
  • 6. STRUTS MVC Design Pattern
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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 &quot;stub&quot; method, and provide error messages in the standard application resource, Struts will automatically validate the input from the form
  • 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 &quot;customer&quot; bean on your Action Form, and then refer to the property &quot;customer.name&quot; in your JSP view. This would correspond to the methods customer.getName() and customer.setName(string Name) on your customer bean
  • 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
  • 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
  • 17. STRUTS Model Components Business Logic Beans - Continued For larger applications, these beans will often be stateful or stateless Enterprise JavaBeans (EJBs)
  • 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
  • 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 &quot;name=value&quot; 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
  • 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 &quot;xx&quot;
  • 22. STRUTS View Components Forms and FormBean interactions HTML Forms and their limitations Errors not easily handled
  • 23. STRUTS View Components <%@ page language=&quot;java&quot; %> <%@ taglib uri=&quot;/WEB-INF/struts-html.tld&quot; prefix=&quot;html&quot; %> <%@ taglib uri=&quot;/WEB-INF/struts-bean.tld&quot; prefix=&quot;bean&quot; %> <html:html> <head> <title> <bean:message key=&quot;logon.title&quot;/> </title> <body bgcolor=&quot;white&quot;> <html:errors/> <html:form action=“/logonpath.do&quot;> <table border=&quot;0&quot; width=&quot;100%&quot;> <tr> <th align=&quot;right&quot;> <html:message key=&quot;prompt.username&quot;/> </th> <td align=&quot;left&quot;> <html:text property=&quot;username&quot; size=&quot;16&quot;/> </td> </tr> <tr> <td align=&quot;right&quot;> <html:submit> <bean:message key=&quot;button.submit&quot;/> </html:submit> </td>
  • 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
  • 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 &quot;text“ The submit and reset tags generate the corresponding buttons at the bottom of the form
  • 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
  • 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
  • 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 &quot;src&quot; and &quot;lowsrc&quot; 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
  • 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
  • 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
  • 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=&quot;xxxxx&quot; %> directive can include a file that contains java code or jsp tags The include action ( <jsp:include page=&quot;xxxxx&quot; flush=&quot;true&quot; /> ) is processed at request time, and is handled transparently by the server The bean:include tag takes either a an argument &quot;forward&quot; representing a logical name mapped to the jsp to include, or the &quot;id&quot; argument, which represents a page context String variable to print out to the jsp page
  • 33. STRUTS Controller Components Struts includes a Servlet that implements the primary function of mapping a request URI to an Action class (ActionServlet)
  • 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
  • 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;
  • 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
  • 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
  • 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
  • 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
  • 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.
  • 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:
  • 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
  • 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
  • 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=&quot;false&quot; description=&quot;Example Data Source Description&quot; driverClass=&quot;org.postgresql.Driver&quot; maxCount=&quot;4&quot; minCount=&quot;2&quot; password=&quot;mypassword&quot; url=&quot;jdbc:postgresql://localhost/mydatabase&quot; user=&quot;myusername&quot;/> </data-sources> </struts-config>
  • 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
  • 47. STRUTS Tag Libraries HTML Tags Bean Tags Logic Tags Template Tags Custom Tags
  • 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.
  • 49. HTML Tags HTML &quot;form&quot; tags button cancel checkboxes file hidden image multibox password input fields radio buttons reset buttons HTML &quot;form&quot; tags select lists with embedded option options submit buttons text input fields textareas
  • 50. HTML Tags – Typical HTML Form <HTML> <BODY> <FORM> <TABLE WIDTH=&quot;100%&quot;> <TR><TD>First Name</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;Name&quot; SIZE=&quot;40&quot; MAXLENGTH=&quot;40&quot;></TD></TR> <TR><TD>Street Address</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;Address&quot; SIZE=&quot;40&quot; MAXLENGTH=&quot;40&quot;></TD></TR> <TR><TD>City</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;City&quot; SIZE=&quot;20&quot; MAXLENGTH=&quot;20&quot;></TD></TR> <TR><TD>State</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;State&quot; SIZE=&quot;2&quot; MAXLENGTH=&quot;2&quot;></TD></TR> <TR><TD>Postal Code</TD> <TD><INPUT TYPE=&quot;TEXT&quot; NAME=&quot;ZipCode&quot; SIZE=&quot;9&quot; MAXLENGTH=&quot;9&quot;></TD></TR> <TR><TD ALIGN=CENTER><INPUT TYPE=&quot;SUBMIT&quot; NAME=&quot;Submit&quot; VALUE=&quot;Save&quot;></TD> <TD><INPUT TYPE=&quot;RESET&quot; NAME=&quot;Reset&quot; VALUE=&quot;Cancel&quot;></TD></TR> </TABLE> </FORM> </BODY> </HTML>
  • 51. HTML Tags – Typical Struts Form <HTML:HTML> <BODY> <HTML:FORM Action=&quot;/CustomerForm&quot; focus=“name” > <TABLE WIDTH=&quot;100%&quot;> <TR><TD><bean:message key=&quot;customer.name&quot;/></TD> <TD><HTML:TEXT property=&quot;name&quot; size=&quot;40&quot; maxlength=&quot;40&quot; /></TD></TR> <TR><TD><bean:message key=&quot;customer.address&quot;/></TD> <TD><HTML:TEXT property=&quot;address&quot; size =&quot;40&quot; maxlength =&quot;40&quot; /></TD></TR> <TR><TD><bean:message key=&quot;customer.city&quot;/></TD> <TD><HTML:TEXT property=&quot;city&quot; size =&quot;20&quot; maxlength =&quot;20&quot; /></TD></TR> <TR><TD><bean:message key=&quot;customer.state&quot;/></TD> <TD><HTML:TEXT property=&quot;state&quot; size =&quot;2&quot; maxlength =&quot;2&quot; /></TD></TR> <TR><TD><bean:message key=&quot;customer.zip&quot;/></TD> <TD><HTML:TEXT property=&quot;zip&quot; size =&quot;9&quot; maxlength =&quot;9&quot; /></TD></TR> <TR><TD ALIGN=CENTER><html:submit property=&quot;action&quot; value =&quot;Save&quot;/></TD> <TD><html:reset property=&quot;action&quot; value =&quot;Reset&quot;/></TD></TR> </TABLE> </HTML:FORM> </BODY> </HTML:HTML>
  • 52. Bean Tags The &quot;struts-bean&quot; tag library provides substantial enhancements to the basic capability provided by <jsp:useBean> , as discussed in the following sections: Bean Properties - Extended syntax to refer to JavaBean properties with simple names (same as the standard JSP tags <jsp:getProperty> and <jsp:setProperty> ), nested names (a property named address.city returns the value retrieved by the Java expression getAddress().getCity() ), and indexed names (a property named address[3] retrieves the fourth address from the indexed &quot;address&quot; property of a bean). Bean Creation - New JSP beans, in any scope, can be created from a variety of objects and APIs associated with the current request, or with the servlet container in which this page is running. Bean Output - Supports the rendering of textual output from a bean (or bean property), which will be included in the response being created by your JSP page.
  • 53. Bean Tags   Tag Name Description cookie Define a scripting variable based on the value(s) of the specified request cookie. define Define a scripting variable based on the value(s) of the specified bean property. header Define a scripting variable based on the value(s) of the specified request header. include Load the response from a dynamic application request and make it available as a bean. message Render an internationalized message string to the response. page Expose a specified item from the page context as a bean. parameter Define a scripting variable based on the value(s) of the specified request parameter. resource Load a web application resource and make it available as a bean. size Define a bean containing the number of elements in a Collection or Map. struts Expose a named Struts internal configuration object as a bean. write Render the value of the specified bean property to the current JspWriter.
  • 54. Bean Tag Example <table border=&quot;2&quot;> <tr> <th align=&quot;left&quot;><bean:message key=“imagebroker.lob”/></th> <th align=&quot;left&quot;><bean:message key=“imagebroker.unitnbr”/></th> <th align=&quot;left&quot;><bean:message key=“imagebroker.onbase_dns”/></th> </tr> <logic:iterate id=&quot;image&quot; property=&quot;collection&quot; name=&quot;ImageLocationListForm&quot;> <tr> <td><a href=&quot;ImageLocationListForm.do?lob=<bean:write name='image' property='lob'/> &unitnbr=<bean:write name='image' property='unitnbr'/> &onbase_dns=<bean:write name='image' property='onbase_dns'/>&quot; > <bean:write name=&quot;image&quot; property=&quot;lob&quot;/></a></td> <td><bean:write name=&quot;image&quot; property=&quot;unitnbr&quot;/></td> <td><bean:write name=&quot;image&quot; property=&quot;onbase_dns&quot;/></td> </tr> </logic:iterate> </table>
  • 55. Logic Tags The Logic tag library contains tags that are useful in managing conditional generation of output text, looping over object collections for repetitive generation of output text, and application flow management.
  • 56. Logic Tags For tags that do value comparisons ( equal , greaterEqual , greaterThan , lessEqual , lessThan , notEqual ), the following rules apply: The specified value is examined. If it can be converted successfully to a double or a long , it is assumed that the ultimate comparison will be numeric (either floating point or integer). Otherwise, a String comparison will be performed. The variable to be compared to is retrieved, based on the selector attribute(s) ( cookie , header , name , parameter , property ) present on this tag. It will be converted to the appropriate type for the comparison, as determined above. A request time exception will be thrown if the specified variable cannot be retrieved, or has a null value. The specific comparison for this tag will be performed, and the nested body content of this tag will be evaluated if the comparison returns a true result.
  • 57. Logic Tags For tags that do substring matching ( match , notMatch ), the following rules apply: The specified variable is retrieved, based on the selector attribute(s) ( cookie , header , name , parameter , property ) present on this tag. The variable is converted to a String, if necessary. A request time exception will be thrown if the specified variable cannot be retrieved, or has a null value. The specified value is checked for existence as a substring of the variable, in the position specified by the location attribute, as follows: at the beginning (if location is set to start ), at the end (if location is set to end ), or anywhere (if location is not specified).
  • 58. Logic Tags   Tag Name Description empty Evaluate the nested body content of this tag if the requested variable is either null or an empty string. equal Evaluate the nested body content of this tag if the requested variable is equal to the specified value. forward Forward control to the page specified by the specified ActionForward entry. greaterEqual Evaluate the nested body content of this tag if requested variable is greater than or equal to specified value. greaterThan Evaluate the nested body content of this tag if the requested variable is greater than the specified value. iterate Repeat the nested body content of this tag over a specified collection. lessEqual Evaluate the nested body content of this tag if requested variable is greater than or equal to specified value. lessThan Evaluate the nested body content of this tag if the requested variable is less than the specified value. match Evaluate the nested body content of this tag if specified value is an appropriate substring of requested variable. messagesNotPresent Generate the nested body content of this tag if the specified message is not present in this request. messagesPresent Generate the nested body content of this tag if the specified message is present in this request. notEmpty Evaluate the nested body content of this tag if the requested variable is neither null nor an empty string. notEqual Evaluate the nested body content of this tag if the requested variable is not equal to the specified value. notMatch Evaluate the nested body content of tag if specified value not an appropriate substring of requested variable. notPresent Generate the nested body content of this tag if the specified value is not present in this request. present Generate the nested body content of this tag if the specified value is present in this request. redirect Render an HTTP Redirect
  • 59. Logic Tags - Example <html:html> <head> <title><bean:message key=&quot;imagebrokerlink.title&quot;/></title> <META name=&quot;GENERATOR&quot; content=&quot;IBM WebSphere Studio&quot;> </head> <body> <html:form action=&quot;/ImageLocationForm&quot; > <center> <font size=3> <br> <b> <logic:notEqual property=&quot;action&quot; name=&quot;ImageLocationForm&quot; value=&quot;Insert&quot;> <bean:message key=&quot;imagelocationdetail.title&quot;/> </logic:notEqual> <logic:equal property=&quot;action&quot; name=&quot;ImageLocationForm&quot; value=&quot;Insert&quot;> <bean:message key=&quot;imagelocationinsert.title&quot;/> </logic:equal> … …
  • 60. Template Tags The Template tag library contains three tags: put, get, and insert. Put tags put content into request scope, which is retrieved by a get tag in a different JSP page (the template). That template is included with the insert tag.
  • 61. Template Tags Insert Inserts (includes, actually) a template. Templates are JSP pages that include parameterized content. That content comes from put tags that are children of insert tags. Put Puts content into request scope. Get Gets the content from request scope that was put there by a put tag.
  • 62. Custom Tags <%@ taglib uri=&quot;WEB-INF/imagebroker.tld&quot; prefix=&quot;broker&quot; %> <table width=750 cellspacing=0 cellpadding=2 border=2 > <tr> <td><broker:form lob='<%=test.getLob()%>' unitnbr='<%=test.getUnitnbr()%>' userid='<%=test.getUserid()%>' > <broker:doctype value=&quot;Invoice&quot;/> <broker:keyword name=&quot;CompanyNbr&quot; value=&quot;55555&quot;/> <broker:keyword name=&quot;PONbr&quot; value=&quot;M12345&quot;/> <broker:constraint name=&quot;FromDate&quot; value=&quot;02/02/2002&quot;/> <broker:constraint name=&quot;ToDate&quot; value=&quot;02/28/2002&quot;/> Image Broker Link Test </broker:form> </td> </tr> </table>
  • 63. Custom Tags – tld File <tag> <name>doctype</name> <tagclass>com.pri.brokertag.ImageBrokerDoctype</tagclass> <attribute> <name>value</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
  • 64. Custom Tags – Tag Class public class ImageBrokerDoctype extends TagSupport { private String value = null; public int doStartTag() throws JspException { Hashtable ht = null; String keyword_count = null; int iCnt = 0; HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); ht = (Hashtable) request.getAttribute(&quot;keyword_parms&quot;); keyword_count = (String) request.getAttribute(&quot;queryobject_count&quot;); iCnt ++; ht.put(&quot;QueryObject&quot; + iCnt, value); request.setAttribute(&quot;keyword_parms&quot;, ht); request.setAttribute(&quot;queryobject_count&quot;, new String(new Integer(iCnt).toString())); return EVAL_PAGE; } }
  • 66. STRUTS 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. This format of this document is constrained by it's definition in &quot;struts-config_1_0.dtd&quot;. The outermost XML element must be <struts-config> .
  • 67. STRUTS Configuration File Inside of the <struts-config> element, there are two important elements that are used to describe your actions: <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 : A unique identifier for this bean, which will be used to reference it in corresponding action mappings. Usually, this is also the name of the request or session attribute under which this form bean will be stored. type : The fully-qualified Java classname of your form bean. <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 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
  • 68. Struts-config.xml <?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?> <!DOCTYPE struts-config PUBLIC &quot;-//Apache Software Foundation//DTD Struts Configuration 1.0//EN&quot; &quot;http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd&quot;> <struts-config> <!-- ========== Form Bean Definitions =================================== --> <form-beans> <form-bean name=&quot;CryptForm&quot; type=&quot;com.pri.imagebrokerWeb.CryptForm&quot; /> </form-beans> <!-- ========== Global Forward Definitions ============================== --> <global-forwards> <forward name=&quot;start&quot; path=&quot;/index.html&quot;/> </global-forwards> <!-- ========== Action Mapping Definitions ============================== --> <action-mappings> <action path=&quot;/CryptForm&quot; type=&quot;com.pri.imagebrokerWeb.CryptAction&quot; name=&quot;CryptForm&quot; scope=&quot;request&quot; input=&quot;/pgCrypt.jsp&quot;> <forward name=&quot;encrypt&quot; path=&quot;/pgCryptDisplay.jsp&quot;/> </action> </action-mappings> </struts-config>
  • 70. Web.xml File 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. Using the deployment descriptor for the example application as a guide, we see that the following entries need to be created or modified.
  • 71. Web.xml File <?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?> <!DOCTYPE web-app PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN&quot; &quot;http://java.sun.com/j2ee/dtds/web-app_2_2.dtd&quot;> <web-app id=&quot;WebApp&quot;> <display-name>imagebrokerWeb</display-name> <!-- Action Servlet Configuration --> <servlet id=&quot;Servlet_1&quot;> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>application</param-name><param-value>imagebrokerWeb</param-value> </init-param> <init-param> <param-name>config</param-name><param-value>WEB-INF/struts-config.xml</param-value> </init-param> </servlet>
  • 72. Web.xml File - continued <!-- Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <!-- The Welcome File List --> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list>
  • 73. Web.xml File - continued <!-- Struts Tag Library Descriptors --> <taglib> <taglib-uri>WEB-INF/struts-bean.tld</taglib-uri> <taglib-location>/WEB-INF/struts-bean.tld</taglib-location> </taglib> <taglib> <taglib-uri>WEB-INF/struts-html.tld</taglib-uri> <taglib-location>/WEB-INF/struts-html.tld</taglib-location> </taglib> <taglib> <taglib-uri>WEB-INF/struts-logic.tld</taglib-uri> <taglib-location>/WEB-INF/struts-logic.tld</taglib-location> </taglib> </web-app>
  • 75. Application.properties File error.cryptvalue.required=<li>You must enter some text.</li> error.lob.required=<li>You must enter the Line of Business.</li> error.unitnbr.required=<li>You must enter the Unit Number.</li> error.onbase_dns.required=<li>You must enter the OnBase DNS.</li> imagebroker.linkname=Project Refinery, Inc. imagebroker.title=pri Image Broker imagebrokerlink.title=pri Image Broker Link Test imagelocationlist.title=Image Location List imagelocationdetail.title=Image Location Detail imagelocationinsert.title=Image Location Insert errors.header= errors.footer=
  • 77. Resources Main Struts Web Site http://jakarta.apache.org/struts/index.html Struts User Guide http://jakarta.apache.org/struts/userGuide/index.html Various Struts Resources http://jakarta.apache.org/struts/resources.html Ted Husted Web Site http://www.husted.com/struts/