struts n e w

76
Project Refinery, Inc. 1 INTRODUCTION TO STRUTS Part of the Jakarta Project Sponsored by the Apache Software Foundation Developed by: Roger W Barnes of Project Refinery, Inc.

Upload: patinijava

Post on 06-May-2015

1.078 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Struts N E W

Project Refinery, Inc. 1

INTRODUCTION TO STRUTS

Part of the Jakarta ProjectSponsored by the

Apache Software Foundation

Developed by: Roger W Barnes of Project Refinery, Inc.

Page 2: Struts N E W

Project Refinery, Inc. 2

There are several different ways of looking at Struts. The three main ways are that Struts is:

An MVC Framework.Struts provides a unified framework for deploying servlet and JSP applications that use the MVC architecture.

A Collection of Utilities.Struts provides utility classes to handle many of the most common tasks in Web application development

A Set of JSP Custom Tag Libraries.Struts provides custom tag libraries for outputting bean properties, generating HTML forms, iterating over various types of data structures, and conditionally outputting HTML.

Page 3: Struts N E W

Project Refinery, Inc. 3

Model-View-Controller Design Pattern

The main aim of the MVC architecture  is to separate the business logic and application data from the presentation data to the user.

Here are the reasons why we should use the MVC design pattern. They are resuable : When the problems recurs, there is no need to invent a new solution, we just have to follow the pattern and adapt it as necessary. They are expressive: By using the MVC design pattern our application becomes more expressive.

Page 4: Struts N E W

Project Refinery, Inc. 4

1).  Model: The model object knows about all the data that need to be displayed. It only represents the data of an application. The model represents enterprise data and the business rules that govern access to and updates of this data. Model is not aware about the presentation data and how that data will be displayed to the browser.  

2). View : The view represents the presentation of the application. The view object refers to the model. It uses the query methods of the model to obtain the contents and renders it. The view is not dependent on the application logic. It remains same if there is any modification in the business logic.

3). Controller: The controller is responsible for intercepting the requests from view and passes it to the model for the appropriate action. After the action has been taken on the data, the controller is responsible for directing the appropriate view to the user.

Page 5: Struts N E W

Project Refinery, Inc. 5

STRUTS MVC Design Pattern

Page 6: Struts N E W

Project Refinery, Inc. 6

STRUTS MVC Design Pattern

The Struts framework is composed of approximately 300 classes and interfaces which are organized in about 12 top level packages.

3 Major Components in STRUTS Servlet controller (Controller) Java Server Pages (View) Application Business Logic (Model)

Page 7: Struts N E W

Project Refinery, Inc. 7

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

Page 8: Struts N E W

Project Refinery, Inc. 8

Model Components

Unit 2

Page 9: Struts N E W

Project Refinery, Inc. 9

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

Page 10: Struts N E W

Project Refinery, Inc. 10

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

Page 11: Struts N E W

Project Refinery, Inc. 11

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

Page 12: Struts N E W

Project Refinery, Inc. 12

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

Page 13: Struts N E W

Project Refinery, Inc. 13

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

Page 14: Struts N E W

Project Refinery, Inc. 14

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

Page 15: Struts N E W

Project Refinery, Inc. 15

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

Page 16: Struts N E W

Project Refinery, Inc. 16

STRUTS Model Components

Business Logic Beans - Continued For larger applications, these beans will often

be stateful or stateless Enterprise JavaBeans (EJBs)

Page 17: Struts N E W

Project Refinery, Inc. 17

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

Page 18: Struts N E W

Project Refinery, Inc. 18

View Components

Unit 3

Page 19: Struts N E W

Project Refinery, Inc. 19

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

Page 20: Struts N E W

Project Refinery, Inc. 20

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"

Page 21: Struts N E W

Project Refinery, Inc. 21

STRUTS View Components

Forms and FormBean interactions HTML Forms and their limitations Errors not easily handled

Page 22: Struts N E W

Project Refinery, Inc. 22

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

Page 23: Struts N E W

Project Refinery, Inc. 23

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

Page 24: Struts N E W

Project Refinery, Inc. 24

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

Page 25: Struts N E W

Project Refinery, Inc. 25

Controller Components

Unit 4

Page 26: Struts N E W

Project Refinery, Inc. 26

STRUTS Controller Components

Struts includes a Servlet that implements the primary function of mapping a request URI to an Action class (ActionServlet)

Page 27: Struts N E W

Project Refinery, Inc. 27

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

Page 28: Struts N E W

Project Refinery, Inc. 28

STRUTS Controller Components

Action Classes: The Action class defines a perform method

that you overridepublic ActionForward perform(ActionMapping

mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;

Page 29: Struts N E W

Project Refinery, Inc. 29

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

Page 30: Struts N E W

Project Refinery, Inc. 30

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

Page 31: Struts N E W

Project Refinery, Inc. 31

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

Page 32: Struts N E W

Project Refinery, Inc. 32

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

Page 33: Struts N E W

Project Refinery, Inc. 33

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.

Page 34: Struts N E W

Project Refinery, Inc. 34

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:

Page 35: Struts N E W

Project Refinery, Inc. 35

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

Page 36: Struts N E W

Project Refinery, Inc. 36

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

Page 37: Struts N E W

Project Refinery, Inc. 37

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>

Page 38: Struts N E W

Project Refinery, Inc. 38

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

Page 39: Struts N E W

Project Refinery, Inc. 39

Tag Libraries

Unit 5

Page 40: Struts N E W

Project Refinery, Inc. 40

Tag Libraries bean This tag library contains tags useful in accessing beans and their properties, as

well as defining new beans (based on these accesses) that are accessible to the remainder of the page via scripting variables and page scope attributes.

html This taglib contains tags used to create struts input forms, as well as other tags generally useful in the creation of HTML-based user interfaces

logic This 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. Tags that do value comparisons (equal, greaterThan, lessThan, notEqual) and substring matching (match, notMatch)

nested A bean holds a reference to another bean internally, and all access to that bean is handled through the current bean. This act of having one bean's access go through another bean is known as "nesting beans". The first bean is known as the parent bean. The bean which it references , is known as a child bean. The terms "parent" and "child" are commonly used to describe the model's hierarchy.

Page 41: Struts N E W

Project Refinery, Inc. 41

HTML Tag Summary

base Generates an HTML <base> tag with its href attribute set to absolute URL of the

enclosing JSP. button Generates an HTML<input type=“button”> tag.

cancel Generates an HTML<input type=“submit”> tag, when excuted causes Struts Cancel feature to be triggered.

checkbox Generates an HTML<input type=“checkbox”> tag.

errors Displays a set of error messages prepared by a business logic component and

stored as an org.apache.struts.action.ActionErrors object. file Generates an HTML<input type=“file”> tag.

form Generates an HTML<form> tag.frame Generates an HTML<frame> tag.hidden Generates an HTML<input type=“hidden”> tag.html Generates an HTML<html> tag.

image Generates an HTML<input type=“image”> tag.

img Generates an HTML<img> tag.

javascript Generates client-side JavaScript Validation code for validations defined in the Validator framework’s validation.xml file.

Page 42: Struts N E W

Project Refinery, Inc. 42

link Generates an HTML hyperlink <a> tag.

messages Displays a set of messages stored as an org.apache.struts.action.ActionErrors object

multibox Generates an HTML <input type=“checkbox”> tag .

option Generates an HTML <option> tag

optionscollection Generates an HTML <option> tags for each element in a collection.

password Generates an HTML <input type=“password”> tag

radio Generates an HTML <input type=“radio”> tag

reset Generates an HTML <input type=“reset”> tag

rewrite Generates a URL by specifying a base URL and optionally specifying an and query string parameters to add to the URL.

select Generates an HTML <select> tag

submit Generates an HTML <input type=“submit”> tag.

text Generates an HTML <input type=“text”> tag.

textarea Generates an HTML <textarea> tag.

xhtml Instructs the rest of the tag in HTML Tag Library to generate their output as XHTML instead of HTML.

Page 43: Struts N E W

Project Refinery, Inc. 43

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>

Page 44: Struts N E W

Project Refinery, Inc. 44

HTML Tags – Typical Struts Form<HTML:HTML>

<BODY>

<HTML:FORM Action="/CustomerForm" focus=“name” >

<TABLE WIDTH="100%">

<TR><TD><bean:message key="customer.name"/></TD>

<TD><HTML:TEXT property="name" size="40" maxlength="40" /></TD></TR>

<TR><TD><bean:message key="customer.address"/></TD>

<TD><HTML:TEXT property="address" size ="40" maxlength ="40" /></TD></TR>

<TR><TD><bean:message key="customer.city"/></TD>

<TD><HTML:TEXT property="city" size ="20" maxlength ="20" /></TD></TR>

<TR><TD><bean:message key="customer.state"/></TD>

<TD><HTML:TEXT property="state" size ="2" maxlength ="2" /></TD></TR>

<TR><TD><bean:message key="customer.zip"/></TD>

<TD><HTML:TEXT property="zip" size ="9" maxlength ="9" /></TD></TR>

<TR><TD ALIGN=CENTER><html:submit property="action" value ="Save"/></TD>

<TD><html:reset property="action" value ="Reset"/></TD></TR>

</TABLE>

</HTML:FORM>

</BODY>

</HTML:HTML>

Page 45: Struts N E W

Project Refinery, Inc. 45

Logic Tag Library Tags

empty Wraps content that is conditionally processes based on whether the specified object is null or contains an empty (zero-length) String.

equal Wraps content that is conditionally processes based on whether a specified object’s value equals a specified constant value.

forward Looks up a forward from the struts configuration file and processes it.

greaterEqual Wraps content that is conditionally processes based on whether a specified object’s value is greater than or equal to specified constant value.

greaterThan Wraps content that is conditionally processes based on whether a specified object’s value is greater than specified constant value.

iterate Wraps content that is repeated for each element of a specified collection.

lessEqual Wraps content that is conditionally processes based on whether a specified object’s value is less than or equal to specified constant value.

lessThan Wraps content that is conditionally processes based on whether a specified object’s value is less than specified constant value

match Wraps content that is conditionally processes based on whether a specified object’s value contains, starts with, or ends with a specified constant value.

Page 46: Struts N E W

Project Refinery, Inc. 46

messagesNotPresent Wraps content that is conditionally processes based on whether Struts’ org.apache.struts.Action.ActionErrors or org.apache.struts.action.

.ActionMessages object does not have any errors or messages in it.

messagesPresent Wraps content that is conditionally processes based on whether Struts’ org.apache.struts.Action.ActionErrors or org.apache.struts.action.

.ActionMessages object has any errors or messages in it, respectively

notEmpty Wraps content that is conditionally processes based on whether the specified object is non-null and does not contain an empty String.

notEqual Wraps content that is conditionally processes based on whether the specified object is not equal to a specified constant value.

notMatch Wraps content that is conditionally processes based on whether a specified object’s value does not contain, start with, or end with a specified constant value.

notPresent Wraps content that is conditionally processes based on whether a specified object does not exist.

present Wraps content that is conditionally processes based on whether a specified object exists.

redirect Composes a URL to another page and then redirects to it.

Page 47: Struts N E W

Project Refinery, Inc. 47

Nested Tag Library Tagscheckbox Nesting-enabled version of the HTML Tag Library’s checkbox tag.

define Nesting-enabled version of the Bean Tag Library’s define tag.

empty Nesting-enabled version of the Logic Tag Library’s empty tag.

equal Nesting-enabled version of the Logic Tag Library’s equal tag.

errors Nesting-enabled version of the HTML Tag Library’s errors tag.

file Nesting-enabled version of the HTML Tag Library’s file tag.

form Nesting-enabled version of the HTML Tag Library’s form tag.

greaterEqual Nesting-enabled version of the Logic Tag Library’s greaterEqual tag.

greaterThan Nesting-enabled version of the Logic Tag Library’s greaterThan tag.

hidden Nesting-enabled version of the HTML Tag Library’s hidden tag.

image Nesting-enabled version of the HTML Tag Library’s image tag.

img Nesting-enabled version of the HTML Tag Library’s img tag.

iterate Nesting-enabled version of the Logic Tag Library’s iterate tag.

lessEqual Nesting-enabled version of the Logic Tag Library’s lessEqual tag.

Page 48: Struts N E W

Project Refinery, Inc. 48

lessThan Nesting-enabled version of the Logic Tag Library’s lessThan tag.

link Nesting-enabled version of the HTML Tag Library’s link tag.

match Nesting-enabled version of the Logic Tag Library’s match tag.

message Nesting-enabled version of the Bean Tag Library’s message tag.

messages Nesting-enabled version of the HTML Tag Library’s messages tag.

messagesNotPresent Nesting-enabled version of the Logic Tag Library’s messagesNotPresent tag.

messagesPresent Nesting-enabled version of the Logic Tag Library’s messagesPresent tag.

multibox Nesting-enabled version of the HTML Tag Library’s multibox tag.

nest Defines a logical level in a nesting hierarchy and associates an object with it that all of its nested tags will be relative to.

notEmpty Nesting-enabled version of the Logic Tag Library’s notEmpty tag.

notEqual Nesting-enabled version of the Logic Tag Library’s notEqual tag.

notMatch Nesting-enabled version of the Logic Tag Library’s notMatch tag.

notPresent Nesting-enabled version of the Logic Tag Library’s notPresent tag.

options Nesting-enabled version of the HTML Tag Library’s options tag.

Page 49: Struts N E W

Project Refinery, Inc. 49

optionsCollection Nesting-enabled version of the HTML Tag Library’s optionsCollection tag.

password Nesting-enabled version of the HTML Tag Library’s password tag.

present Nesting-enabled version of the Logic Tag Library’s present tag.

radio Nesting-enabled version of the HTML Tag Library’s radio tag.

root Defines the root object of a nested hierarchy of objects.

select Nesting-enabled version of the HTML Tag Library’s select tag.

size Nesting-enabled version of the Bean Tag Library’s size tag.

submit Nesting-enabled version of the HTML Tag Library’s submit tag.

text Nesting-enabled version of the HTML Tag Library’s text tag.

textarea Nesting-enabled version of the HTML Tag Library’s textarea tag.

write Nesting-enabled version of the Bean Tag Library’s write tag.

writeNesting Renders or creates a JSP scripting variable for a string representation of the object related to the current nesting level.

Page 50: Struts N E W

Project Refinery, Inc. 50

Bean Tags The "struts-bean" 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 "address" 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.

Page 51: Struts N E W

Project Refinery, Inc. 51

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.

Page 52: Struts N E W

Project Refinery, Inc. 52

Bean Tag Example<table border="2">

<tr>

<th align="left"><bean:message key=“imagebroker.lob”/></th>

<th align="left"><bean:message key=“imagebroker.unitnbr”/></th>

<th align="left"><bean:message key=“imagebroker.onbase_dns”/></th>

</tr>

<logic:iterate id="image" property="collection"

name="ImageLocationListForm">

<tr>

<td><a href="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'/>" >

<bean:write name="image" property="lob"/></a></td>

<td><bean:write name="image" property="unitnbr"/></td>

<td><bean:write name="image" property="onbase_dns"/></td>

</tr>

</logic:iterate>

</table>

Page 53: Struts N E W

Project Refinery, Inc. 53

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.

Page 54: Struts N E W

Project Refinery, Inc. 54

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.

Page 55: Struts N E W

Project Refinery, Inc. 55

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).

Page 56: Struts N E W

Project Refinery, Inc. 56

Logic TagsTag 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.

matchEvaluate 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

Page 57: Struts N E W

Project Refinery, Inc. 57

Logic Tags - Example<html:html>

<head>

<title><bean:message key="imagebrokerlink.title"/></title>

<META name="GENERATOR" content="IBM WebSphere Studio">

</head>

<body>

<html:form action="/ImageLocationForm" >

<center>

<font size=3>

<br>

<b>

<logic:notEqual property="action" name="ImageLocationForm" value="Insert">

<bean:message key="imagelocationdetail.title"/>

</logic:notEqual>

<logic:equal property="action" name="ImageLocationForm" value="Insert">

<bean:message key="imagelocationinsert.title"/>

</logic:equal>

Page 58: Struts N E W

Project Refinery, Inc. 58

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.

Page 59: Struts N E W

Project Refinery, Inc. 59

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.

Page 60: Struts N E W

Project Refinery, Inc. 60

Custom Tags

<%@ taglib uri="WEB-INF/imagebroker.tld" prefix="broker" %>

<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="Invoice"/>

<broker:keyword name="CompanyNbr" value="55555"/>

<broker:keyword name="PONbr" value="M12345"/>

<broker:constraint name="FromDate" value="02/02/2002"/>

<broker:constraint name="ToDate" value="02/28/2002"/>

Image Broker Link Test

</broker:form>

</td>

</tr>

</table>

Page 61: Struts N E W

Project Refinery, Inc. 61

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>

Page 62: Struts N E W

Project Refinery, Inc. 62

Custom Tags – Tag Classpublic 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("keyword_parms");

keyword_count = (String)

request.getAttribute("queryobject_count");

iCnt ++;

ht.put("QueryObject" + iCnt, value);

request.setAttribute("keyword_parms", ht);

request.setAttribute("queryobject_count", new String(new

Integer(iCnt).toString()));

return EVAL_PAGE; }

}

Page 63: Struts N E W

Project Refinery, Inc. 63

STRUTS Configuration File

Unit 6

Page 64: Struts N E W

Project Refinery, Inc. 64

STRUTS Configuration FileThe 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 "struts-config_1_0.dtd". The outermost XML element must be <struts-config>.

Page 65: Struts N E W

Project Refinery, Inc. 65

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

Page 66: Struts N E W

Project Refinery, Inc. 66

Struts-config.xml<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"

"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">

<struts-config>

<!-- ========== Form Bean Definitions =================================== -->

<form-beans>

<form-bean name="CryptForm" type="com.pri.imagebrokerWeb.CryptForm" />

</form-beans>

<!-- ========== Global Forward Definitions ============================== -->

<global-forwards>

<forward name="start" path="/index.html"/>

</global-forwards>

<!-- ========== Action Mapping Definitions ============================== -->

<action-mappings>

<action path="/CryptForm" type="com.pri.imagebrokerWeb.CryptAction"

name="CryptForm" scope="request" input="/pgCrypt.jsp">

<forward name="encrypt" path="/pgCryptDisplay.jsp"/>

</action>

</action-mappings>

</struts-config>

Page 67: Struts N E W

Project Refinery, Inc. 67

Web Application Descriptor File

Unit 7

Page 68: Struts N E W

Project Refinery, Inc. 68

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.

Page 69: Struts N E W

Project Refinery, Inc. 69

Web.xml File<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"

"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app id="WebApp">

<display-name>imagebrokerWeb</display-name>

<!-- Action Servlet Configuration -->

<servlet id="Servlet_1">

<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>

Page 70: Struts N E W

Project Refinery, Inc. 70

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>

Page 71: Struts N E W

Project Refinery, Inc. 71

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>

Page 72: Struts N E W

Project Refinery, Inc. 72

Application Resources File

Unit 8

Page 73: Struts N E W

Project Refinery, Inc. 73

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=

Page 74: Struts N E W

Project Refinery, Inc. 74

Resources

Unit 9

Page 75: Struts N E W

Project Refinery, Inc. 75

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/

Page 76: Struts N E W

Project Refinery, Inc. 76

INTRODUCTION TO STRUTSPart of the Jakarta Project

Sponsored by theApache Software Foundation

Developed by: Roger W Barnes of Project Refinery, Inc.