Thanks for your response Pawel, I am still having problems, so I have included a sample setup. I am using Eclipse and GlassFish v3. The files in my WAR are:
/images/logo.gif /META-INF/MANIFEST.MF /WEB-INF/classes/com/example/ actions/MainSite.class /WEB-INF/classes/struts.xml /WEB-INF/lib/commons-logging-1.1.jar /WEB-INF/lib/freemarker-2.3.8.jar /WEB-INF/lib/ognl-2.6.11.jar /WEB-INF/lib/struts2-core-2.0.11.jar /WEB-INF/lib/xwork-2.0.4.jar /WEB-INF/sun-web.xml /WEB-INF/web.xml the contents of the four important files are: web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=" http://java.sun.com/xml/ns/javaee" xmlns:web=" http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Example</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> <init-param> <param-name>actionPackages</param-name> <param-value>com.example.actions</param-value> </init-param> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app> struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > <struts> <constant name="struts.devMode" value="true"/> <constant name="struts.action.extension" value="action"/> <package name="default" extends="struts-default"> <action name="example" class="com.example.actions.MainSite"> <result name="SUCCESS">/MainSite.jsp</result> </action> </package> </struts> MainSite.java: package com.example.actions; public class MainSite { private String msg; public String execute() { setMsg( "Fred was here"); return( "SUCCESS"); } public String getMsg() { return msg; } public void setMsg( String msg) { this.msg = msg; } } MainSite.jsp: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Insert title here</title> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> </head> <body> <img src="images/logo.gif"/> <br/> The Message is: <s:property value="msg"/> </body> </html> and the results are: http://localhost:8080/Example/example.action <<logo>> The Message is: Fred was here http://localhost:8080/Example/example 404 http://localhost:8080/Example 404 http://localhost:8080/Example/images/logo.gif <<logo>> This works as expected! So, I change the struts.xml file action name to star: <action name="*" class="com.example.actions.MainSite"> and ran again, and I get the same results, except I can also go to asdf.action, foobar.action and get the same results as example.action So, I change action name back to "example" and change extension to "" <constant name="struts.action.extension" value=""/> .... <action name="example" class="com.example.actions.MainSite"> and the results are: http://localhost:8080/Example/example.action Struts Problem Report Struts has detected an unhandled exception: Messages: * There is no Action mapped for namespace / and action name example.action .... http://localhost:8080/Example/example The Message is: Fred was here http://localhost:8080/Example Struts Problem Report Struts has detected an unhandled exception: Messages: * There is no Action mapped for namespace / and action name . .... http://localhost:8080/Example/images/logo.gif Struts Problem Report Struts has detected an unhandled exception: Messages: * There is no Action mapped for namespace / and action name logo.gif. .... Please notice that the logo does not show up on Example/example nor in Example/images/logo.gif and finally, I change both lines in the struts.xml file: <constant name="struts.action.extension" value=""/> <action name="*" class="com.example.actions.MainSite"> http://localhost:8080/Example/example.action The Message is: Fred was here http://localhost:8080/Example/example The Message is: Fred was here http://localhost:8080/Example The Message is: Fred was here http://localhost:8080/Example/images/logo.gif The Message is: Fred was here Please notice that the logo does not show up in any page I believe I have done a thorough job in testing this. My conclusion is that empty extension does not work as required as it blocks all requests for files. Instead, it calls the action. This is kinda expected, as I am telling it to process all files by calling the MainSite action. However, I need it to process regular files, such as the logo.gif and css files, etc. As a side note, I also tested /Example/images and got the unhandled exception error Phil