You are on page 1of 77

STRUTS

Part of the Jakarta Project


Sponsored by the
Apache Software Foundation

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

Introduction to Struts

Project Refinery, Inc.

STRUTS

Objectives

Course

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

STRUTS

Objectives

Unit

6 - STRUTS Configuration File


Unit 7 - Web Application Descriptor File
Unit 8 - Application Resources File
Unit 9 Resources

Project Refinery, Inc.

Model-View-Controller Design
Pattern

Unit 1

Project Refinery, Inc.

STRUTS
Central

MVC Design Pattern

controller mediates application

flow
Controller delegates to appropriate
handler
Handlers are tied to model components
Model encapsulates business logic
Control forwarded back through the
Controller to the appropriate View
Project Refinery, Inc.

STRUTS

MVC Design Pattern

Project Refinery, Inc.

STRUTS
3

MVC Design Pattern

Major Components in STRUTS

Servlet

controller (Controller)
Java Server Pages (View)
Application Business Logic (Model)
Controller

bundles and routes HTTP


request to other objects in framework
Controller parses configuration file

Project Refinery, Inc.

STRUTS

MVC Design Pattern

Configuration

file contains action


mappings (determines navigation)
Controller uses mappings to turn HTTP
requests into application actions
Mapping must specify
A

request path
Object type to act upon the request

Project Refinery, Inc.

Model Components
Unit 2

Project Refinery, Inc.

STRUTS
Model

Model Components

divided into concepts

Internal

state of the system


Actions that can change that state
Internal

state of system represented by

JavaBeans
Enterprise

JavaBeans

Project Refinery, Inc.

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

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

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

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

Project Refinery, Inc.

18

View Components
Unit 3

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
Refinery, Inc.
20
message string forProject
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"

Project Refinery, Inc.

21

STRUTS
Forms

View Components

and FormBean interactions

HTML

Forms and their limitations


Errors not easily handled

Project Refinery, Inc.

22

STRUTS

View Components

<%@ page language="java" %>


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

Project Refinery, Inc.

23

STRUTS

View Components

Building Forms with Struts

The taglib directive tells the JSP page compiler


where to find the tag library descriptor for the
Struts tag library
message tag is used to look up internationalized
message strings from a MessageResources
object containing all the resources for this
application
The errors tag displays any error messages that
have been stored by a business logic component,
or nothing if no errors have been stored
Project Refinery, Inc.

24

STRUTS

View Components

Building Forms with Struts continued

The form tag renders an HTML <form> element,


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

25

STRUTS

View Components

Input field types supported

checkboxes
hidden fields
password input fields
radio buttons
reset buttons
select lists
options
submit buttons
text input fields
textareas
Project Refinery, Inc.

26

STRUTS

View Components

Useful Presentation Tags

[logic] iterate repeats its tag body once for each


element of a specified collection (which can be an
Enumeration, a Hashtable, a Vector, or an array of
objects)
[logic] present depending on which attribute is
specified, this tag checks the current request, and
evaluates the nested body content of this tag only
if the specified value is present
[logic] notPresent the companion tag to present,
notPresent provides the same functionality when
the specified attribute is not present
Project Refinery, Inc.

27

STRUTS

View Components

Useful Presentation Tags continued

[html] link generates a HTML <a> element as an


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

28

STRUTS

View Components

Automatic Form Validation

Struts offers an additional facility to validate the


input fields it has received
To utilize this feature, override the validate()
method in your ActionForm class
The validate() method is called by the controller
servlet after the bean properties have been
populated, but before the corresponding action
class's perform() method is invoked

Project Refinery, Inc.

29

STRUTS
Page

View Components

Composition with Includes

The

development of the various segments


of a site is easier if you can divide up the
work, and assign different developers to
the different segments
Use the include capability of JavaServer
Pages technology to combine the results
into a single result page, or use the include
tag provided with Struts

Project Refinery, Inc.

30

STRUTS

View Components

Page Composition with Includes continued

There are three types of include available,


depending on when you want the combination of
output to occur:

An <%@ include file="xxxxx" %> directive can include a


file that contains java code or jsp tags
The include action (<jsp:include page="xxxxx"
flush="true" />) is processed at request time, and is
handled transparently by the server
The bean:include tag takes either a an argument
"forward" representing a logical name mapped to the jsp
to include, or the "id" argument, which represents a page
context String variable to print out to the jsp page

Project Refinery, Inc.

31

Controller Components
Unit 4

Project Refinery, Inc.

32

STRUTS

Controller Components

Struts

includes a Servlet that


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

Project Refinery, Inc.

33

STRUTS

Controller Components

Your primary responsibilities are:

Write an Action class (that is, an extension of the


Action class) for each logical request that may be
received
Write the action mapping configuration file (in
XML) that is used to configure the controller
servlet (struts-config.xml)
Update the web application deployment descriptor
file (in XML) for your application to include the
necessary Struts components
Add the appropriate Struts components to your
application
Project Refinery, Inc.

34

STRUTS
Action

Controller Components

Classes:

Action class defines a perform method


that you override

The

public ActionForward perform(ActionMapping


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

Project Refinery, Inc.

35

STRUTS

Controller Components

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

The

Project Refinery, Inc.

36

STRUTS

Controller Components

A typical Action class will implement the


following logic in its perform() method

Validate the current state of the user's session


If validation has not yet occurred, validate the form
bean properties as necessary
Perform the processing required to deal with this
request
Update the server-side objects that will be used to
create the next page of the user interface
Return an appropriate ActionForward object that
identifies the JSP page to be used to generate this
response, based on the newly updated beans
Project Refinery, Inc.

37

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 threadsafe coding is to use only local variables, not
instance variables, in your Action class

Project Refinery, Inc.

38

STRUTS

Controller Components

Design issues to remember when coding


Action classes include the following
continued

The beans that represent the Model of your


system may throw exceptions due to problems
accessing databases or other resources. You
should trap all such exceptions in the logic of your
perform() method, and log them to the application
logfile
As a general rule, allocating scarce resources and
keeping them across requests from the same user
(in the user's session) can cause scalability
problems
Project Refinery, Inc.

39

STRUTS

Controller Components

The ActionMapping Implementation

type - Fully qualified Java class name of the Action


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

40

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 <strutsconfig>
Inside of the <struts-config> element, there two
important elements that you use to describe your
actions:

Project Refinery, Inc.

41

STRUTS

Controller Components

<form-beans>
This section contains your form bean
definitions. You use a <form-bean> element for
each form bean, which has the following
important attributes:

name: The name of the request or session level


attribute that this form bean will be stored as
type: The fully-qualified Java classname of your form
bean

Project Refinery, Inc.

42

STRUTS

Controller Components

<action-mappings>
This section contains your action definitions. You
use an <action> element for each of your actions
you would like to define. Each action element has
requires the following attributes to be defined:

path: The application context-relative path to the action


type: The fully qualified java classname of your Action
class
name: The name of your <form-bean> element to use
with this action

Project Refinery, Inc.

43

STRUTS

Controller Components

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

44

STRUTS

Controller Components

The

Web Application Deployment


Descriptor
The

final step in setting up the application


is to configure the application deployment
descriptor (stored in file WEB-INF/web.xml)
to include all the Struts components that
are required

Project Refinery, Inc.

45

Tag Libraries
Unit 5

Project Refinery, Inc.

46

STRUTS

Tag Libraries

HTML

Tags
Bean Tags
Logic Tags
Template Tags
Custom Tags

Project Refinery, Inc.

47

HTML Tags

The tags in the Struts HTML library form a


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

Project Refinery, Inc.

48

HTML Tags

HTML "form" tags

button
cancel
checkboxes
file
hidden
image
multibox
password input fields
radio buttons
reset buttons

HTML "form" tags

select lists with


embedded
option
options
submit buttons
text input fields

textareas

Project Refinery, Inc.

49

HTML Tags Typical HTML Form


<HTML>
<BODY>
<FORM>
<TABLE WIDTH="100%">
<TR><TD>First Name</TD>
<TD><INPUT TYPE="TEXT" NAME="Name" SIZE="40" MAXLENGTH="40"></TD></TR>
<TR><TD>Street Address</TD>
<TD><INPUT TYPE="TEXT" NAME="Address" SIZE="40" MAXLENGTH="40"></TD></TR>
<TR><TD>City</TD>
<TD><INPUT TYPE="TEXT" NAME="City" SIZE="20" MAXLENGTH="20"></TD></TR>
<TR><TD>State</TD>
<TD><INPUT TYPE="TEXT" NAME="State" SIZE="2" MAXLENGTH="2"></TD></TR>
<TR><TD>Postal Code</TD>
<TD><INPUT TYPE="TEXT" NAME="ZipCode" SIZE="9" MAXLENGTH="9"></TD></TR>
<TR><TD ALIGN=CENTER><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Save"></TD>

<TD><INPUT TYPE="RESET" NAME="Reset" VALUE="Cancel"></TD></TR>


</TABLE>
</FORM>
</BODY>
</HTML>

Project Refinery, Inc.

50

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>

Project Refinery, Inc.

51

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.

Project Refinery, Inc.

52

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
parameter
resource
size

Expose a specified item from the page context as a bean.


Define a scripting variable based on the value(s) of the specified request parameter.
Load a web application resource and make it available as a bean.
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.

Project Refinery, Inc.

53

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>

Project Refinery, Inc.

54

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.

Project Refinery, Inc.

55

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.
Project Refinery, Inc.

56

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).
Project Refinery, Inc.

57

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
messagesNotPresent

messagesPresent

Evaluate the nested body content of this tag if specified value is an appropriate substring of requested variable.
Generate the nested body content of this tag if the specified message is not present in this request.

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

Project Refinery, Inc.

58

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>

Project Refinery, Inc.

59

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.

Project Refinery, Inc.

60

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.

Project Refinery, Inc.

61

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>
Project Refinery, Inc.

62

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>

Project Refinery, Inc.

63

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("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;

}
Project Refinery, Inc.

64

STRUTS Configuration File


Unit 6

Project Refinery, Inc.

65

STRUTS Configuration File


The

developer's responsibility is to
create an XML file named strutsconfig.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>.

Project Refinery, Inc.

66

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 <formbean> 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
Project Refinery, Inc.

67

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"
<forward name="encrypt"

scope="request"

input="/pgCrypt.jsp">

path="/pgCryptDisplay.jsp"/>

</action>
</action-mappings>
</struts-config>

Project Refinery, Inc.

68

Web Application Descriptor


File
Unit 7

Project Refinery, Inc.

69

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.
Project Refinery, Inc.

70

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</paramvalue>
</init-param>
<init-param>
<param-name>config</param-name><param-value>WEB-INF/strutsconfig.xml</param-value>
</init-param>
</servlet>
Project Refinery, Inc.

71

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>

Project Refinery, Inc.

72

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>
Project Refinery, Inc.

73

Application Resources File


Unit 8

Project Refinery, Inc.

74

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=

Project Refinery, Inc.

75

Resources
Unit 9

Project Refinery, Inc.

76

Resources
Main

Struts Web Site

http://jakarta.apache.org/struts/index.html

Struts

http://jakarta.apache.org/struts/userGuide/index.html

Various Struts Resources

User Guide

http://jakarta.apache.org/struts/resources.html

Ted Husted Web Site

http://www.husted.com/struts/

Project Refinery, Inc.

77

You might also like