34
1 1 Step by Step Guide Step by Step Guide for building a simple for building a simple Struts Application Struts Application In this session, we will try to build a very simple Struts application step by step. 03/26/2007

Step By Step Guide For Buidling Simple Struts App Speakernoted

Embed Size (px)

Citation preview

Page 1: Step By Step Guide For Buidling Simple Struts App Speakernoted

1

1

Step by Step GuideStep by Step Guidefor building a simplefor building a simple

Struts ApplicationStruts Application

In this session, we will try to build a very simple Struts application step by step.

03/26/2007

Page 2: Step By Step Guide For Buidling Simple Struts App Speakernoted

2

2

Sang Shin

[email protected]/j2ee

Java™ Technology EvangelistSun Microsystems, Inc.

03/26/2007

Page 3: Step By Step Guide For Buidling Simple Struts App Speakernoted

3

3

Sample App We areSample App We aregoing to buildgoing to build

03/26/2007

Page 4: Step By Step Guide For Buidling Simple Struts App Speakernoted

4

4

Sample App? Keld Hansen's submit application? Things to do

– Creating ActionForm object– Creating Action object– Forwarding at either success or failure through

configuration set in struts-config.xml file– Input validation– Internationalizaition

? You can also build it using NetBeans

The sample application we are going to use and show is Keld Hansen's submit application. The source files and ant build.xml script can be found in the handson/homework material you can download from class website.

This is a simple application but it uses most of Struts framework.

03/26/2007

Page 5: Step By Step Guide For Buidling Simple Struts App Speakernoted

5

5

Steps to followSteps to follow

Now let's take a look at the steps you will follow.

03/26/2007

Page 6: Step By Step Guide For Buidling Simple Struts App Speakernoted

6

6

Steps1.Create development directory structure2.Write web.xml3.Write struts-config.xml4.Write ActionForm classes5.Write Action classes6.Create ApplicationResource.properties7.Write JSP pages8.Build, deploy, and test the application

So this is the list of steps. Of course, you don't exactly follow these steps in sequence. In fact, it is expected that some of these steps will be reiterated.

03/26/2007

Page 7: Step By Step Guide For Buidling Simple Struts App Speakernoted

7

7

Step 1: Create DevelopmentStep 1: Create DevelopmentDirectory StructureDirectory Structure

The first step is to create development directory structure.

03/26/2007

Page 8: Step By Step Guide For Buidling Simple Struts App Speakernoted

8

8

Development Directory Structure? Same development directory structure for

any typical Web application? Ant build script should be written

accordingly? If you are using NetBeans, the

development directory structure is automatically created

The source directory structure is the same directory structure we used for other Web application development under Java WSDP. Of course, the build.xml script should be written accordingly.

03/26/2007

Page 9: Step By Step Guide For Buidling Simple Struts App Speakernoted

9

9

Step 2: Write web.xmlStep 2: Write web.xmlDeployment DescriptorDeployment Descriptor

Step 2 is to write web.xml file.

03/26/2007

Page 10: Step By Step Guide For Buidling Simple Struts App Speakernoted

10

10

web.xml? Same structure as any other Web

application– ActionServlet is like any other servlet– Servlet definition and mapping of ActionServlet

needs to be specified in the web.xml? There are several Struts specific

<init-param> elements– Location of Struts configuration file

? Struts tag libraries could be defined

Because Struts application is a genuine Web application, it has to follow the same rules that any Web application has to follow. And one of them is the presence of web.xml deployment descriptor file.

The web.xml file should define ActionServlet, which is the controller piece that is provided by the Struts framework, and its mapping with URI.

As you will see in the example web.xml file in the following slide, there are several Struts specific initialization parameters. Also the Struts tag libraries also need to be declared.

03/26/2007

Page 11: Step By Step Guide For Buidling Simple Struts App Speakernoted

11

11

Example: web.xml1 <?xml version="1.0" encoding="UTF-8"?>2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">3 <servlet>4 <servlet-name>action</servlet-name>5 <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>6 <init-param>7 <param-name>config</param-name>8 <param-value>/WEB-INF/struts-config.xml</param-value>9 </init-param>10 ...11 </servlet>12 <servlet-mapping>13 <servlet-name>action</servlet-name>14 <url-pattern>*.do</url-pattern>15 </servlet-mapping>

This is the continuation of the web.xml file. Here you see the declarations of Struts tag libraries.

03/26/2007

Page 12: Step By Step Guide For Buidling Simple Struts App Speakernoted

12

12

Step 3: Write Step 3: Write struts-config.xmlstruts-config.xml

The next step is to write struts-config.xml

03/26/2007

Page 13: Step By Step Guide For Buidling Simple Struts App Speakernoted

13

13

struts-config.xml? Identify required input forms and then define

them as <form-bean> elements? Identify required Action's and then define them

as <action> elements within <action-mappings> element

– make sure same value of name attribute of <form-bean> is used as the value of name attribute of <action> element

– define if you want input validation? Decide view selection logic and specify them as

<forward> element within <action> element

(read theslide)

03/26/2007

Page 14: Step By Step Guide For Buidling Simple Struts App Speakernoted

14

14

struts-config.xml: <form-beans>1 <?xml version="1.0" encoding="UTF-8" ?>2 3 <!DOCTYPE struts-config PUBLIC4 "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"5 "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">6 7 8 <struts-config>9 <form-beans>10 <form-bean name="submitForm"11 type="submit.SubmitForm"/> 12 </form-beans>

This is <form-beans> section of the struts-config.xml file. Here we define one <form-bean> element. The value of the name attribute of the <form-bean> element is the same as the value of name attribute of <action> element in the following slide.

03/26/2007

Page 15: Step By Step Guide For Buidling Simple Struts App Speakernoted

15

15

struts-config.xml: <action-mappings>

1 2 <!-- ==== Action Mapping Definitions ===============-->3 <action-mappings>4 5 <action path="/submit"6 type="submit.SubmitAction"7 name="submitForm"8 input="/submit.jsp"9 scope="request"10 validate="true">11 <forward name="success" path="/submit.jsp"/> 12 <forward name="failure" path="/submit.jsp"/> 13 </action>14 15 </action-mappings>

This is an example of <action-mappings> element.

03/26/2007

Page 16: Step By Step Guide For Buidling Simple Struts App Speakernoted

16

16

Step 4: Write Step 4: Write ActionForm classesActionForm classes

03/26/2007

Page 17: Step By Step Guide For Buidling Simple Struts App Speakernoted

17

17

ActionForm Class? Extend org.apache.struts.action.ActionForm

class? Decide set of properties that reflect the input

form ? Write getter and setter methods for each

property? Write validate() method if input validation is

desired

03/26/2007

Page 18: Step By Step Guide For Buidling Simple Struts App Speakernoted

18

18

Write ActionForm class1 package submit;2 3 import javax.servlet.http.HttpServletRequest;4 import org.apache.struts.action.*;5 6 public final class SubmitForm extends ActionForm {7 8 /* Last Name */9 private String lastName = "Hansen"; // default value10 public String getLastName() {11 return (this.lastName);12 }13 public void setLastName(String lastName) {14 this.lastName = lastName;15 }16 17 /* Address */18 private String address = null;19 public String getAddress() {20 return (this.address);21 }22 public void setAddress(String address) {23 this.address = address;24 }25 ...

03/26/2007

Page 19: Step By Step Guide For Buidling Simple Struts App Speakernoted

19

19

Write validate() method1 public final class SubmitForm extends ActionForm {2 3 ...4 public ActionErrors validate(ActionMapping mapping,5 HttpServletRequest request) {6 7 ...8 9 // Check for mandatory data10 ActionErrors errors = new ActionErrors();11 if (lastName == null || lastName.equals("")) { 12 errors.add("Last Name", new ActionError("error.lastName"));13 }14 if (address == null || address.equals("")) { 15 errors.add("Address", new ActionError("error.address"));16 }17 if (sex == null || sex.equals("")) { 18 errors.add("Sex", new ActionError("error.sex"));19 }20 if (age == null || age.equals("")) { 21 errors.add("Age", new ActionError("error.age"));22 }23 return errors;24 }25 ..When this “LogonForm” is associated with a

controller, it will be passed to the controller whenever it’s service is requested by the user.

JSP pages acting as the view for this LogonForm are automatically updated by Struts with the current values of the UserName and Password properties.

If the user changes the properties via the JSP page, the LogonForm will automatically be updated by Struts

But what if the user screws up and enters invalid data? ActionForms provide validation…

Before an ActionForm object is passed to a controller for processing, a “validate” method can be implemented on the form which allows the form to belay processing until the user fixes invalid input as we will see on the next slide...

03/26/2007

Page 20: Step By Step Guide For Buidling Simple Struts App Speakernoted

20

20

Step 5: Write Step 5: Write Action classesAction classes

03/26/2007

Page 21: Step By Step Guide For Buidling Simple Struts App Speakernoted

21

21

Action Classes? Extend org.apache.struts.action.Action class? Handle the request

– Decide what kind of server-side Model objects (EJB, JDO, etc.) can be invoked

? Based on the outcome, select the next view

03/26/2007

Page 22: Step By Step Guide For Buidling Simple Struts App Speakernoted

22

22

Example: Action Class 1 package submit;2 3 import javax.servlet.http.*;4 import org.apache.struts.action.*;5 6 public final class SubmitAction extends Action {7 8 public ActionForward execute(ActionMapping mapping,9 ActionForm form,10 HttpServletRequest request,11 HttpServletResponse response) {12 13 SubmitForm f = (SubmitForm) form; // get the form bean14 // and take the last name value15 String lastName = f.getLastName(); 16 // Translate the name to upper case 17 //and save it in the request object 18 request.setAttribute("lastName", lastName.toUpperCase());19 20 // Forward control to the specified success target21 return (mapping.findForward("success"));22 }23 }

03/26/2007

Page 23: Step By Step Guide For Buidling Simple Struts App Speakernoted

23

23

Step 6: Create Step 6: Create ApplicationResource.propertiesApplicationResource.properties

and Configure web.xmland Configure web.xmlaccordinglyaccordingly

03/26/2007

Page 24: Step By Step Guide For Buidling Simple Struts App Speakernoted

24

24

Resource file? Create resource file for default locale? Create resource files for other locales

03/26/2007

Page 25: Step By Step Guide For Buidling Simple Struts App Speakernoted

25

25

Example: ApplicationResource.properties

1 errors.header=<h4>Validation Error(s)</h4><ul>2 errors.footer=</ul><hr>3 4 error.lastName=<li>Enter your last name5 error.address=<li>Enter your address6 error.sex=<li>Enter your sex7 error.age=<li>Enter your age

03/26/2007

Page 26: Step By Step Guide For Buidling Simple Struts App Speakernoted

26

26

Step 7: Write JSP pages Step 7: Write JSP pages

I

03/26/2007

Page 27: Step By Step Guide For Buidling Simple Struts App Speakernoted

27

27

JSP Pages? Write one JSP page for each view? Use Struts tags for

– Handing HTML input forms– Writing out messages

03/26/2007

Page 28: Step By Step Guide For Buidling Simple Struts App Speakernoted

28

28

Example: submit.jsp1 <%@ page language="java" %>2 <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>3 <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>4 <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>5 6 <html>7 <head><title>Submit example</title></head>8 <body>9 10 <h3>Example Submit Page</h3>11 12 <html:errors/>13 14 <html:form action="submit.do">15 Last Name: <html:text property="lastName"/><br>16 Address: <html:textarea property="address"/><br>17 Sex: <html:radio property="sex" value="M"/>Male 18 <html:radio property="sex" value="F"/>Female<br>19 Married: <html:checkbox property="married"/><br>20 Age: <html:select property="age">21 <html:option value="a">0-19</html:option>22 <html:option value="b">20-49</html:option>23 <html:option value="c">50-</html:option>24 </html:select><br>25 <html:submit/>26 </html:form>

03/26/2007

Page 29: Step By Step Guide For Buidling Simple Struts App Speakernoted

29

29

Example: submit.jsp1 <logic:present name="lastName" scope="request">2 Hello3 <logic:equal name="submitForm" property="age" value="a">4 young5 </logic:equal>6 <logic:equal name="submitForm" property="age" value="c">7 old8 </logic:equal>9 <bean:write name="lastName" scope="request"/>10 </logic:present>11 12 </body>13 </html>

03/26/2007

Page 30: Step By Step Guide For Buidling Simple Struts App Speakernoted

30

30

Step 8: Build, Deploy,Step 8: Build, Deploy,and Test Application and Test Application

03/26/2007

Page 31: Step By Step Guide For Buidling Simple Struts App Speakernoted

31

31

Accessing Web Application

03/26/2007

Page 32: Step By Step Guide For Buidling Simple Struts App Speakernoted

32

32

Accessing Web Application

03/26/2007

Page 33: Step By Step Guide For Buidling Simple Struts App Speakernoted

33

33

Accessing Web Application

03/26/2007

Page 34: Step By Step Guide For Buidling Simple Struts App Speakernoted

34

34

Passion!Passion!

03/26/2007