Public (Open Enrollment) Training Course:

Jakarta Struts and Advanced JSP

May 21-25 2007, Annapolis Junction MD

This class is now over. Next public version is TBD. In the meantime, please contact for information on a customized onsite version at your location. Lower price, more convenient for your developers, and customizable content.

“Wonderful. In 20 years, this is the best organized, most pragmatic and enjoyable course I've taken.”

“The best instructor-led course I have attended, by far.”

“Best short course ever!”

“Compared to the other short courses I have taken, this one completely redefined my scale from 1-10.”

“In my 35+ years of taking technical courses, Marty's classes consistently come out ranking #1 on my list. Highly relevant material is delivered with enthusiasm, humor, and a high degree of class interaction that is unmatched anywhere.”

more student reviews

This page describes the public (open enrollment) training course on Struts and advanced servlet/JSP development to be held May 21-25 at Integrated Computer Concepts Inc. in Annapolis Junction, Maryland. The entire course is personally developed and taught by leading J2EE developer, speaker, and author Marty Hall. No contract instructor teaching someone else's materials! Marty has taught J2EE courses onsite for dozens of organizations in the US, Canada, Australia, Japan, Puerto Rico, and the Philippines, all to rave reviews.

If you are looking for customized J2EE training courses taught on-site at your company, please see this page.

Register Early! Five of Marty's previous public J2EE short courses were full, so reserve your spot today. Registrations are taken in the order they are received.


Marty normally runs on-site training courses at customer locations. This is easier administratively, is better for clients since the topics can be customized, and is more cost effective for students since no travel is required. However, due to demand from those who do not have enough students for an on-site course, Marty will be running a public (open enrollment) training course May 21-25 on Struts and advanced JSP.

The course is developed and taught by Marty Hall, an experienced developer, award-winning instructor, popular conference speaker (5 times at JavaOne), and author of several popular J2EE books.


The course will be held at Integrated Computer Concepts Inc. in Annapolis Junction Maryland (between Baltimore and Washington, minutes from BWI airport). This is a modern, comfortable venue with separate computers for each student, fast internet connections, and several nearby hotels.


The 5-day course costs $2395 per student and includes an extensive course notebook, a commercial textbook, exercises, and exercise solutions. Compare this price to courses from Sun, Learning Tree, GlobalKnowledge, and Oracle University that cost around $2400 for 4-day courses and $3000 for 5-day courses. Besides, those courses use an unknown instructor who did not develop the course materials and often lacks significant real-world J2EE development experience.

To register, fill out and send in the course registration form. Space is limited: five previous offerings of Marty's courses were full. Bonus: Register by May 8 and get a $50 gift certificate from


The course consists of an approximately equal mixture of lecture and hands-on lab time and assumes that all students already have at least moderate previous experience with servlets and JSP. It does not assume any previous exposure to Struts.

More Information

  • Want details on the topics? See the detailed curriculum below.
  • Have questions on the topics even after reading that? Email the instructor at
  • Want information on the instructor? See this brief bio. Please note that the instructor personally developed all of the course materials and exercises. You won't get a contract instructor presenting someone else's materials.
  • Want to register? See the course registration form.
  • Have registration questions? Email the registrar at or phone (410) 429-5535.

Struts and Advanced JSP: Syllabus

Using and Deploying Web Applications

  • Purpose of Web applications
  • Structure of Web applications
  • Setting up Web applications with Tomcat
  • Giving custom addresses to servlets
  • Sharing data among Web applications

Controlling Web Application Behavior with web.xml

  • Location and purpose of web.xml
  • Custom URLs
  • Initialization parameters
  • Preloading pages
  • Welcome pages
  • Error pages

The Model View Controller (MVC) Architecture

  • Understanding the benefits of MVC
  • Using RequestDispatcher to implement MVC
  • Forwarding requests from servlets to JSP pages
  • Handling relative URLs
  • Choosing among different display options
  • Comparing data-sharing strategies

Declarative Web Application Security

  • Major security concerns
  • Declarative vs. programmatic security
  • Using form-based authentication
  • Using BASIC authentication

Programmatic Security

  • Problems with declarative security
  • Combination security: mixing server-managed and servlet-managed (programmatic) security
  • Pure programmatic security

Servlet and JSP Filters

  • Filter basics
  • Accessing the servlet context
  • Using initialization parameters
  • Blocking responses
  • Modifying responses

Creating Custom JSP Tag Libraries: The Basics

  • Java-based tags
    • Components of a tag library
    • Basic tags
    • Tags that use body content
    • Tags that optionally use body content
  • JSP-based tags (tag files)
    • Components of a tag library
    • Basic tags
    • Tags that use attributes
    • Tags that use body content

Custom JSP Tag Libraries: Advanced Topics

  • Tags with dynamic attribute values
  • Tags with complex objects for attributes
  • Manipulating the tag body
  • Looping tags
  • Nested tags
  • Using SAX and TagLibraryValidator to validate tag library syntax

Struts Intro, Overview, and Setup

  • Understanding Struts
    • Different views of Struts
    • Advantages of Struts
    • Disadvantages of Struts
  • Setting Up Struts
    • Downloading and configuring Struts
    • Testing Struts
    • Setting up Struts applications
    • Accessing Struts documentation
    • Adding Struts to an existing Web application

Processing Requests with Action Objects

  • Struts flow of control
  • The six basic steps in using Struts
  • Example: one result mapping
  • Example: multiple result mappings

Handling Request Parameters with Form Beans

  • Two new ideas
    • Automatically creating bean to represent request data
    • Using bean:write to output bean properties
  • Defining form beans
  • Declaring form beans
  • Outputting properties of form beans
    • bean:write
    • JSP 2.0 expression language
  • Defining and outputting regular beans

Prepopulating and Redisplaying Input Forms

  • Using the Struts html: tags to build HTML forms that have three important characteristics:
    1. The textfield names and the bean properties are guaranteed to stay in synch
    2. The textfield values can be prepopulated based on the values in a bean.
    3. The forms can be redisplayed when they are submitted with incomplete or incorrect values.

Using Properties Files (Resource Bundles)

  • Loading properties files
  • Using bean:message
  • Applying properties files
    • To reuse fixed strings
    • To support internationalization

DispatchAction and Other Advanced Action Classes

  • Performing different logic based on a radio button, hidden field, or push button value
    • But not repeatedly checking parameter names in the execute method
    • Using DispatchAction
  • Using Struts form-bean capabilities in non-Struts applications
    • Without redoing code in Struts
    • Using ForwardAction
  • Other advanced Action subclasses

Manually Validating Input

  • Distinguishing manual validation from automatic validation
  • Performing validation in the Action
    • Error messages in beans
  • Performing validation in the ActionForm
    • Fixed error messages
    • Error messages with substitution
    • Separate error messages

Automatically Validating Input

  • Distinguishing manual validation from automatic validation
  • Distinguishing client-side validation from server-side validation
  • Using automatic validation
    1. Declare application-wide properties file
    2. Add messages to properties file
    3. Turn on the automatic validator
    4. Put validation rules in validation.xml
    5. Put <html:errors/> in input page
    6. Enable JavaScript validation

Laying Out Pages with Tiles

  • Tiles motivations
  • Tiles basics
    • Sketch out desired layout
    • Make template file that represents layout
    • Create JSP pages that define layout pieces
    • Create JSP pages that populate layout
  • Handling relative URLs in Tiles
  • Using Tiles definitions file

Using the JSP Standard Tag Library (JSTL) with Struts

  • Obtaining and installing JSTL
  • Looping Tags
  • Conditional Evaluation Tags
  • Not breaking MVC Model
  • Database Access Tags
  • Other tags