Search code examples
javastruts2action-mapping

Why welcome-file-list is not working if I remove struts2 .action extension?


I have a problem if I remove the .action extension inside my Struts2 application. I put this in my struts.xml:

<constant
    name="struts.action.extension"
    value="" />

The application works correctly except in the index page. I have in my web.xml this:

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

When I access to http://localhost/myApp/, I get the following error:

There is no Action mapped for namespace [/] and 
action name [index.jsp] associated with context path [/myApp]. 
- [unknown location]

However if I access to http://localhost/myApp/fooAction, I'm not getting any errors and works perfectly.

If I change the extension for a non empty extension (like "html"), I see the index page perfectly if I access to http://localhost/myApp/.

So then, is there something wrong in what I'm doing? Why am I getting this error when I remove extension? Is there any posible way of not getting it?

Edit: If I put an action in the <welcome-page> the error is the following:

There is no Action mapped for namespace [/] and action name [] 
associated with context path [/myApp].

Solution

  • I was having same issue in one of the application where i need to call an Action on page load in place of index.jsp or welcom.jsp in <welcome-page>.I did the following steps

    Placed the following entry in my web.xml.

     <welcome-file-list>
                <welcome-file>index</welcome-file>
    </welcome-file-list>
    

    I created an empty file with name index in my web-app folder and finally placed the following entry in my struts.xml file

    <action name="index" class="welcomeAction">
         <result>/ab.jsp</result>
     </action>
    

    So in this case when i was hitting this URL www.myapp.com/myApp,its calling index action of Struts2 and i was able to do all init work for my welcome page.