husted      2002/10/29 03:09:24

  Added:       doc/faqs ssl.xml project.xml newbie.xml kickstart.xml
                        index.xml helping.xml
  Log:
  + Setup FAQ and Howto section.
  
  Revision  Changes    Path
  1.1                  jakarta-struts/doc/faqs/ssl.xml
  
  Index: ssl.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <document url="./ssl.xml">
  
  <properties>
  
  <author>Steve Ditlinger</author>
  
  <title>Secure Socket Layer and Web Applications</title>
  
  </properties>
  
  <body>
  
  <chapter href="ssl" name="Secure Socket Layer and Web Applications">
  
  <section href="overview" name="Overview">
  
  <p>
  Many web applications, especially those deployed for e-commerce, necessitate the
  transmission of sensitive data between the web server and the client browser.  This 
data
  may include passwords, credit card numbers, bank account numbers or any other
  information that users would not want to divulge to the general public. To protect
  sensitive data during transmission, application developers typically use the Secure
  Sockets Layer (SSL) and its companion protocol, HTTP over Secure Sockets Layer
  (HTTPS). HTTPS employs SSL to protect data by encrypting it at the source, be it the
  server or the client, and decrypting it at the destination. This prevents anyone 
monitoring
  Internet data transmissions from easily capturing this data. The client and server
  exchange public keys to enable encryption and decryption to occur.
  </p>
  
  <p>
  The encryption/decryption process comes at a performance price, however. The
  throughput of data for a web server transmitting via HTTPS is often as little as 
one-tenth
  that of data transmission via HTTP. For this reason, it is undesirable to deploy an 
entire
  web application under SSL. For fastest performance, it is best to deploy a web
  application under HTTP and employ HTTPS only for those pages and processes that
  transmit sensitive data.
  </p>
  
  </section>
  
  <section href="mixing" name="Mixing Protocols in Web Applications">
  
  <p>
  Switching back and forth between the two protocols can require hard-coding the 
protocol
  and full URL in every link to each resource in the web application. This creates an
  ongoing maintenance headache for developers each time a server name changes or secure
  protocol requirements change for resources in the web app.
  </p>
  
  <p>
  Another significant hazard is that there is nothing to prevent a user from 
specifying the
  wrong protocol by manually entering a URL into the browser. The penalty for manually
  specifying HTTPS for a page or servlet that does not require HTTPS is reduced
  performance. Far worse is the penalty for manually specifying HTTP for non-secure
  access of a page that does require HTTPS: public exposure of sensitive data.
  </p>
  
  </section>
  
  <section href="help" name="Help from Deployment Descriptor">
  
  <p>
  To help overcome the problem of non-secure access of sensitive data, the Java Servlet
  Specification (versions 2.2 and 2.3) defines the transport-guarantee element of the
  web.xml deployment descriptor file. The transport-guarantee element must specify one
  of three types of protection for communication between client and server: NONE,
  INTEGRAL, or CONFIDENTIAL. For most containers a specification of INTEGRAL
  or CONFIDENTIAL is treated as a requirement for SSL usage. Web application
  containers will prevent users from accessing web resources over HTTP if they have 
been
  so specified.
  </p>
  
  <p>
  The implementation for blocking HTTP access to web resources specified as INTEGRAL
  or CONFIDENTIAL varies from container to container. If a user attempts to access such
  a resource over HTTP, some containers will present that user with an error message
  instructing them to use the HTTPS protocol for accessing the requested resource. 
Other
  containers will actually redirect the request using the HTTPS protocol, but then 
continue
  using the HTTPS protocol for all subsequent requests, even those for resources with a
  transport-guarantee specification of NONE.
  </p>
  
  </section>
  
  <section href="sslext" name="The sslext Struts Extension">
  
  <p>
  An extension to Struts 1.1, named sslext, helps solve many of these issues for Struts
  developers. It extends the ActionConfig class, RequestProcessor, and Plugin classes 
to
  define a framework where developers may specify the transmission protocol behavior 
for
  Struts applications. Within the Struts configuration file, developers specify which 
action
  requests require HTTPS transmission and which should use HTTP. Developers can also
  specify whether to redirect "improperly-protocoled" requests to the correct protocol.
  </p>
  
  <p>
  In addition to these extensions, the &lt;html:link> and the &lt;html:form> tags have 
been
  extended. In these extensions, the Struts actions specified in either of these tags 
are
  analyzed to determine the protocol that should be used in requesting that action. The
  HTML generated by these tags will specify the proper protocol. An additional custom
  tag is defined for allowing users to specify the transmission protocol for an 
individual
  JSP. This is most often used for form-based authentication pages.
  </p>
  
  </section>
  
  <section href="legacy" name="Legacy Browser Issue">
  
  <p>
  One additional complication faced by developers of web applications is that some
  browsers (e.g. pre-6.0 versions of Netscape Navigator) will treat requests to 
different
  protocols and ports on the same server as requests to different domains. This causes
  these browsers to initiate a new session each time a different protocol or port is 
specified
  in a request. This problem can only be solved at the container level. Some containers
  have a "session domain" or "cookie domain" configuration parameter to allow the 
session
  to be shared across different servers in the same domain. As an example, the Weblogic
  Server has a "CookieDomain" property configured in its weblogic.xml deployment
  descriptor. Thankfully, the effects of this problem are diminishing as people upgrade
  their browsers to the current versions.
  </p>
  
  </section>
  
  <section href="containers" name="Configuring Containers for SSL">
  
  The procedure for configuring SSL for a container will be specific to that 
container.  The
  procedure for enabling SSL for Tomcat can be found
  <a href="http://jakarta.apache.org/tomcat/tomcat-4.1-doc/ssl-howto.html";>here</a>.
  
  </section>
  
  </chapter></body></document>
  
  
  
  1.1                  jakarta-struts/doc/faqs/project.xml
  
  Index: project.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <project name="Struts Framework"
           href="http://jakarta.apache.org/struts";
          image="images/struts.gif">
  
      <title>Struts Framework</title>
  
      <menu name="FAQs">
          <item href="kickstart.html" name="Kickstart"/>
          <item href="newbie.html" name="Newbie"/>
          <item href="helping.html" name="How to Help"/>
      </menu>
  
      <menu name="Howtos">
          <item href="ssl.html" name="SSL"/>
      </menu>
  
      <menu name="Welcome">
          <item name="Home"                    href="../index.html"/>
          <item name="News &amp; Status"       href="../news.html"/>
          <item name="FAQs and Howtos"         href="../faqs/index.html"/>
          <item name="Resources"               href="../resources/index.html"/>
          <item name="List Archive"            
href="http://nagoya.apache.org/eyebrowse/SummarizeList?listId=42"/>
          <item name="Who We Are"              href="../volunteers.html"/>
      </menu>
  
  </project>
  
  
  
  
  
  
  
  
  
  1.1                  jakarta-struts/doc/faqs/newbie.xml
  
  Index: newbie.xml
  ===================================================================
  <?xml version="1.0"?>
  <document url="./kickstart.xml">
  <properties>
  <author>Ted Husted</author>
  <author>James Holmes</author>
  <title>The Struts User's Guide - Newbie FAQ</title>
  </properties>
  <body>
  <chapter href="faq" name="Newbie FAQ">
  
  <section href="contents" name="Index">
  <p>
  Here are answers to 24 common questions people ask when using Struts on their first 
project. <b>For an in-depth, searchable FAQ, visit our friends at <a 
href="http://www.jguru.com/faq/home.jsp?topic=Struts";>JGuru</a>.</b>
  </p>
  
  <p><font color="red"><b>UNDER CONSTRUCTION</b></font> (contributions welcome)</p>
    <ul>
  
      <li><a href="#reload">Why was reload removed from Struts 1.1?</a></li>
  
      <li><a href="#modules">What is a modular application? What does module-relative 
mean?</a></li>
  
      <li><a href="#naming">Why are some of the class and element names 
counter-intuitive?</a></li>
  
      <li>Why is ActionForm a base class rather than an interface?</li>
  
      <li>Do I have to have a separate ActionForm bean for every HTML form?</li>
  
      <li>do ActionForms have to be true JavaBeans?</li>
  
      <li>Can I use other beans or hashmaps with ActionForms?</li>
  
      <li>How can I prepopulate a form?</li>
  
      <li><a href="#multiple">Can I use multiple HTML form elements with the same 
name?</a></li>
  
      <li><a href="#actionforms">Why are my checkboxes not being set from ON to 
OFF?</a></li>
  
      <li>How can I capture binary or formatted values, like dates or telephone 
numbers?</li>
  
      <li>Why do my option lists disappear when validation fails?</li>
  
      <li><a href="#scriptlets">Can't I just create some of my JavaBeans in the JSP 
using a scriptlet?</a></li>
  
      <li><a href="#tags">Why do the Struts tags provide for so little 
formatting?</a></li>
  
      <li>When is the best time to validate input?</li>
  
      <li>How can I avoid validating a form before data is entered?</li>
  
      <li>How can I create a "wizard" workflow?</li>
  
      <li>How can I "chain" Actions?</li>
  
      <li>Can I have an Action without a form?</li>
  
      <li>How do I access my database?</li>
  
      <li>How can I authenticate my users?</li>
  
      <li>How can I scroll through list of pages like the search results in 
google?</li>
  
      <li>Can I have multiple submit buttons on the same form?</li>
  
      <li>Why can't my Javascript submit a form?</li>
  
      <li><a href="minimization">Why does the option tag render selected="selected" 
instead of just "selected"?</a></li>
  
      <li>Can I create dynamic ActionForwards?</li>
  
      <li>How can I use my own (ActionForm, ActionForward, ActionMapping, 
ActionServlet) class?</li>
  
      <li>Do I have to use JSPs with my application?</li>
  
    </ul>
  </section>
  
  <section href="reload" name="Why was reload removed from Struts 1.1?">
  
  <p>ReloadAction is not supported in 1.1 for two reasons:</p>
  <ul>
  <li>It never did let you reload everything that you would really
    want to -- particularly changed classes -- so many people
    ended up having to reload the webapp anyway.</li>
  <li>Not supporting ReloadAction lets Struts avoid doing synchronization
    locks around all the lookups (like figuring out which action to use,
    or the destination of an ActionForward) so apps can run a little faster.</li>
  </ul>
  
  </section>
  
  <section href="modules" name="What is a modular application? What does 
module-relative mean?">
  
  <p>
  Since Struts 1.1, the framework supports multiple application modules. All 
applications have at
  least one root, or default, module. Like the root directory in a file system, the 
default application
  has no name. (Or is named with an empty string, depending your viewpoint.) 
Developing an application
  with only a default module is no different from how applications were developed 
under Struts 1.0.
  Since Struts 1.1, you can add additional modules to your application, each of which 
can have their
  own configuration files, messages resources, and so forth. Each module is developed 
in the same way as
  the default module. Applications that were developed as a single module can added to 
a multiple
  module application, and modules can promoted to a standalone application without 
change. For more
  about configuring your application to support multiple modules, see
  <a href="userGuide/building_controller.html#module_config">Building Controller 
Components</a> in the
  User Guide.
  </p>
  
  <p>
  But to answer the question =:0), a modular application is a Struts application that 
uses more than
  one module. Module-relative means that the URI starts at the application-module 
level, rather than at
  the application-context level, or the absolute-URL level.
  </p>
  <ul>
  <li>Absolute URL: http://localhost/myApplication/myModule/myAction.do</li>
  <li>context-relative: /myModule/myAction.do</li>
  <li>module-relative: /myAction.do</li>
  </ul>
  
  </section>
  
  <section href="naming" name="Why are some of the class and element names 
counter-intuitive?">
  <p>
  The framework grew in the telling and as it evolved some of the names
  drifted.
  </p>
  <p>The good thing about a nightly build, is that everything becomes
  available to the community as soon as it is written. The bad thing about
  a nightly build is that things like classnames get locked down early and
  then become difficult to change.
  </p>
  </section>
  
  
  <section href="actionforms" name="Wither ActionForms?">
  <p>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg19281.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg19281.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg19338.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg19338.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg20833.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg20833.html</a><br/>
  </p>
  </section>
  
  
  <section href="JavaBeans" name="Do ActionForms have to be true JavaBeans?">
  <p>
  The utilities that Struts uses (Commons-BeanUtils since 1.1) require that ActionForm 
properties follow
  the JavaBean patterns for mutators and accessors (get*,set*,is*). Since Struts uses 
the Introspection API
  with the ActionForms, some containers may require that all the JavaBean patterns be 
followed, including
  declaring "<code>implements serializable</code>" for each subclass. The safest thing 
is to review the
  <a href="userGuide/preface.html#javabeans">JavaBean specification</a> and follow all 
the prescribed patterns.</p>
  </section>
  
  
  <section href="multiple" name="Can I use multiple HTML form elements with the same 
name?">
  <p>
  Yes. Define the element as an array and Struts will autopopulate it like any other.
  </p>
  <pre>
  <code>
  private String[] id= {};
  public String[] getId() { return this.id; }
  public void setItem(String id[]) {this.id = id;}
  </code>
  </pre>
  <p>
  And so forth
  </p>
  </section>
  
  
  <section href="checkbox" name="Why are my checkboxes not being set from ON to OFF?">
  <p>
  A problem with a checkbox is that the browser will only include it in the request
  when it is checked. If it is not checked, the HTML specification suggests that it
  not be sent (i.e. omitted from the request). If the value of the checkbox is being
  persisted, either in a session bean or in the model, a checked box can never
  unchecked by a HTML form -- because the form can never send a signal to uncheck
  the box. The application must somehow ascertain that since the element was not
  sent that the corresponding value is unchecked.
  </p>
  <p>
  The recommended approach for Struts applications is to use the reset method in the
  ActionForm to set all properties represented by checkboxes to null or false. The
  checked boxes submitted by the form will then set those properties to true. The
  omitted properties will remain false. Another solution is to use radio buttons
  instead, which always submit a value.
  </p>
  <p>
  It is important to note that the HTML specification recommends this same
  behavior whenever a control is not "successful". Any blank element in a HTML
  form is not guaranteed to submitted. It is therefor very important to set the
  default values for an ActionForm correctly, and to implement the reset method
  when the ActionForm might kept in session scope.
  </p>
  </section>
  
  
  <section href="scriptlets" name="Can't I just create some of my JavaBeans in the JSP 
using a scriptlet?">
  <p>
  Struts is designed to encourage a
  <a href="http://www.javaworld.com/javaworld/jw-12-1999/f_jw-12-ssj-jspmvc.html";>
  Model 2/MVC architecture</a>. But there is nothing that prevents you from using 
Model 1
  techniques in your JavaServer Pages, so the answer  to the question is "Yes, you 
can".
  </p>
  <p>
  Though, using Model 1 techniques in a Struts application does go against the grain.
  The approach recommended by most Struts developers is to create and populate whatever
  objects the view may need in the Action, and then forward these through the request.
  Some objects may also be created and stored in the session or application context,
  depending on how they are used.
  </p>
  <p>
  Likewise, there is nothing to prevent you from using scriptlets along with JSP
  tags in your pages. Though, many Struts developers report writing very complex
  scriplet-free applications and recommend the JSP tag approach to others.
  </p>
  <p>
  For help with Model 1 techniques and scriptlets, you might consider joining the
  <a href="http://archives.java.sun.com/jsp-interest.html";>Javasoft JSP-interest
  mailing list</a>, where there are more people still using these approaches.
  </p>
  </section>
  
  
  <section href="tags" name="Why do the Struts tags provide for so little formatting?">
  <p>
  <i>The Struts tags seem to provide only the most rudimentary funcationality. Why is 
there not better support for date formatting and advanced string handling?</i>
  </p>
  <p>
  Three reasons:
  </p>
  <p>
  First, work started on the JSTL and we didn't want to duplicate the effort.
  </p>
  <p>
  Second, work started on Java Server Faces, and we didn't want to duplicate that 
effort either.
  </p>
  <p>
  Third, in a Model 2 application, most of the formatting can be handled in the 
ActionForms (or in the business tier),
  so all the tag has to do is spit out a string. This leads to better reuse since the 
same "how to format" code
  does not need to be repeated in every instance. You can "say it once" in a JavaBean 
and be done with it.
  </p>
  </section>
  
  <section name="How do I access my database?">
  <p>
  The best thing is use the Action as a thin adaptor between the web/presentation-tier 
and your business classes
  (including those that access a database).
  </p>
  <p>
  So you first design a business API that uses plain Java classes. The best thing is 
to use objects that take
  ordinary Java types and return a JavaBean or collection of JavaBeans. The Action 
then calls these objects and
  passes the result back to the web/presentation tier.
  </p>
  <p>
  A common approach is to create an Action class for each of the business API 
methods/classes that you need to call.
  Ideally, all the database access code should be encapsulated in the business API 
classes, so Struts doesn't know
  what persistent layer you are using (or even if there is a persisentance layer). It 
just passes a key or search
  String and gets back a bean or collection of beans. This lets you use the same 
business API classes in other
  environments, and also to run unit tests against your business API outside of Struts 
or a HTTP environment.
  </p>
  <p>
  To get started, it's simplest to setup a 1:1 correspondence between the Actions and 
the entry-points to
  your business API. As you gain experience, you will find ways to combine your 
Actions, say by using the
  DispatchAction. It's even possible to use a single "framework" Action to call all of 
your business
  classes, as is done with Scaffold ProcessAction in the contrib folder. Using fewer 
Actions does require
  a deeper understanding of how Struts and MVC frameworks operate. Don't hestitate to 
err on the side
  of creating more Actions at first. The Struts configuration makes it easy to 
refactor your Actions
  later, since you can change the Action type without changing anything else in the 
application.
  </p>
  <p>
  For more, see
  </p>
  <p>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24621.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24621.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24709.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24709.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24626.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24626.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24331.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24331.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24102.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24102.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23501.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23501.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23455.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23455.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23375.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23375.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23321.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23321.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23098.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23098.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg22713.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg22713.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg21974.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg21974.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg21026.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg21026.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg19338.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg19338.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg18323.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg18323.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg14975.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg14975.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg14914.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg14914.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg14435.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg14435.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg01562.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg01562.html</a>
  </p>
  <p>
  Transformation/Data Transfer<br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24480.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24480.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23623.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg23623.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg10195.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg10195.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg10205.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg10205.html</a>
  </p>
  </section>
  
  
  <section name="How can I authenticate my users?">
  <p>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24504.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg24504.html</a><br/>
  <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg22949.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg22949.html</a>
  </p>
  </section>
  
  
  <section href="pager" name="How can I scroll through list of pages like the search 
results in google?">
  <p>Many Struts developers use the Pager from the JSPTags site.</p>
  <p><a 
href="http://jsptags.com/tags/navigation/pager/";>http://jsptags.com/tags/navigation/pager/</a></p>
  </section>
  
  
  <section href="minimization" name="Why does the option tag render selected=selected 
instead of just selected?">
  <p>
  Attribute minimization (that is, specifying an attribute with no value) is
  a place where HTML violates standard XML syntax rules. This matters a lot
  for people writing to browsers that support XHTML, where doing so makes
  the page invalid.It's much better for Struts to use the expanded syntax,
  which works the same on existing browsers interpreting HTML, and newer
  browsers that expect XHTML-compliant syntax. Struts is following the
  behavior recommended by the <a href="http://www.w3.org/TR/xhtml1/#h-4.5";>
  XHTML specification</a></p>
  </section>
  
  </chapter></body></document>
  
  
  
  1.1                  jakarta-struts/doc/faqs/kickstart.xml
  
  Index: kickstart.xml
  ===================================================================
  <?xml version="1.0"?>
  <document url="./kickstart.xml">
  <properties>
  <author>Ted Husted</author>
  <author>Craig R. McClanahan</author>
  <author>James DeVries</author>
  <author>James Holmes</author>
  <title>The Struts User's Guide - Kickstart FAQ</title>
  </properties>
  <body>
  <chapter href="faq" name="Kickstart FAQ">
  
  <section href="contents" name="Index">
  
  <p>
  Here are answers to the usual getting-started questions. <b>For an in-depth, 
searchable FAQ, visit our friends at <a 
href="http://www.jguru.com/faq/home.jsp?topic=Struts";>JGuru</a>.</b>
  </p>
  
    <ul>
      <li><a href="#why">Why do we need Struts?</a></li>
      <li><a href="#how">How does Struts work?</a></li>
      <li><a href="#compat">Is Struts compatible with other Java technologies?</a></li>
      <li><a href="#who">Who wrote Struts?</a></li>
      <li><a href="#struts">Why is it called Struts?</a></li>
      <li><a href="#license">How is Struts licensed?</a></li>
      <li><a href="#usage">Can Struts be used in a commercial application?</a></li>
      <li><a href="#credits">Do I have to credit Struts on my own website?</a></li>
    </ul><ul>
      <li><a href="#where">Where can I get a copy of Struts?</a></li>
      <li><a href="#install">How do I install Struts?</a></li>
      <li><a href="#jar">When do I need the struts.jar on my classpath?</a></li>
      <li><a href="#tests">Does Struts provide its own unit tests?</a></li>
    </ul><ul>
      <li><a href="#help">Where can I get help with Struts?</a></li>
      <li><a href="#consultants">Is commercial support available for Struts?</a></li>
      <li><a href="#hosts">Are there ISPs that will host my Struts 
application?</a></li>
      <li><a href="#powered">What Web sites are already Powered by Struts?</a></li>
    </ul><ul>
      <li><a href="#turbine">What's the difference between Struts and Turbine?</a></li>
      <li><a href="#taglibs">Why aren't the Struts tags maintained as part of the 
Jakarta Taglibs project?</a></li>
      <li><a href="#xhmtl">Are the Struts tags XHTML compliant?</a></li>
      <li><a href="#jsf">What about the JSTL and JavaServer Faces?</a></li>
    </ul><ul>
      <li><a href="#digest">Is there a digest for the mailing list?</a></li>
      <li><a href="#newsgroup">Is there a Struts Newsgroup?</a></li>
      <li><a href="#mailbounce">Why didn't my posting show up on the user 
list?"</a></li>
      <li><a href="#unsubscribe">How do I unsubscribe from the mailing list?</a></li>
    </ul><ul>
      <li><a href="#more">Are there any other FAQs?</a></li>
    </ul>
  </section>
  
  <section href="why" name="Why do we need Struts?">
  <p>Java technologies give developers a serious boost when creating and maintaining 
applications to meet the demands of today's public Web sites and enterprise intranets. 
Struts combines Java Servlets, Java ServerPages, custom tags, and message resources 
into a unified framework. The end result is a cooperative, synergistic platform, 
suitable for development teams, independent developers, and everyone in between.</p>
  </section>
  
  <section href="how" name="How does Struts work?">
  <p>Java Servlets are designed to handle requests made by Web browsers. Java 
ServerPages are designed to create dynamic Web pages that can turn billboard sites 
into live applications. Struts uses a special Servlet as a switchboard to route 
requests from Web browsers to the appropriate ServerPage. This makes Web applications 
much easier to design, create, and maintain.</p>
  </section>
  
  <section href="javasoft" name="Is Struts compatible with other Java technologies?">
  <p>Yes. Struts is committed to supporting industry standards. Our lead developer is 
a member of <a 
href="http://java.sun.com/aboutJava/communityprocess/jsr/jsr_052_jsptaglib.html";>JSR052</a>,
 Sun's Expert group for developing a standard library of custom JSP tags. A primary 
design criteria is that Struts must be compatible with Sun's J2EE platform for 
corporate enterprises. In fact, Struts really acts as an integrator of Java 
technologies, so that they can be used in the &quot;real world&quot;.</p>
  </section>
  
  <section href="who" name="Who wrote Struts?">
  <p>Struts was created by Craig R. McClanahan, and donated to the Apache Software 
Foundation in May 2000. Craig is the primary developer of both Struts and <a 
href="http://jakarta.apache.org/tomcat/index.html";>Tomcat 4</a>, the basis for the 
official reference implementation for a servlet 2.3 and JSP 1.2 container. With stable 
releases of Struts and Tomcat 4 in circulation, Craig is now the Specification Lead 
for <a href="http://jcp.org/jsr/detail/127.jsp";>JavaServer Faces (JSR-127)</a>, and is 
the Web Layer Architect for the Java2 Enterprise Edition (J2EE) platform as a 
whole.</p>
  <p>There are now many active committers to the Struts project, working cooperatively 
from around the globe. Other Java developers are invited to <a 
href="#contribute">contribute to the project</a>. Struts is an <a 
href="http://jakarta.apache.org/";>Apache Jakarta</a>  project, with the common mission 
to &quot;provide commercial-quality server solutions based on the Java Platform that 
are developed in an open and cooperative fashion&quot;. All told, 17 individual 
developers and committers contributed to the Struts 1.0 codebase.</p>
  </section>
  
  <section href="struts" name="Why is it called Struts?">
  <p>It's a reference to struts in the architectural sense, a reminder of the nearly 
invisible pieces that hold up buildings, houses, and bridges.</p>
  </section>
  
  <section href="license" name="How is Struts licensed?">
  <p>Struts is copyrighted software available under a &quot;free-to-use-license&quot; 
by the Apache Software Foundation. The license appears at the head of every source 
code file. A reference copy of the license is available <a 
href="http://www.apache.org/LICENSE-1.1";>here</a>.</p>
  </section>
  
  <section href="usage" name="Can Struts be used in a commercial product?">
  <p>Yes. The only requirements you must meet are those listed in the Apache Software 
Foundation license, which is included at the top of each source file and in the file 
LICENSE in the top-level directory of the distribution.</p>
  <p>In addition, <a href="helping.html#bugs">contributions of patches, improved code, 
new features,</a> or even just requests for features are also welcome.</p>
  </section>
  
  <section href="credits" name="Do I have to credit Struts on my own website?">
  <p>You need to credit Struts if you <strong>redistribute your own framework</strong> 
based on Struts
  for other people to use. (See the <a href="http://www.apache.org/LICENSE";>Apache 
License</a> for details.)
  But you do <strong>not</strong> need to credit Struts just because your web 
application utilizes the framework.
  It's the same situation as using the Apache HTTPD server or Tomcat. Not required if 
its just running your web site.
  Required if you've used the source code to create your own server that you are 
redistributing to other people.</p>
  </section>
  
  <section href="where" name="Where can I get a copy of Struts?">
  <p>The best place to download Struts is at <a 
href="http://jakarta.apache.org/struts/";>jakarta.apache.org/struts</a>. The nightly 
builds are very stable, and recommended as the best place to start today.</p>
  </section>
  
  <section href="install" name="How do I install Struts?">
  <p>To develop applications with Struts, you can usually just add the Struts JAR file
  to your Java development environment. You can then start using the Struts classes as
  part of your own application. A blank Struts application (in the
  <code>webapps</code> directory, open <code>struts-blank.war</code>)
  is provided, which you can just copy to get a quick-start on your own brainchild.</p>
  <p>Since the full source code for Struts is available, we also provide
  <a href="http://jakarta.apache.org/struts/installation.html";>complete 
instructions</a>
  for compiling your own Struts JAR from scratch. (This is actually easier than it 
looks!)</p>
  <p>Your Struts application can usually be deployed using a standard WAR file. In most
  cases, you simply deposit the WAR file on your application server, and it is 
installed
  automatically. If not, step-by-step installation instructions for
  <a href="http://jakarta.apache.org/struts/installation.html#Containers";>various 
servlet
  containers</a> are available.</p>
  </section>
  
  <section href="jar" name="When do I need &quot;struts.jar&quot; on my classpath?">
  <p>When you are compiling an application that uses the Struts classes, you must have 
the &quot;struts.jar&quot; on the classpath your <b>compiler</b> sees -- it does not 
<i> have</i> to be on your CLASSPATH environment variable.</p>
  <p>Why is that an important distinction? Because if you are using a servlet 
container on your development machine to test your application, the 
&quot;struts.jar&quot; <b>must not</b> be on your CLASSPATH environment variable when 
running the container. (This is because each Web application must also have their own 
copy of the Struts classes, and the container will become confused if it is on the 
environment path as well.)</p>
  <p>There are several general approaches to this issue:</p>
  <ul>
  <li><b>Use ANT</b> for building your projects -- it can easily assemble  classpaths 
for the compiler.  (This is how Struts itself is  built, along with Tomcat and most 
other Java-based projects).</li>
  <li><b>Use an IDE</b> where you can configure the "class path" used  for compilation 
independent of the CLASSPATH environment  variable.</li>
  <li><b>Use a shell script</b> that temporarily adds struts.jar  to the classpath 
just for compilation, for example<br/>
  <i>javac -classpath /path/to/struts.jar:$CLASSPATH $@</i></li>
  </ul>
  </section>
  
  <section href="tests" name="Does Struts include its own unit tests?">
  <p>
  Struts currently has two testing environments, to reflect the fact that
  some things can be tested statically, and some really need to be done in
  the environment of a running servlet container.</p>
  <p>
  For static unit tests, we use the <a href="http://www.junit.org";>JUnit framework</a>.
  The sources for these tests are in the "src/test"
  hierarchy in the CVS repository, and are executed via the "test.junit"
  target in the top-level build.xml file.  Such tests are focused on the
  low-level functionality of individual methods, are are particularly
  suitable for the static methods in the org.apache.struts.util utility
  classes.  In the test hierarchy, there are also some "mock object" classes
  (in the org.apache.struts.mock package) so that you can package up things
  that look like servlet API and Struts API objects to pass in as arguments
  to such tests.</p>
  </section>
  
  <section href="help" name="Where can I get help with Struts?">
  <p>The Struts package comes complete with a
  <a href="http://jakarta.apache.org/struts/userGuide/index.html";>Users Guide</a> to
  introduce people to the framework and its underlying technologies. Various components
  also have their own in-depth Developers Guide, to cover more advanced topics. 
Comprehensive
  <a href="http://jakarta.apache.org/struts/api/index.html";>Javadocs</a> are included
  along with the <b>full source code</b>. For your convenience, these are bundled 
together as
  a self-installing application. The <code>struts-documentation.war</code> is the same
  bundle that is deployed as the
  <a href="http://jakarta.apache.org/struts/";>Struts Web site</a>.
  </p>
  <p>
  The
  <a href="http://jakarta.apache.org/site/mail.html";>Strut's mailing list</a> is also
  very active, and welcomes posts from new users. Before posting a new question, be
  sure to consult the
  <a href="http://www.mail-archive.com/struts-user%40jakarta.apache.org/";>
  <b>MAILING LIST ARCHIVE</b></a> and the very excellent
  <a href="http://www.tuxedo.org/~esr/faqs/smart-questions.html";>
  How To Ask Questions The Smart Way</a> by Eric Raymond. Please do be sure
  to <a href="http://expita.com/nomime.html";>turn off HTML</a> in your
  email client before posting.
  </p>
  <p>
  There are also many third-party tutorials, articles, and books that cover Struts.
  See our
  <a href="resources/tutorials.html">Resources page</a> for current listings and
  links.
  </p>
  </section>
  
  <section href="support" name="Is commercial support available?">
  <p>There is no official, commercial support for Struts, though third parties may 
offer different degrees of support. A list of Struts consultants is available on our 
<a href="resources/consultants.html">Resources page</a></p>
  </section>
  
  <section href="providers" name="Are there ISPs that will host my Struts 
application?">
  <p>For a listing of some Java and Struts ISPs, visit our <a 
href="resources/hosts.html">Resources page</a>.</p>
  </section>
  
  <section href="powered" name="What Web sites are already Powered by Struts?">
  <p>For a listing of some Struts-powered Web sites available to the public, visit our 
<a href="resources/powered.html">Resources page</a>.</p>
  </section>
  
  <section href="turbine" name="What's the difference between Jakarta Struts and 
Jakarta Turbine?">
  <p>See</p>
  <ul>
  <li>&lt; <a 
href="http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg03206.html">http://www.mail-archive.com/struts-user@;jakarta.apache.org/msg03206.html</a>
 &gt;</li>
  <li>&lt; <a 
href="http://www.mail-archive.com/general@;jakarta.apache.org/msg00495.html">http://www.mail-archive.com/general@;jakarta.apache.org/msg00495.html</a>
 &gt;</li>
  <li>&lt; <a 
href="http://jakarta.apache.org/velocity/ymtd/ymtd.html";>http://jakarta.apache.org/velocity/ymtd/ymtd.html</a>
 &gt;</li>
  </ul>
  </section>
  
  <section href="taglibs" name="Why aren't the Struts tags maintained as part of the 
Jakarta Taglibs project?">
  <p>Development of both products began about the same time. Leading up to the release 
of 1.0, it was thought better to continue to develop the taglibs alongside the 
controller. Now that 1.0 is out, the Java ServerPages Standard Taglib is in active 
development. Once work on the JSPTL stabilizes, the Struts taglibs will be revisited. 
Tags which are not linked directly to the framework may be hosted at Jakarta Taglibs 
instead.</p>
  </section>
  
  <section href="xhtml" name="Are the Struts tags XHTML compliant?">
  <p>If you utilize a &lt;html:html xhtml="true> element on your page, the tags
  will render in a XHTML compatible manner (since Struts 1.1 beta 2). </p>
  </section>
  
  <section href="wml" name="Will the Struts tags support other markup languages such 
as WML">
  <p>
  Struts itself is markup neutral. The original Struts taglibs are only one example of 
how
  presentation layer components can access the framework. The framework objects are 
exposed
  through the standard application, session, and request contexts, where any Java 
component in
  the application can make use of them.
  </p>
  
  <p>Markup extensions that use Struts are available for
  <a href="http://jakarta.apache.org/velocity";>Velocity</a> and
  <a href="http://www.openroad.ca/opencode/";>XLST</a>, among others.
  A new Struts tag for
  <a href="#jsf">Java Server Faces</a> is also in development.
  </p>
  
  <p>For more about using WAP/WML with Struts see the article
  <a href="http://www.sys-con.com/pbdj/archives2/0904/hamboeck/";>
  WAP up your EAserver</a>.
  </p>
  </section>
  
  <section href="jsf" name="What about the JSTL and JavaServer Faces?">
  <p>
  The lead developer of Struts, Craig McClanahan, was a member of the
  expert group for the JavaServer Standard Tag Library (JSR 052) and
  now the specification lead for JavaServer Faces (JSR 127). Both
  technologies are complementary to Struts.</p>
  <p>
  The mainstay of the Struts framework is the controller components, which
  can be used with any Java presentation technology. As new technologies
  become available, it is certain that new "glue" components will also
  appear to help these technologies work as well with Struts as the
  bundled JSP tags. This would apply to both the JSTL and JSF.</p>
  <p>
  At some point, we would not be surprised to see Faces become the
  preferred UI implementation technology once it is standardized and
  available. You can be assured that any future migration will be
  made as painless as possible, and maximize your investment in
  Struts.</p>
  <p>
  The JSTL is available through the Jakarta Taglibs site: <br/>
  <a 
href="http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html";>http://jakarta.apache.org/taglibs/doc/standard-doc/intro.html</a>
  </p>
  <p>
  The JavaServer Faces specification is still being finalized. Public release of
  the specification is scheduled for Summer 2002, and an implementation may be
  available in Fall of 2002. <a 
href="http://servlet.java.sun.com/javaone/sf2002/conf/sessions/display-1697.en.jsp";>
  A presentation was given at JavaOne 2002</a> with some additional background.
  </p>
  <p>
  In September 2002, McClanahan announced that a
  <a href="../proposals/struts-faces.html">struts-faces taglib</a> is in
  development and might be released sometime in the Q4 2002. The taglib depends
  on unreleased JSF features, and so an early release of the taglib must follow
  release of a later implementation of JSF.
  </p>
  </section>
  
  <section href="digest" name="Is there a digest for the User list?">
  <p>
  Yes. <a href="mailto:struts-user-digest-subscribe@;jakarta.apache.org">send a blank 
message</a> to &lt; <a 
href="mailto:struts-user-digest-subscribe@;jakarta.apache.org">[EMAIL PROTECTED]</a>&gt;.
  </p>
  <p>
  If you are subscribed to the digest, you can also post to the list.
  Just be sure to send your post to the
  <a href="mailto:struts-user@;jakarta.apache.org">user list</a> rather than trying to 
reply to the digest.
  </p>
  </section>
  
  <section href="newsgroup" name="Is there a Struts newsgroup?">
  <p>
  Not a usenet group, but the Struts User list can be accessed with your
  favorite newsgroup reader from the
  <a href="http://news.basebeans.com/forums.jsp";>
  BaseBeans Engineering</a> site.
  </p>
  </section>
  
  <section href="mailbounce" name="Why didn't my posting show up on the user list?">
  <p>
  You must be subscribed to the <a 
href="mailto:struts-user-subscribe@;jakarta.apache.org">user list</a>
  or <a href="mailto:struts-user-digest-subscribe@;jakarta.apache.org">user digest</a> 
before posting
  (or use the <a href="http://news.basebeans.com/forums.jsp";>BaseBeans newsgroup</a> 
instead).
  </p>
  </section>
  
  <section href="unsubscribe" name="How do I unsubscribe from the mailing list?">
  <p>
  <b>From the email account used to subscribe to the list,</b> <a 
href="mailto:struts-user-unsubscribe@;jakarta.apache.org">send a blank message</a> to 
&lt; <a 
href="mailto:struts-user-unsubscribe@;jakarta.apache.org">[EMAIL PROTECTED]</a>&gt;.
  </p>
  <p>
  If you are receiving the digest, you must send a blank email to
  &lt;<a 
href="mailto:struts-user-digest-unsubscribe@;jakarta.apache.org">[EMAIL PROTECTED]</a>&gt;
  instead.
  </p>
  </section>
  
  </chapter></body></document>
  
  
  
  1.1                  jakarta-struts/doc/faqs/index.xml
  
  Index: index.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <document url="./index.xml">
  <properties>
  <author>Ted Husted</author>
  <title>FAQs and Howtos - Jakarta Struts</title>
  </properties>
  <body>
  
  <section name="Struts FAQs and Howtos">
  
   <ul>
      <li><a href="kickstart.html">Kickstart FAQ</a> (read me first)</li>
      <li><a href="newbie.html">Newbie FAQ</a> </li>
      <li><a href="helping.html">How to Help FAQ</a> </li>
   </ul>
  
   <ul>
      <li><a href="ssl.html">SSL Howto</a></li>
   </ul>
  
  </section>
  
  <section name="Offsite FAQs and Howtos">
  
   <ul>
      <li><a href="http://www.jguru.com/faq/home.jsp?topic=Struts";>jGuru FAQ</a></li>
   </ul>
  
   <ul>
      <li><a href="http://www.husted.com/struts/tips";>Struts Tips</a></li>
   </ul>
  
  </section>
  
  </body></document>
  
  
  
  1.1                  jakarta-struts/doc/faqs/helping.xml
  
  Index: helping.xml
  ===================================================================
  <?xml version="1.0"?>
  <document url="./helping.xml">
  <properties>
  <author>Ted Husted</author>
  <author>Craig R. McClanahan</author>
  <title>The Struts User's Guide - How to Help FAQ</title>
  </properties>
  
  <body>
  
  <chapter href="faq" name="How to Help FAQ">
  
  <section href="contents" name="Index">
  
  <p>
  <font face="Arial, Helvetica, sans serif">"You can't always get what you want / but 
if you try real hard / you might just find /
  that you get what you need". </font><br/>
  [Rolling Stones]
  </p>
  
  <ul>
      <li><a href="#corp">What can my company do to help support Struts?</a></li>
      <li><a href="#bugs">How can I report bugs or make feature requests?</a></li>
      <li><a href="#contribute">How can I contribute to Struts source code?</a></li>
      <li><a href="#documentation">How can I contribute to the documentation?</a></li>
      <li><a href="#release">So when is the next release coming out?</a></li>
      <li><a href="#release_help">How can I help the next release along?</a></li>
  </ul>
  
  </section>
  
  <section href="corp" name="What can my company do to help support Struts?">
  
  <p>
  Struts is an all volunteer product. Our customers are the volunteers who donate
  their time and energy to supporting the product. If you want to support Struts, and
  become one of our customers, then you need to
  <a href="http://jakarta.apache.org/site/getinvolved.html";>get involved</a> and 
become a volunteer.
  </p>
  
  <p>
  Our challenge to any team using Struts is to donate the time of one team member one
  afternoon a week (or more if you can spare the resources). Have your team member 
browse Bugzilla for any
  issues without a <a href="#code">patch</a> or <a href="#tests">unit test</a>, and 
add the patch or test.
  If the patch is written on company time, and you want to give your company an 
author's credit, that's
  fine with us.
  </p>
  
  <p>
  If Struts doesn't do what <i>you</i> want, it's up to <b>you</b> to step up and 
propose the patch.
  If Struts doesn't ship as often as you would like, it's up to you to step up with 
the tests and fixes that
  get a release out the door.
  </p>
  
  <p>
  If Struts does do what you want, help others become involved by turning your war 
stories into FAQs and
  how-tos that we can make part of the <a href="documentation">documentation</a>. The 
mailing list is very
  active and trundling through the archives is no picnic. We can always use people who 
can reduce the best
  threads to coherent articles that we can put in the User Guide.
  </p>
  
  <p>
  We don't sell Struts for money, but anyone who wants to be our customer can pay us 
back by donating
  the time and energy that money represents.
  </p>
  
  </section>
  
  <section href="bugs" name="How can I report bugs or make feature requests?">
  
  <p>
  You can research and report outstanding fixes and feature requests using
  <a href="http://jakarta.apache.org/site/bugs.html";>Jakarta Bugzilla</a>. If you
  are unsure if this is an actual problem, feel free to bring it up the list
  first. But to sure that an issue is resolved, read
  <a href="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html";>How to Report
  Bugs Effectively</a> and report it to
  <a href="http://jakarta.apache.org/site/bugs.html";><b>Bugzilla</b></a>.
  </p>
  
  <p>
  Feature requests are also maintained in the Bugzilla database. Some older
  requests are still listed the <a href="../todo-1.1.html">wish list</a>
  page.
  </p>
  
  <p>
  <a href="http://jakarta.apache.org/site/source.html";>Patches</a> are always
  welcome. If you can't write a patch to fix your bug, a <a href="#tests">unit test</a>
  that demonstrates the problem is also welcome.
  (And, of course, unit tests that prove your patch work are equally
  welcome.)
  </p>
  
  <p>
  If your bug or feature is already in Bugzilla, <strong>you can vote</strong>
  for the issue and call more attention to it. Each user can cast up to six
  votes at a time.
  </p>
  
  <p>
  If there is a patch attached to the issue, you can also try applying
  to your local copy of Struts, and report whether it worked for you.
  Feedback from developers regarding a proposed patch is really quite
  helpful. Don't hesitate to "me too" if you've tried the patch yourself.
  </p>
  
  </section>
  
  <section href="contribute" name="How can I contribute to the Struts source code?">
  
  <p>
  Struts is distributed by the <a href="http://apache.org/";>Apache Software 
Foundation</a>.
  These are the same people who distribute the Apache Web server. Like all ASF 
projects, Struts
  is managed as a &quot;meritocracy&quot;, where everyone's contribution is welcome. 
Users can
  help other users the <a href="http://jakarta.apache.org/site/mail.html";>mailing 
lists</a>,
  <a href="http://jakarta.apache.org/site/bugs.html";>report bugs</a>, and
  <a href="http://jakarta.apache.org/site/bugs.html";>request new features</a>. 
Developers can
  contribute patches, new code, and documentation. The most active Developers may 
become
  <a href="http://jakarta.apache.org/site/roles.html";>Committers</a>, who make the 
actual
  decisions about Strut's codebase.
  </p>
  
  <p>
  If you are new to open source development, see the
  "<a href="http://jakarta.apache.org/site/getinvolved.html";>How to get involved</a>"
  page the main Jakarta site.
  </p>
  
  <p>
  A very good place to start is by <b>reviewing the list of open issues</b> and pending
  feature requests (<a href="#bugs">Bugzilla</a>). If you see an issue that needs a
  patch you can write, feel free to annex your patch. If you seen an issue that needs
  a unit test to prove its fixed, feel free to annex your test case. If someone has 
posted a
  patch to an issue you'd like to see resolved, apply the patch to your local 
development copy
  of Struts. Then let us know if it works for you, and if it does, cast your vote for 
the
  issue and its patch.
  </p>
  
  <p>
  If none of the pending issues scratch your itch, another good place to start is by
  <b>contributing unit tests</b> for existing features (even those that still work).
  </p>
  
  <p>
  Our current approach to <a href="kickstart.html#tests">unit testing</a>
  works fairly well for exercising most method-level stuff, but does
  not really address situations of dynamic behavior -- most particularly the
  execution of custom tags for Struts.  You can try to fake what a JSP
  container does, but a much more reliable testing regime would actually
  execute the tag in a real container.  For that purpose, we use the
  <a href="http://jakarta.apache.org/cactus";>Cactus</a>
  testing framework , which re-executes
  the JUnit-based tests as well to make sure that nothing bad happens when
  you switch environments.  Right now, there are very few dynamic tests;
  ideally, we will have tests for every tag, that cover every reasonable
  combination of tag attribute values (yes, that's a tall order -- the
  totally lines of test source code will undoubtedly exceed the totally
  lines of code in the framework itself if we achieve this).
  </p>
  
  </section>
  
  <section href="documentation" name="How can I contribute to the documentation?">
  
  <p>
  The only difference is that the documentation is kept in XML rather than Java
  source code. Otherwise, all the same precepts and procedures pertain.
  </p>
  
  <p>
  The trick to getting started is to download the nightly build and try
  building the documentation WAR. Then try adding your own XML page under doc/ to see
  if the build succeeds. If it doesn't, it will report where the bad element is, much
  like it reports where a bad programming expression is. If it does, then your page
  should available under target/documentation/.
  </p>
  
  <p>
  The website portion of the package is the root directory of doc/. The User Guide
  portion is under the userGuide/ folder. If the material you'd to add doesn't
  fit right in with what's there, the best thing may to start a new section after
  the existing material. The navigation column can found in the project.xml document.
  </p>
  
  <p>
  To display markup, substitute &amp;lt; for &lt;. The unmatched trailing > will
  ignored. Since it is XML, all elements also need to closed. So elements like
  &lt;br> and &lt;hr> need to set out as &lt;br/> and &lt;hr/>.
  </p>
  
  <p>
  Also watch for the length of code samples. These do not wrap. If a line is too long,
  it will force the right margin out past the edge of the screen or printed page.
  </p>
  
  <p>
  The stylesheets we use are adequate, but could certainly improved by an XML
  guru, if you happen to one of those.
  </p>
  
  </section>
  
  <section href="release" name="So when is the next release coming out?">
  
  <p>
  Here is the truth regarding releases:
  </p>
  
  <p>
  Jakarta products are released the basis of merit, and ~not~ according
  to a strict timetable. The volunteers devote whatever time they can to working
  the product. But all volunteers have real jobs and real lives, that
  do take precedence. Since Struts does not have paid personnel working
  the project, we simply cannot make date-oriented commitments.
  </p>
  
  <p>
  All Jakarta products must circulate a public beta before release. If a
  beta is not in circulation, then it's a good bet that a release is not
  forthcoming any time soon. Products sometimes go through several betas
  before final release. So if this is beta 1, then it still may not
  released any time soon.
  </p>
  
  <p>
  The bottom line is that Jakarta takes releases very seriously. We do not
  compromise the quality of our software by watching the calendar (and
  then ship something ready or not). A release is ready when it is ready.
  </p>
  
  <p>
  That may sound flip, but it ~is~ the truth. The delivery of
  production-quality, leading-edge software is not something anyone can
  prognosticate. If anyone tries, they are lying to you. That, we won't
  do ;-)
  </p>
  
  <p>
  What we ~will~ do is release all of our development software as soon as it
  is developed. This way you can judge for yourself how quickly the
  development is proceeding, and whether what is being developed will meet
  your needs. If you need a feature right now, you can use the nightly
  build, or roll your own patch. There are no private CVS's or private
  development lists. What you see is what we got. If you are following the
  DEV list, then you know everything the developers know. Really, you do.
  </p>
  
  <p>
  <i>So, what do you tell your team?</i> If you can ship your application based
  the nightly build of your choice, then consider that an option. You can
  still ship yours, even if we don't ship ours, and you will have access to
  all the latest patches or enhancements. (Just like we were working down
  the hall.) If you can only ship your application based a release build of
  Struts, then you should base your development the release build of Struts,
  and keep an eye what is coming down the pipeline. This way you are at least
  forewarned and forearmed.
  </p>
  
  </section>
  
  <section href="release_help" name="What can I do to help the next release along?">
  
  <ul>
  
  <li>
    Most importantly, <b>download the latest beta</b> or release-candidate and test
    it against your own applications. Report any and all issues or suspected issues
    to <a href="http://jakarta.apache.org/site/bugs.html";>Bugzilla</a>. The sooner
    we resolve any problems, the fewer betas or release candidates we will have to
    distribute before we are done. (How do we know when we done? -- When we run out
    of issues =:o) The sooner we find them, the sooner we are done.)
  </li>
  
  <li>
    <b>Contribute <a href="kickstart.html#tests">unit tests</a></b>. The closer we get
    to a release, the more we worry about breaking something. The more tests we have, 
the
    more confident we can when applying patches. Tests that proves that a pending
    issue is actually a bug are the most welcome. But we are eager for any and all 
tests
    for any and all features, even those that still work =:0).
  </li>
  
  <li>
    <b>Review the list of issues</b> at <a href="#bugs">Bugzilla</a>. If there are any
    to which you can respond, please do. If there any patches posted, feel free to 
test the
    patch your system, report the results, and cast your vote if it works.
  </li>
  
  <li>
    <b>Confirm an issue's category and status</b>. Newbies often post feature requests
    or help-desk questions as "bugs". This bloats the list of fixes we (apparently) 
need to
    apply before the next beta, making it hard to see the forest for the trees. If an 
issue
    doesn't seem to categorized correctly, exercise your best judgment and change it.
    If one ticket seems like a duplicate of another, go ahead and enter the change. 
Every
    modification to the ticket is echoed to the DEV list and automatically subjected to
    peer review. Err on the side of doing.
  </li>
  
  <li>
    Use Bugzilla to <b>vote for issues</b> you feel should be handled
    first. If an issue on your ballot doesn't include a patch, feel free to try coding
    one yourself. (At Jakarta, patches are the only votes that truly count.) Well over
    <a href="volunteers.html">thirty developers</a> have contributed code or
    documentation to the product. You can too =:0)
  </li>
  
  <li>
    <b>Answer questions on the user list.</b> The Committers only have so much time to
    volunteer. If Developers are supporting each other on the lists, the
    Committers have more time to spend on the next release.
  </li>
  
  </ul>
  
  </section>
  
  <section href="decisions" name="Who makes the final decisions regarding Struts">
  
  <p>
  The management of the Jakarta site, and the Struts product, is based on principles 
and
  practices used by creators of the Apache HTTPD server. Struts follows the
  <a href="http://jakarta.apache.org/site/guidelines.html";>Project Guidelines</a> on 
the
  main Jakarta site.
  </p>
  
  <p>If you are new to this style of development, the Apache HTTPD Dev list is 
available in a
  <a href="[EMAIL PROTECTED]">digest form</a>. Even if you are not
  working on the HTTPD server yourself, it is interesting to watch how the HTTPD team
  works on the server.
  </p>
  
  <p>
  The Struts project has its own <a href="index.html#lists">Dev list</a>, where all of
  the decisions regarding Struts are made. Most development takes place via
  "<a href="http://jakarta.apache.org/site/proposal.html#decisions/voting/items";>Lazy 
Consensus</a>".
  Committers post most changes to the product unilaterally, using their own best 
judgment,
  and only discuss or vote upon controversial matters. Another Committer can veto any 
change in an
  unreleased product with cause.
  </p>
  
  </section>
  </chapter>
  </body>
  </document>
  
  
  

--
To unsubscribe, e-mail:   <mailto:struts-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-dev-help@;jakarta.apache.org>

Reply via email to