<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.docbook.org/xml/4.4/docbookx.dtd">

<book id="javaj2eeweb">
	
	<bookinfo>
		<title>Java and the Web</title> <author>
		<firstname>Kevin</firstname>
		<surname>Nilson</surname>
		
		<affiliation>
			<orgname>http://www.javaclimber.com</orgname>
		</affiliation> </author>
		
		<abstract>
			<simpara>Presentation for The Southern Illinois Web Developers Association (SIWebDev) Tuesday October 3rd, 2005 7:00 - 8:15 PM</simpara>
		</abstract>
		
	</bookinfo>
	
	<chapter id="Introduction">
		<title>Introduction</title>
		<sect1 id="whoami">
			<title>Who Am I?</title>
			<sect2 id="kevinnilson">
				<title>Kevin Nilson</title>
				<itemizedlist id="personalinfo">
					<title>Background</title>
					<listitem>
						<simpara>Born in Carbondale</simpara>
					</listitem>
					<listitem>
						<simpara>Raised in Herrin</simpara>
					</listitem>
					<listitem>
						<simpara>BS in Computer Science, SIUC 2001</simpara>
					</listitem>
					<listitem>
						<simpara>Minor in Math, SIUC 2001</simpara>
					</listitem>
					<listitem>
						<simpara>Moved to St. Louis for career in 2001</simpara>
					</listitem>
					<listitem>
						<simpara>MS in Computer Science, SIUE 2004</simpara>
					</listitem>
					<listitem>
						<simpara>Moved to Silicon Valley in July 2005</simpara>
					</listitem>
				</itemizedlist>
				
			</sect2>
		</sect1>
		<sect1 id="certifications">
			<title>Certifications</title>
			<itemizedlist id="certificationlist">
				<title>Currently Hold</title>
				<listitem>
					<simpara>Sun Certified Web Component Developer for J2EE Platform (CX-310-080) - Servlet, Jsp, JavaBean, Custom Taglibs, Design Patterns </simpara>
				</listitem>
				<listitem>
					<simpara>Sun Certified Programmer for the Java 2 Platform 1.4 (CX-310-035) - Core Java</simpara>
				</listitem>
				<listitem>
					<simpara>Oracle Exam #1Z0-007 Introduction to Oracle9i: SQL SQL</simpara>
				</listitem>
			</itemizedlist>
			
			<itemizedlist id="certificationworkingtowards">
				<title>Working towards</title>
				<listitem>
					<simpara>Sun Certified Enterprise Architect for the Java 2 Platform, Enterprise Edition (CX-310-051, CX-310-300A, CX-310-061)</simpara>
				</listitem>
			</itemizedlist>
		</sect1>
		<sect1 id="jobs">
			<title>Jobs</title>
			<itemizedlist id="joblist">
				<listitem>
					<simpara>Core Institute</simpara>
					<itemizedlist id="coredetial">
						<listitem>
							<simpara>Carbondale, IL</simpara>
						</listitem>
						<listitem>
							<simpara>Grad Assistantship</simpara>
						</listitem>
						<listitem>
							<simpara>VBA, PL/SQL, MS SQL Server, MS Access</simpara>
						</listitem>
					</itemizedlist>
				</listitem>
				<listitem>
					<simpara>US Postal Service</simpara>
					<itemizedlist id="postaldetial">
						<listitem>
							<simpara>St. Louis, MO</simpara>
						</listitem>
						<listitem>
							<simpara>ASP, VB, C/C++, Oracle, Java</simpara>
						</listitem>
					</itemizedlist>
				</listitem>
				<listitem>
					<simpara>SBC</simpara>
					<itemizedlist id="sbcdetial">
						<listitem>
							<simpara>St. Louis, MO</simpara>
						</listitem>
						<listitem>
							<simpara>Java, JSP, Servlet, EJB, Oracle</simpara>
						</listitem>
					</itemizedlist>
				</listitem>
				<listitem>
					<simpara>Northrop Grumman</simpara>
					<itemizedlist id="ngdetial">
						<listitem>
							<simpara>O'Fallon, IL</simpara>
						</listitem>
						<listitem>
							<simpara>Java, JSP, Servlet, Struts, EJB, Oracle</simpara>
						</listitem>
					</itemizedlist>
				</listitem>
				<listitem>
					<simpara>Pfizer</simpara>
					<itemizedlist id="pfizerdetial">
						<listitem>
							<simpara>St. Louis, MO</simpara>
						</listitem>
						<listitem>
							<simpara>Java, JSP, Servlet, Struts, Spring, Swing, EJB, Oracle</simpara>
						</listitem>
					</itemizedlist>
				</listitem>
				
			</itemizedlist>
		</sect1>
		
		<sect1 id="docbook">
			<title>How was this presentation made?</title>
			
			<itemizedlist id="presentation">
				<title>DocBook</title>
				<listitem>
					<simpara>What is XML?</simpara>
				</listitem>
				<listitem>
					<simpara>What is XSLT?</simpara>
				</listitem>
				<listitem>
					<simpara>What is XSL-FO?</simpara>
				</listitem>
				<listitem>
					<simpara>What is DocBook?</simpara>
				</listitem>
			</itemizedlist>
			<para> According to the official DocBook web site,
				<blockquote>
					<attribution>DocBook.org</attribution>
					<para> DocBook is a general purpose XML and SGML document type particularly well suited to books and papers about computer hardware and software (though it is by no means limited to these applications). </para>
				</blockquote> </para>
		</sect1>
	</chapter>
	
	<chapter id="overview">
		<title>Overview of Java &amp; J2EE Web Environment</title>
		<sect1 id="servlet">
			<title>Servlets</title>
			<programlisting>
<![CDATA[				
package com.javaclimber.silwebdev;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorldServlet extends HttpServlet {

	public void init() throws ServletException {
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		PrintWriter out = response.getWriter();

		out.println("<html>");
		out.println("<head><title>Hello World</title><head>");

		out.println("<body>");
		out.println("<h1>Hello World!!!</h1>");
		out.println("<br/>");
		out.println("Today is "+new java.util.Date());
		out.println("</body>");

		out.println("</html>");
	}

	public void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {

		doGet(arg0, arg1);
	}
}
]]>
			</programlisting>
			
		</sect1>
		<sect1 id="jsp">
			<title>JSP</title>
			<sect2>
				<title>Hello World</title>
				<programlisting>
<![CDATA[				
<html>
  <head><title>Hello World</title><head>
  <body>
    <h1>Hello World!!!</h1>
    <br/>
    Today is <%=new java.util.Date()%>
  </body>
</html>
]]>
			</programlisting>
			</sect2>
		</sect1>
		<sect1 id="badjsp">
			<title>Example of a Bad JSP</title>
			<programlisting>
<![CDATA[				
<html>
<head><title>Bad JSP</title><head>
<body>
<%String[][] tableData={{"header-row1, col1", "header-row1, col2", "header-row1, col3"},
					{"row2, col1", "row2, col2", "row2, col3"},
					{"row3, col1", "row3, col2", "row3, col3"}
				   };%>	
<table>	
  <%for(int i=0;i<tableData.length;i++){%>
	<tr>
	  <%for(int j=0;j<tableData[i].length; j++){%>
		<%=((i==0)?"<th>":"<td>")%><b><%=tableData[i][j]%></b><%=((i==0)?"</th>":"</td>")%>
	<%}%>
	</tr>
  <%}%>
</body>
</html>
]]>
			</programlisting>
			<itemizedlist id="badjspinfo">
				<listitem>
					<simpara>Mixing of markup and java code</simpara>
				</listitem>
				<listitem>
					<simpara>Hard to update java code</simpara>
				</listitem>
				<listitem>
					<simpara>Hard to update markup</simpara>
				</listitem>
				
			</itemizedlist>
			
		</sect1>
		<sect1 id="customtags">
			<title>Custom Tags</title>
			<programlisting>
<![CDATA[				
<%@ taglib uri="/myTag" prefix="myTag" %>
<html>
<head><title>Custom Tag Example</title><head>
  <body>
    <form>
      <select name="dropDown">
		
        <myTag:iterate id="item" name="myDropDownValues">
          <option value='<myTag:write name="item" property="name"/>'    <myTag:displaySelected name="item"> >
            <myTag:write name="item" property="name"/>
          </option>
        </myTag:iterate>
        
      </select>
      <input type='submit'/>
    </form>
  </body>
</html>
]]>
			</programlisting>
			
		</sect1>
		<sect1 id="jstl">
			<title>JSTL</title>
			<programlisting>
<![CDATA[				
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
<head><title>JSTL Table of Pictures Example</title><head>
<body>
	<table>
	<c:forEach var="item" items="${PICS_AL}" varStatus="status">
		<c:set var="rowIndex" value="${status.index%NUM_PICS_PER_ROW}" />
		<c:if test="${rowIndex==0}">
			<tr>
		</c:if>
		<td>
			<center>
				<img src='<c:out value="${item.pic}"/>'/>					
				<br/> 
				<c:if test='${!empty item.picDesc}'>	
					<br/>
					<c:out value="${item.picDesc}"/>
				</c:if>
			</center>
		</td>
		<c:if test="${rowIndex==NUM_PICS_PER_ROW-1}">
			</tr>
		</c:if>
	</c:forEach>
	
	<c:if test="${rowIndex lt NUM_PICS_PER_ROW-1}">
		<c:forEach begin="${rowIndex+1}" end="${NUM_PICS_PER_ROW-1}" step="${1}">
			<c:set var="rowIndex" value="${rowIndex+1}"/>
			<td>&nbsp;</td>
			<c:if test="${rowIndex==NUM_PICS_PER_ROW-1}">
				</tr>
			</c:if>
		</c:forEach>
	</c:if>

	</table>
</body>
</html>
]]>
</programlisting>
			
			<figure>
				<title>Table of Pictures in Portlets</title>
				<mediaobject>
					<imageobject>
						<imagedata fileref="/siwebdev/images/portal.jpg" format="JPEG"/>
					</imageobject>
					<textobject><phrase>Pictures Table</phrase>
					</textobject>
				</mediaobject>
			</figure>
		</sect1>
	</chapter>
	
	<chapter id="shortcomings">
		<title>Shortcomings of Java Web &amp; How to Overcome</title>
		<sect1>
			<title>Shortcomings</title>
			<itemizedlist id="shortcoming">
				<listitem>
					<simpara>Complex</simpara>
				</listitem>
				<listitem>
					<simpara>No Clear Directions on How to Architect?</simpara>
					<itemizedlist id="directions">
						<listitem>
							<simpara>Java Pet Store Project</simpara>
						</listitem>
						<listitem>
							<simpara>Use Framework... which one?</simpara>
						</listitem>
						
					</itemizedlist>
				</listitem>
				<listitem>
					<simpara> </simpara>
				</listitem>
			</itemizedlist>
			
		</sect1>
		
		<sect1 id="designpatterns">
			<title>Design Patterns</title>
			
			<informaltable pgwide="1" border="none" rowsep="0" colsep="0">
				<!--title>Mouse Mileage</title-->
				<tgroup cols="2">
					<colspec colnum="1" colname="col1" colwidth="1*" colsep="0"/>
					<colspec colnum="2" colname="col2" colwidth="1*" colsep="0"/>
					<tbody>
						<row rowsep="0">
							
							<entry valign="top" rowsep="0" colsep="0">
								<itemizedlist id="designpatterslist">
									<listitem>
										<simpara>J2EE</simpara>
										<itemizedlist id="j2eepatterns">
											<listitem>
												<simpara>Business Delegate</simpara>
											</listitem>
											<listitem>
												<simpara>Composite Entity</simpara>
											</listitem>
											<listitem>
												<simpara>Composite View</simpara>
											</listitem>
											<listitem>
												<simpara>Data Access Object (DAO)</simpara>
											</listitem>
											<listitem>
												<simpara>Fast Lane Reader</simpara>
											</listitem>
											<listitem>
												<simpara>Front Controller</simpara>
											</listitem>
											<listitem>
												<simpara>Intercepting Filter</simpara>
											</listitem>
											<listitem>
												<simpara>Model-View-Controller</simpara>
											</listitem>
											<listitem>
												<simpara>Service Locator</simpara>
											</listitem>
											
											<listitem>
												<simpara>Session Facade</simpara>
											</listitem>
											
											<listitem>
												<simpara>Transfer Object</simpara>
											</listitem>
											
											<listitem>
												<simpara>Value List Handler</simpara>
											</listitem>
											<listitem>
												<simpara>View Helper</simpara>
											</listitem>
											
										</itemizedlist>
									</listitem>
								</itemizedlist>
								
							</entry>
							<entry valign="top" rowsep="0" colsep="0">
								<itemizedlist id="gofdpatterslist">
									<listitem>
										<simpara>GOF (Gang of Four)</simpara>
										<itemizedlist id="gofpatterns">
											<listitem>
												<simpara>Abstract Factory</simpara>
											</listitem>
											<listitem>
												<simpara>Builder</simpara>
											</listitem>
											<listitem>
												<simpara>Factory Method</simpara>
											</listitem>
											<listitem>
												<simpara>Prototype</simpara>
											</listitem>
											<listitem>
												<simpara>Singleton</simpara>
											</listitem>
											<listitem>
												<simpara>Adapter</simpara>
											</listitem>
											<listitem>
												<simpara>Bridge</simpara>
											</listitem>
											<listitem>
												<simpara>Composite</simpara>
											</listitem>
											<listitem>
												<simpara>Decorator</simpara>
											</listitem>
											<listitem>
												<simpara>Façade</simpara>
											</listitem>
											<listitem>
												<simpara>Flyweight</simpara>
											</listitem>
											<listitem>
												<simpara>Proxy</simpara>
											</listitem>
											<listitem>
												<simpara>Chain of Resp.</simpara>
											</listitem>
											<listitem>
												<simpara>Command</simpara>
											</listitem>
											<listitem>
												<simpara>Interpreter</simpara>
											</listitem>
											<listitem>
												<simpara>Iterator</simpara>
											</listitem>
											<listitem>
												<simpara>Mediator</simpara>
											</listitem>
											<listitem>
												<simpara>Memento</simpara>
											</listitem>
											<listitem>
												<simpara>Observer</simpara>
											</listitem>
											<listitem>
												<simpara>State</simpara>
											</listitem>
											<listitem>
												<simpara>Strategy</simpara>
											</listitem>
											<listitem>
												<simpara>Template Method</simpara>
											</listitem>
											<listitem>
												<simpara>Visitor</simpara>
											</listitem>
										</itemizedlist>
									</listitem>
									
								</itemizedlist>
							</entry>
						</row>
					</tbody>
				</tgroup>
			</informaltable>
		</sect1>
		
		<sect1 id="frameworks">
			<title>Java Web Frameworks</title>
			
			<itemizedlist id="javawebframeworks">
				
				<listitem>
					<simpara>Cocoon</simpara>
				</listitem>
				<listitem>
					<simpara>Shale</simpara>
				</listitem>
				<listitem>
					<simpara>Spring</simpara>
				</listitem>
				
				<listitem>
					<simpara>Struts</simpara>
				</listitem>
				<listitem>
					<simpara>Tapestry</simpara>
				</listitem>
				<listitem>
					<simpara>Turbine</simpara>
				</listitem>
				<listitem>
					<simpara>WebWork</simpara>
				</listitem>
				
			</itemizedlist>
		</sect1>
	</chapter>
	
	<chapter id="struts">
		<title>Quick Struts Overview</title>
		<sect1 id="mvc">
			<title>MVC &amp; Model 2</title>
			<sect2>
				<title>MVC</title>
				
				<itemizedlist id="mvcuses">
					
					<listitem>
						<simpara>Microsoft Foundation Classes (MFC)</simpara>
					</listitem>
					<listitem>
						<simpara>Java Swing library</simpara>
					</listitem>
				</itemizedlist>
			</sect2>
			
			<sect2>
				<title>Model 2</title>
				
				<itemizedlist id="modeltwo">
					
					<listitem>
						<simpara>Servlets (Controller)</simpara>
					</listitem>
					<listitem>
						<simpara>JSP (View)</simpara>
					</listitem>
				</itemizedlist>
			</sect2>
			
		</sect1>
		
		<sect1 id="forms">
			<title>ActionForms</title>
			<itemizedlist id="formsinfo">
				
				<listitem>
					<simpara>The Model</simpara>
				</listitem>
				<listitem>
					<simpara>Hold Data submitted in HTML form</simpara>
				</listitem>
				<listitem>
					<simpara>Can provide Server Side Validation</simpara>
				</listitem>
			</itemizedlist>
		</sect1>
		<sect1 id="action">
			<title>Action</title>
			<itemizedlist id="actioninfo">
				
				<listitem>
					<simpara>The Controller</simpara>
				</listitem>
				<listitem>
					<simpara>Calls Business Methods</simpara>
				</listitem>
				<listitem>
					<simpara>Selects and Forwards to View</simpara>
				</listitem>
			</itemizedlist>
			
			<programlisting>
package com.javaclimber.siwebdev.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
					
public class ShowIndexAction extends Action {

  public ActionForward execute(ActionMapping actionMapping,
    ActionForm actionForm, HttpServletRequest request,
    HttpServletResponse response) {
      try {
        doSomething();
      } catch (SomeException e) {
        ActionMessages errors=new ActionMessages();
        errors.add("myerror",new ActionMessage("myerror.errors"));
        saveMessages(request,errors);
        return actionMapping.findForward("fail");
      }

      return actionMapping.findForward("success");
  }
}

				</programlisting>
		</sect1>
		<sect1>
			<title>struts-config.xml</title>
			
			<programlisting>
<![CDATA[				

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
	  "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
	  "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>
	<form-beans>
		<form-bean
			name="logonForm"
			type="app.LogonForm"/>
	</form-beans>
	<action-mappings>
		<action
			path="/Welcome"
			forward="/pages/Welcome.jsp"/>
		<action
			path="/Logon"
			forward="/pages/Logon.jsp"/>
		<action
			path="/LogonSubmit"
			type="app.LogonAction"
			name="logonForm"
			scope="request"
			validate="true"
			input="/pages/Logon.jsp">
			<forward
				name="success"
				path="/pages/Welcome.jsp"/>
			<forward
				name="failure"
				path="/pages/Logon.jsp"/>
		</action>
		<action
			path="/Logoff"
			type="app.LogoffAction">
			<forward
				name="success"
				path="/pages/Logoff.jsp"/>
		</action>
	</action-mappings>
	<message-resources parameter="resources.application"/>
</struts-config>
]]>
					</programlisting>
		</sect1>
		
		<sect1 id="stutsjsp">
			<title>JSP</title>
			<itemizedlist id="jspinfo">
				
				<listitem>
					<simpara>The View</simpara>
				</listitem>
				<listitem>
					<simpara>Hold Data submitted in HTML form</simpara>
				</listitem>
			</itemizedlist>
			
			<programlisting>
<![CDATA[				
<%@ taglib uri="struts/html-el" prefix="html" %>
<html>
  <body>
    <html:form action="insertEmployee" focus="name">
      <table>
        <tr>
          <td >Name:</td>
          <td><html:text property="name"/></td>
        </tr>
        <tr>
          <td>Age:</td>
          <td><html:text property="age"/></td>
        </tr>
        <tr>
          <td>Department:</td>
          <td>
            <html:select name="employeeForm" property="department">
              <html:options collection="departments" property="id" labelProperty="description"/>
            </html:select>
          </td>
        </tr>
      </table>
      <html:submit>Submit</html:submit>
    </html:form>
  </body>
</html>
]]>
			</programlisting>
			
		</sect1>
		
		<sect1 id="validator">
			<title>Validator</title>
			<itemizedlist id="validatorinfo">
				<listitem>
					<simpara>Simple, quick and easy</simpara>
				</listitem>
				<listitem>
					<simpara>Client-side browser independent JavaScript check</simpara>
				</listitem>
				<listitem>
					<simpara>Server-side check</simpara>
				</listitem>
			</itemizedlist>
			<programlisting>
<![CDATA[				
<field property="age" depends="required,long,longRange">
	<arg0 key="employee.age"/>
	<arg1 name="longRange" key="${var:min}" resource="false"/>
	<arg2 name="longRange" key="${var:max}" resource="false"/>
	<var><var-name>min</var-name><var-value>18</var-value></var>
	<var><var-name>max</var-name><var-value>65</var-value></var>
</field>
	
<field property="customeremail" depends="email">
	<arg0 key="customer.email"/>
</field>
	
	
<global>
    <constant>
        <constant-name>zip</constant-name>
        <constant-value>^\d{5}(-\d{4})?$</constant-value>
    </constant>
</global>

<field property="zip" depends="required,mask">
	<arg0 key="registrationForm.zippostal.displayname"/>
	<var>
		<var-name>mask</var-name>
		<var-value>${zip}</var-value>
	</var>
</field>
]]>
						</programlisting>
		</sect1>
		
		<sect1 id="tiles">
			<title>Tiles</title>
			<figure>
				<title>Example of Tiles</title>
				<mediaobject>
					<imageobject>
						<imagedata fileref="/siwebdev/images/tiles.jpg" format="JPEG"/>
					</imageobject>
					<textobject><phrase>Tiles</phrase>
					</textobject>
				</mediaobject>
			</figure>
		</sect1>
		<sect1>
			<title>tiles-defs.xml</title>
			<programlisting>
<![CDATA[				
<?xml version="1.0" encoding="ISO-8859-1" ?>

 <!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 1.1//EN"
       "http://struts.apache.org/dtds/tiles-config_1_1.dtd">


<tiles-definitions>

  <definition name="baseLayout" path="/layouts/basiclayout.jsp">
    <put name="header" value="/includes/header.jsp" />
    <put name="menu"   value="/includes/menu.jsp" />
    <put name="footer" value="/includes/footer.jsp" />
  </definition>

  <definition name="/welcome.page" extends="baseLayout">
    <put name="title"  value="Main Menu" />
    <put name="body"   value="/welcome.jsp" />
  </definition>

<tiles-definitions>
]]>
				</programlisting>
		</sect1>
		<sect1>
			<title>basiclayout.jsp</title>
			<programlisting>
<![CDATA[				
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ include file="/includes/taglibs.jsp"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

  <head>
    <title>Andy Nilson Site - <tiles:getAsString name="title"/></title>
    <link rel="stylesheet" type="text/css" href="<html:rewrite page='/css/global.css'/>" />
	<c:if test="${noCache == true}">
		<meta http-equiv="pragma" content="no-cache"/>
		<meta http-equiv="cache-control" content="no-cache"/>
		<meta http-equiv="expires" content="0"/>
	</c:if>
  </head>

  <body>
    <table border="0" width="100%" cellspacing="5">
      <tr>
        <td colspan="2"><tiles:insert attribute="header" /></td>
      </tr>
      <tr>
        <td valign="top"><tiles:insert attribute='menu'/></td>
      </tr>
      <tr>
        <td style="width:100%"><hr/></td>
      </tr>
      <tr>
        <td valign="top"  align="left"><tiles:insert attribute='body' /></td>
      </tr>
      <tr>
        <td colspan="2"><hr/></td>
      </tr>
      <tr>
        <td colspan="2" class="center"><tiles:insert attribute="footer" /></td>
      </tr>
    </table>
  </body>
</html>
]]>
				</programlisting>
		</sect1>
		<sect1 id="strutsshortcomings">
			<title>Struts Shortcomings</title>
			<itemizedlist>
				<listitem>
					<simpara>Complex XML</simpara>
				</listitem>
				<listitem>
					<simpara>Not POJOs</simpara>
				</listitem>
			</itemizedlist>
			
		</sect1>
	</chapter>
	
	<chapter id="jsf">
		<title>The Future</title>
		<sect1 id="jsfsect">
			<title>JSF and Shale</title>
			<simpara>Is JSF the Future?</simpara>
			<simpara>Will Shale take off like Struts did?</simpara>
		</sect1>
		
	</chapter>
	
	<chapter id="questions">
		<title>Questions</title>
		<para>Any Questions?</para>
		<simpara>Feel Free to contact me anytime at <ulink url="http://www.javaclimber.com">http://www.javaclimber.com</ulink></simpara>
	</chapter>
	
</book>