| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN""http://www.w3.org/TR/REC-html40/loose.dtd"> |
| <!--NewPage--> |
| <HTML> |
| <HEAD> |
| <!-- Generated by javadoc on Fri Aug 22 03:43:58 EDT 2003 --> |
| <TITLE> |
| TokenProcessor (Apache Struts API Documentation) |
| </TITLE> |
| <META NAME="keywords" CONTENT="org.apache.struts.util.TokenProcessor,TokenProcessor class"> |
| <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style"> |
| </HEAD> |
| <SCRIPT> |
| function asd() |
| { |
| parent.document.title="TokenProcessor (Apache Struts API Documentation)"; |
| } |
| </SCRIPT> |
| <BODY BGCOLOR="white" onload="asd();"> |
| |
| <!-- ========== START OF NAVBAR ========== --> |
| <A NAME="navbar_top"><!-- --></A> |
| <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> |
| <TR> |
| <TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> |
| <A NAME="navbar_top_firstrow"><!-- --></A> |
| <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> |
| <TR ALIGN="center" VALIGN="top"> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> |
| <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TokenProcessor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> |
| </TR> |
| </TABLE> |
| </TD> |
| <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> |
| </EM> |
| </TD> |
| </TR> |
| |
| <TR> |
| <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> |
| <A HREF="../../../../org/apache/struts/util/StrutsValidatorUtil.html"><B>PREV CLASS</B></A> |
| NEXT CLASS</FONT></TD> |
| <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> |
| <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> |
| <A HREF="TokenProcessor.html" TARGET="_top"><B>NO FRAMES</B></A> |
| |
| <SCRIPT> |
| <!-- |
| if(window==top) { |
| document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>'); |
| } |
| //--> |
| </SCRIPT> |
| <NOSCRIPT> |
| <A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A> |
| </NOSCRIPT> |
| </FONT></TD> |
| </TR> |
| <TR> |
| <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> |
| SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> |
| <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> |
| DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> |
| </TR> |
| </TABLE> |
| <!-- =========== END OF NAVBAR =========== --> |
| |
| <HR> |
| <!-- ======== START OF CLASS DATA ======== --> |
| <H2> |
| <FONT SIZE="-1"> |
| org.apache.struts.util</FONT> |
| <BR> |
| Class TokenProcessor</H2> |
| <PRE> |
| java.lang.Object |
| | |
| +--<B>org.apache.struts.util.TokenProcessor</B> |
| </PRE> |
| <HR> |
| <DL> |
| <DT>public class <B>TokenProcessor</B><DT>extends java.lang.Object</DL> |
| |
| <P> |
| TokenProcessor is responsible for handling all token related functionality. The |
| methods in this class are synchronized to protect token processing from multiple |
| threads. Servlet containers are allowed to return a different HttpSession object |
| for two threads accessing the same session so it is not possible to synchronize |
| on the session. |
| <P> |
| |
| <P> |
| <DL> |
| <DT><B>Since:</B></DT> |
| <DD>Struts 1.1</DD> |
| <DT><B>Author:</B></DT> |
| <DD>Craig R. McClanahan, David Graham</DD> |
| </DL> |
| <HR> |
| |
| <P> |
| <!-- ======== NESTED CLASS SUMMARY ======== --> |
| |
| |
| <!-- =========== FIELD SUMMARY =========== --> |
| |
| <A NAME="field_summary"><!-- --></A> |
| <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> |
| <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> |
| <TD COLSPAN=2><FONT SIZE="+2"> |
| <B>Field Summary</B></FONT></TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> |
| <CODE>private static <A HREF="../../../../org/apache/struts/util/TokenProcessor.html">TokenProcessor</A></CODE></FONT></TD> |
| <TD><CODE><B><A HREF="../../../../org/apache/struts/util/TokenProcessor.html#instance">instance</A></B></CODE> |
| |
| <BR> |
| The singleton instance of this class.</TD> |
| </TR> |
| </TABLE> |
| |
| <!-- ======== CONSTRUCTOR SUMMARY ======== --> |
| |
| <A NAME="constructor_summary"><!-- --></A> |
| <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> |
| <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> |
| <TD COLSPAN=2><FONT SIZE="+2"> |
| <B>Constructor Summary</B></FONT></TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> |
| <CODE>protected </CODE></FONT></TD> |
| <TD><CODE><B><A HREF="../../../../org/apache/struts/util/TokenProcessor.html#TokenProcessor()">TokenProcessor</A></B>()</CODE> |
| |
| <BR> |
| Protected constructor for TokenProcessor.</TD> |
| </TR> |
| </TABLE> |
| |
| <!-- ========== METHOD SUMMARY =========== --> |
| |
| <A NAME="method_summary"><!-- --></A> |
| <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> |
| <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> |
| <TD COLSPAN=2><FONT SIZE="+2"> |
| <B>Method Summary</B></FONT></TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> |
| <CODE> java.lang.String</CODE></FONT></TD> |
| <TD><CODE><B><A HREF="../../../../org/apache/struts/util/TokenProcessor.html#generateToken(javax.servlet.http.HttpServletRequest)">generateToken</A></B>(javax.servlet.http.HttpServletRequest request)</CODE> |
| |
| <BR> |
| Generate a new transaction token, to be used for enforcing a single |
| request for a particular transaction.</TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> |
| <CODE>static <A HREF="../../../../org/apache/struts/util/TokenProcessor.html">TokenProcessor</A></CODE></FONT></TD> |
| <TD><CODE><B><A HREF="../../../../org/apache/struts/util/TokenProcessor.html#getInstance()">getInstance</A></B>()</CODE> |
| |
| <BR> |
| Retrieves the singleton instance of this class.</TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> |
| <CODE> boolean</CODE></FONT></TD> |
| <TD><CODE><B><A HREF="../../../../org/apache/struts/util/TokenProcessor.html#isTokenValid(javax.servlet.http.HttpServletRequest)">isTokenValid</A></B>(javax.servlet.http.HttpServletRequest request)</CODE> |
| |
| <BR> |
| Return <code>true</code> if there is a transaction token stored in |
| the user's current session, and the value submitted as a request |
| parameter with this action matches it.</TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> |
| <CODE> boolean</CODE></FONT></TD> |
| <TD><CODE><B><A HREF="../../../../org/apache/struts/util/TokenProcessor.html#isTokenValid(javax.servlet.http.HttpServletRequest, boolean)">isTokenValid</A></B>(javax.servlet.http.HttpServletRequest request, |
| boolean reset)</CODE> |
| |
| <BR> |
| Return <code>true</code> if there is a transaction token stored in |
| the user's current session, and the value submitted as a request |
| parameter with this action matches it.</TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> |
| <CODE> void</CODE></FONT></TD> |
| <TD><CODE><B><A HREF="../../../../org/apache/struts/util/TokenProcessor.html#resetToken(javax.servlet.http.HttpServletRequest)">resetToken</A></B>(javax.servlet.http.HttpServletRequest request)</CODE> |
| |
| <BR> |
| Reset the saved transaction token in the user's session.</TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> |
| <CODE> void</CODE></FONT></TD> |
| <TD><CODE><B><A HREF="../../../../org/apache/struts/util/TokenProcessor.html#saveToken(javax.servlet.http.HttpServletRequest)">saveToken</A></B>(javax.servlet.http.HttpServletRequest request)</CODE> |
| |
| <BR> |
| Save a new transaction token in the user's current session, creating |
| a new session if necessary.</TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> |
| <CODE> java.lang.String</CODE></FONT></TD> |
| <TD><CODE><B><A HREF="../../../../org/apache/struts/util/TokenProcessor.html#toHex(byte[])">toHex</A></B>(byte[] buffer)</CODE> |
| |
| <BR> |
| Convert a byte array to a String of hexadecimal digits and return it.</TD> |
| </TR> |
| </TABLE> |
| <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> |
| <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> |
| <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor"> |
| <TD><B>Methods inherited from class java.lang.Object</B></TD> |
| </TR> |
| <TR BGCOLOR="white" CLASS="TableRowColor"> |
| <TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD> |
| </TR> |
| </TABLE> |
| |
| <P> |
| |
| <!-- ============ FIELD DETAIL =========== --> |
| |
| <A NAME="field_detail"><!-- --></A> |
| <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> |
| <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> |
| <TD COLSPAN=1><FONT SIZE="+2"> |
| <B>Field Detail</B></FONT></TD> |
| </TR> |
| </TABLE> |
| |
| <A NAME="instance"><!-- --></A><H3> |
| instance</H3> |
| <PRE> |
| private static <A HREF="../../../../org/apache/struts/util/TokenProcessor.html">TokenProcessor</A> <B>instance</B></PRE> |
| <DL> |
| <DD>The singleton instance of this class. |
| <P> |
| <DL> |
| </DL> |
| </DL> |
| |
| <!-- ========= CONSTRUCTOR DETAIL ======== --> |
| |
| <A NAME="constructor_detail"><!-- --></A> |
| <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> |
| <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> |
| <TD COLSPAN=1><FONT SIZE="+2"> |
| <B>Constructor Detail</B></FONT></TD> |
| </TR> |
| </TABLE> |
| |
| <A NAME="TokenProcessor()"><!-- --></A><H3> |
| TokenProcessor</H3> |
| <PRE> |
| protected <B>TokenProcessor</B>()</PRE> |
| <DL> |
| <DD>Protected constructor for TokenProcessor. Use TokenProcessor.getInstance() |
| to obtain a reference to the processor. |
| <P> |
| </DL> |
| |
| <!-- ============ METHOD DETAIL ========== --> |
| |
| <A NAME="method_detail"><!-- --></A> |
| <TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%"> |
| <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> |
| <TD COLSPAN=1><FONT SIZE="+2"> |
| <B>Method Detail</B></FONT></TD> |
| </TR> |
| </TABLE> |
| |
| <A NAME="getInstance()"><!-- --></A><H3> |
| getInstance</H3> |
| <PRE> |
| public static <A HREF="../../../../org/apache/struts/util/TokenProcessor.html">TokenProcessor</A> <B>getInstance</B>()</PRE> |
| <DL> |
| <DD>Retrieves the singleton instance of this class. |
| <P> |
| <DD><DL> |
| </DL> |
| </DD> |
| </DL> |
| <HR> |
| |
| <A NAME="isTokenValid(javax.servlet.http.HttpServletRequest)"><!-- --></A><H3> |
| isTokenValid</H3> |
| <PRE> |
| public boolean <B>isTokenValid</B>(javax.servlet.http.HttpServletRequest request)</PRE> |
| <DL> |
| <DD>Return <code>true</code> if there is a transaction token stored in |
| the user's current session, and the value submitted as a request |
| parameter with this action matches it. Returns <code>false</code> |
| under any of the following circumstances: |
| <ul> |
| <li>No session associated with this request</li> |
| <li>No transaction token saved in the session</li> |
| <li>No transaction token included as a request parameter</li> |
| <li>The included transaction token value does not match the |
| transaction token in the user's session</li> |
| </ul> |
| <P> |
| <DD><DL> |
| <DT><B>Parameters:</B><DD><CODE>request</CODE> - The servlet request we are processing</DL> |
| </DD> |
| </DL> |
| <HR> |
| |
| <A NAME="isTokenValid(javax.servlet.http.HttpServletRequest, boolean)"><!-- --></A><H3> |
| isTokenValid</H3> |
| <PRE> |
| public boolean <B>isTokenValid</B>(javax.servlet.http.HttpServletRequest request, |
| boolean reset)</PRE> |
| <DL> |
| <DD>Return <code>true</code> if there is a transaction token stored in |
| the user's current session, and the value submitted as a request |
| parameter with this action matches it. Returns <code>false</code> |
| <ul> |
| <li>No session associated with this request</li> |
| <li>No transaction token saved in the session</li> |
| <li>No transaction token included as a request parameter</li> |
| <li>The included transaction token value does not match the |
| transaction token in the user's session</li> |
| </ul> |
| <P> |
| <DD><DL> |
| <DT><B>Parameters:</B><DD><CODE>request</CODE> - The servlet request we are processing<DD><CODE>reset</CODE> - Should we reset the token after checking it?</DL> |
| </DD> |
| </DL> |
| <HR> |
| |
| <A NAME="resetToken(javax.servlet.http.HttpServletRequest)"><!-- --></A><H3> |
| resetToken</H3> |
| <PRE> |
| public void <B>resetToken</B>(javax.servlet.http.HttpServletRequest request)</PRE> |
| <DL> |
| <DD>Reset the saved transaction token in the user's session. This |
| indicates that transactional token checking will not be needed |
| on the next request that is submitted. |
| <P> |
| <DD><DL> |
| <DT><B>Parameters:</B><DD><CODE>request</CODE> - The servlet request we are processing</DL> |
| </DD> |
| </DL> |
| <HR> |
| |
| <A NAME="saveToken(javax.servlet.http.HttpServletRequest)"><!-- --></A><H3> |
| saveToken</H3> |
| <PRE> |
| public void <B>saveToken</B>(javax.servlet.http.HttpServletRequest request)</PRE> |
| <DL> |
| <DD>Save a new transaction token in the user's current session, creating |
| a new session if necessary. |
| <P> |
| <DD><DL> |
| <DT><B>Parameters:</B><DD><CODE>request</CODE> - The servlet request we are processing</DL> |
| </DD> |
| </DL> |
| <HR> |
| |
| <A NAME="generateToken(javax.servlet.http.HttpServletRequest)"><!-- --></A><H3> |
| generateToken</H3> |
| <PRE> |
| public java.lang.String <B>generateToken</B>(javax.servlet.http.HttpServletRequest request)</PRE> |
| <DL> |
| <DD>Generate a new transaction token, to be used for enforcing a single |
| request for a particular transaction. |
| <P> |
| <DD><DL> |
| <DT><B>Parameters:</B><DD><CODE>request</CODE> - The request we are processing</DL> |
| </DD> |
| </DL> |
| <HR> |
| |
| <A NAME="toHex(byte[])"><!-- --></A><H3> |
| toHex</H3> |
| <PRE> |
| public java.lang.String <B>toHex</B>(byte[] buffer)</PRE> |
| <DL> |
| <DD>Convert a byte array to a String of hexadecimal digits and return it. |
| <p> |
| <strong>WARNING</strong>: This method is not part of TokenProcessor's |
| public API. It's provided for backward compatibility only. |
| </p> |
| <P> |
| <DD><DL> |
| <DT><B>Parameters:</B><DD><CODE>buffer</CODE> - The byte array to be converted</DL> |
| </DD> |
| </DL> |
| <!-- ========= END OF CLASS DATA ========= --> |
| <HR> |
| |
| <!-- ========== START OF NAVBAR ========== --> |
| <A NAME="navbar_bottom"><!-- --></A> |
| <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0"> |
| <TR> |
| <TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> |
| <A NAME="navbar_bottom_firstrow"><!-- --></A> |
| <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3"> |
| <TR ALIGN="center" VALIGN="top"> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> |
| <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="class-use/TokenProcessor.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> |
| <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> |
| </TR> |
| </TABLE> |
| </TD> |
| <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> |
| </EM> |
| </TD> |
| </TR> |
| |
| <TR> |
| <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> |
| <A HREF="../../../../org/apache/struts/util/StrutsValidatorUtil.html"><B>PREV CLASS</B></A> |
| NEXT CLASS</FONT></TD> |
| <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> |
| <A HREF="../../../../index.html" TARGET="_top"><B>FRAMES</B></A> |
| <A HREF="TokenProcessor.html" TARGET="_top"><B>NO FRAMES</B></A> |
| |
| <SCRIPT> |
| <!-- |
| if(window==top) { |
| document.writeln('<A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A>'); |
| } |
| //--> |
| </SCRIPT> |
| <NOSCRIPT> |
| <A HREF="../../../../allclasses-noframe.html" TARGET=""><B>All Classes</B></A> |
| </NOSCRIPT> |
| </FONT></TD> |
| </TR> |
| <TR> |
| <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> |
| SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> |
| <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> |
| DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> |
| </TR> |
| </TABLE> |
| <!-- =========== END OF NAVBAR =========== --> |
| |
| <HR> |
| Copyright © 2000-2003 - Apache Software Foundation |
| </BODY> |
| </HTML> |