| <?xml version="1.0"?> |
| <document url="./installation-was352.xml"> |
| |
| <properties> |
| <author>dIon Gillard</author> |
| <title>The Struts Framework Project - Installation - WebSphere 3.5.2</title> |
| </properties> |
| |
| <body> |
| |
| <section name="Installing Struts with your servlet container" href="Containers"> |
| |
| <h3><a name="was352">WebSphere Application Server 3.5 FixPack 2</a></h3> |
| |
| <ul> |
| <li>In the steps below, <code>$WAS_HOME</code> refers to the directory in which you |
| have installed WebSphere Application Server, and <code>$STRUTS_HOME</code> is the |
| directory in which you unpacked the Struts binary distribution.</li> |
| |
| <li>WebSphere before 3.5.2 did not support JSP 1.1 and Servlet 2.2, which |
| made it difficult to get Struts functioning without massive code changes. |
| Please upgrade to 3.5.2 (3.5 with FixPack 2) before attempting to use |
| Struts. See <a href="http://www.ibm.com/software/webservers/appserv/efix.html">http://www.ibm.com/software/webservers/appserv/efix.html</a> |
| for download and install instructions on FixPack 2 for WebSphere 3.5</li> |
| |
| <li>Warning: Struts will not work with WebSphere 3.5.2 out of the box. Fixes |
| expected to be in WebSphere 3.5.3 (not released at time of writing) should |
| correct this. However, you can successfully get WebSphere 3.5.2 working |
| with Struts.</li> |
| |
| <li>Make sure the WebSphere Application Server is started. Under Windows |
| NT/2000, it's the "IBM WS AdminServer" service.</li> |
| |
| <li>Start the WebSphere Administrative Console.</li> |
| |
| <li>Once it's started, select "Convert a War File" from the tasks toolbar |
| option, or from the Console->Tasks menu. This will cause a "Convert War |
| File" Wizard dialog to appear.</li> |
| |
| <li>Select a Servlet Engine to host the web application that will result |
| from converting the War file, e.g. "Default Servlet Engine", by expanding |
| the tree control under Nodes. Press the Next button.</li> |
| |
| <li>Select a Virtual Host to associate the resulting web application with, |
| e.g. "default host". Press the Next button.</li> |
| |
| <li>Press the Browse button and choose the |
| <code>$STRUTS_HOME/webapps/struts-example.war</code>. Press the Next button</li> |
| |
| <li>Select a destination directory for the resulting web application, e.g. |
| <code>$WAS_HOME/hosts/default_host</code>. Press the Next button</li> |
| |
| <li>Enter a "Web Application Web Path", e.g. struts-example, and a "Web |
| Application Name", e.g. struts-example. Press the Finish button.</li> |
| |
| <li>You should, after a lengthy pause, get a message box with the text |
| Command "convert war file" completed successfully. Press Ok.</li> |
| |
| <li>You now need to add jaxp.jar and a jaxp compatible parser, e.g. |
| parser.jar from JAXP 1.0.1 to the struts-example web application's |
| servlets directory, e.g. |
| <code>$WAS_HOME/AppServer/hosts/default_host/struts-example/servlets</code></li> |
| |
| <li>At this point, if WAS 3.5.2 correctly implemented Servlet 2.2, all |
| would be fine. However, WAS 3.5.2 returns null for calls to |
| <code>ServletContext.getResource(String)</code> or |
| <code>ServletContext.getResourceAsStream(String)</code>. This manifests itself as an |
| exception in the application server stdout log, e.g. |
| <code>default_server_stdout.log.</code></li> |
| |
| <li>Warning: Don't be fooled by the fact that the web application starts |
| successfully from the Admin Console. It actually doesn't. The Admin |
| Console is lying. If you try to access the webapp |
| e.g. <code>http://localhost/struts-example/</code> it will fail.</li> |
| |
| <li>At this point, you need to patch the Struts source. There are three |
| places <code>getResourceAsStream</code> is called:</li></ul> |
| <pre> |
| ResourceTag.doStartTag() |
| ActionServlet.initMapping() |
| PropertyMessageResources.loadLocale(String) |
| </pre> |
| <p>of these, <code>ActionServlet</code> is the most important.</p> |
| |
| <ul><li>Change the source from</li></ul> |
| <pre> |
| // Acquire an input stream to our configuration resource |
| InputStream input = getServletContext().getResourceAsStream(config); |
| </pre> |
| <p>to</p> |
| <pre> |
| // Acquire an input stream to our configuration resource |
| InputStream input = new |
| java.io.FileInputStream(getServletContext().getRealPath(config)); |
| </pre> |
| <ul><li> Make similar changes to the other classes if necessary.</li> |
| |
| <li>Recompile ActionServlet and copy the <code>.class</code> file to <br/> |
| |
| <code>$WAS_HOME/AppServer/hosts/default_host/struts-example/servlets/<br/> |
| org/apache/struts/action/ActionServlet.class</code></li> |
| |
| <li>Another bug with WAS 3.5.2's classloaders is that Class.getResource() |
| wont load a resource from a jar, so you must copy<br/> |
| <code>$STRUTS_HOME/lib/struts-config_1_0.dtd</code> <br/> |
| to <br/> |
| <code>$WAS_HOME/AppServer/hosts/default_host/struts-example/servlets/org/apache/struts/resources/struts-config_1_0.dtd</code><br/> |
| or be connected to the Internet to fetch the dtd from the jakarta web site.</li> |
| |
| <li>Start your webapp in the Admin Console</li> |
| |
| <li>Test the example application by loading the following URL in your |
| browser of choice: <a href="http://localhost/struts-example/">http://localhost/struts-example/" >http://localhost/struts-example/</a></li> |
| </ul> |
| <hr/> |
| <ul><li>Author: dIon Gillard</li></ul> |
| <hr/> |
| <p>Back to <a href="installation.html#Containers">Installation</a></p> |
| </section> |
| </body> |
| </document> |