Embed
Email

Struts

Document Sample
Struts
Shared by: HC11111003536
Categories
Tags
Stats
views:
3
posted:
11/9/2011
language:
English
pages:
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. 1

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

STRUTS Objectives





 Unit 6 - STRUTS Configuration File

 Unit 7 - Web Application Descriptor File

 Unit 8 - Application Resources File

 Unit 9 – Resources









Project Refinery, Inc. 3

Model-View-Controller Design

Pattern





Unit 1









Project Refinery, Inc. 4

STRUTS MVC Design Pattern





 Central controller mediates application

flow

 Controller delegates to appropriate

handler

 Handlers are tied to model components

 Model encapsulates business logic

 Control forwarded back through the

Controller to the appropriate View

Project Refinery, Inc. 5

STRUTS MVC Design Pattern









Project Refinery, Inc. 6

STRUTS MVC Design Pattern





3 Major Components in STRUTS

 Servletcontroller (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. 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









Project Refinery, Inc. 8

Model Components



Unit 2









Project Refinery, Inc. 9

STRUTS Model Components





 Model divided into concepts

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

message string for a particular Locale

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

the same messages in the

 Contains

language whose ISO language code is "xx"





Project Refinery, Inc. 21

STRUTS View Components





 Forms and FormBean interactions

 HTML Forms and their limitations

 Errors not easily handled









Project Refinery, Inc. 22

STRUTS View Components







































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

the ability to dynamically modify the URLs

specified by the "src" and "lowsrc" attributes in the

same manner that 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 View Components





 Page Composition with Includes

 The development of the various segments

of a site is easier if you can divide up the

work, and assign different developers to

the different segments

 Use the include capability of JavaServer

Pages technology to combine the results

into a single result page, or use the include

tag provided with Struts





Project Refinery, Inc. 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 directive can include a

file that contains java code or jsp tags

 The include action () 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





 Strutsincludes 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 Controller Components





 Action Classes:

 The Action class defines a perform method

that you override

 public ActionForward perform(ActionMapping

mapping, ActionForm form, HttpServletRequest

request, HttpServletResponse response)

throws IOException, ServletException;









Project Refinery, Inc. 35

STRUTS Controller Components





 The goal of an Action class is to

process this request, and then to return

an ActionForward object that identifies

the JSP page (if any) to which control

should be forwarded to generate the

corresponding response









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

safe 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

 Inside of the element, there two

important elements that you use to describe your

actions:







Project Refinery, Inc. 41

STRUTS Controller Components





This section contains your form bean

definitions. You use a 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





This section contains your action definitions. You

use an 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 element to use

with this action









Project Refinery, Inc. 43

STRUTS Controller Components



 One more section of good use is the 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:











Project Refinery, Inc. 44

STRUTS Controller Components





Web Application Deployment

 The

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  HTML "form" tags

 button  select lists with

 cancel embedded

 checkboxes  option

 file  options

 hidden  submit buttons

 image  text input fields

 multibox  textareas

 password input fields

 radio buttons

 reset buttons





Project Refinery, Inc. 49

HTML Tags – Typical HTML Form









First Name



Street Address



City



State



Postal Code

















Project Refinery, Inc. 50

HTML Tags – Typical Struts Form











































Project Refinery, Inc. 51

Bean Tags

 The "struts-bean" tag library provides substantial enhancements to

the basic capability provided by , as discussed in the

following sections:

 Bean Properties - Extended syntax to refer to JavaBean properties with

simple names (same as the standard JSP tags and

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





Project Refinery, Inc. 53

Bean Tag Example



















&unitnbr=

&onbase_dns=" >











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

Project Refinery, Inc. 58

Logic Tags - Example











































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







'

unitnbr=''

userid='' >











Image Broker Link Test











Project Refinery, Inc. 62

Custom Tags – tld File



doctype

com.pri.brokertag.ImageBrokerDoctype



value

true

true













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

.







Project Refinery, Inc. 66

STRUTS Configuration File

• Inside of the element, there are two important elements

that are used to describe your actions:



This section contains your form bean definitions. You use a 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.



This section contains your action definitions. You use an

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 element to use with this

action

Project Refinery, Inc. 67

Struts-config.xml







































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







imagebrokerWeb





action

org.apache.struts.action.ActionServlet



applicationimagebrokerWeb





configWEB-INF/struts-

config.xml





Project Refinery, Inc. 71

Web.xml File - continued





action

*.do











index.html











Project Refinery, Inc. 72

Web.xml File - continued





WEB-INF/struts-bean.tld

/WEB-INF/struts-bean.tld









WEB-INF/struts-html.tld

/WEB-INF/struts-html.tld









WEB-INF/struts-logic.tld

/WEB-INF/struts-logic.tld





Project Refinery, Inc. 73

Application Resources File



Unit 8









Project Refinery, Inc. 74

Application.properties File

error.cryptvalue.required=You must enter some text.

error.lob.required=You must enter the Line of Business.

error.unitnbr.required=You must enter the Unit Number.

error.onbase_dns.required=You must enter the OnBase DNS.

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





Project Refinery, Inc. 77


Related docs
Other docs by HC11111003536
ars_cluster_E_1_1
Views: 68  |  Downloads: 0
RClist
Views: 186  |  Downloads: 0
walkon
Views: 0  |  Downloads: 0
Workbook
Views: 3  |  Downloads: 0
part_c
Views: 0  |  Downloads: 0
downloadasset
Views: 0  |  Downloads: 0
Karn 20lesson 202
Views: 0  |  Downloads: 0
MHEOCC
Views: 0  |  Downloads: 0
priusprimer
Views: 0  |  Downloads: 0
CVdesign
Views: 1  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!