3

I am new to Struts 1, and I am trying to run a sample login web application using Struts 1, but I am unable to get the result due to the error:

javax.servlet.UnavailableException: Missing configuration resource for path /WEB-INF/struts-config.xml

I had done everything in configuring Struts 1 in Eclipse. I even don't know what the exception is?

Please, anyone help me.

The error, I am getting, is:

javax.servlet.UnavailableException: Missing configuration resource for path /WEB-INF/struts-config.xml
at org.apache.struts.action.ActionServlet.splitAndResolvePaths(ActionServlet.java:1872)
at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:683)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:356)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1213)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1026)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4421)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4734)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
at org.apache.catalina.core.StandardService.start(StandardService.java:525)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 

index.jsp:

<html> 
    <body>
        
        
        <form action="login.do">
       <tr>
       <td>Username</td> 
       <td><input type = "text" name = "username" maxlength = "25"></td>
       </tr>
       <tr>
       <td>Password</td>
       <td><input type = "password" name = "password" minlength = "8" maxlength = "16"></td>
       </tr>
       
       <tr>
       <td  colspan = "2" align = "center"><button type = "submit" name = "submit">Submit</button>
       <button type = "reset"   name = "reset">Reset</button></td>
       
       </tr>
       
              
        </form>
    </body>
</html>

LoginForm.java:

package com.sample.com;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionForward;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

public class LoginAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res)
    {
        System.out.println("test");

    LoginForm login = (LoginForm)form;

    String uname=login.getUname();

    String pass=login.getPass();

    if(uname=="admin" && pass =="test")
    {
    return mapping.findForward("success");

    }
    else
    {
    return mapping.findForward("failure");

    }
  }
}

LoginAction.java:

package com.sample.com;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.Action;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ActionForward;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;



public class LoginAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res)
    {

        System.out.println("test");

    LoginForm login = (LoginForm)form;

    String uname=login.getUname();

    String pass=login.getPass();

    if(uname=="admin" && pass =="test")
    {
    return mapping.findForward("success");
    }
    else
    {
    return mapping.findForward("failure");

    }

  }


}

config-struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
 

 
<struts-config>
 
    <form-beans>
        <form-bean name="loginRequest" type="com.sample.com.LoginForm"/>
    </form-beans> 
 
    <global-forwards>
        <forward name="success"  path="/success.jsp"/>
    </global-forwards>
 
    <action-mappings>
        <action path="/login" type="com.sample.com.LoginAction" name="loginRequest">
            <forward name="success" path="/success.jsp"/>
            <forward name="failure" path="/failure.jsp"/>        
        </action>
    </action-mappings>
 
</struts-config>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>2</param-value>
        </init-param>
        <init-param>
            <param-name>detail</param-name>
            <param-value>2</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>
2
  • Please share your package structure. Commented Nov 9, 2013 at 11:08
  • Did you EVER get any solution for this error? Commented Dec 4, 2013 at 20:14

4 Answers 4

2

Make sure struts-config.xml resides in WEB-INF folder. Similarly, hibernate.cfg.xml should also be at the appropriate place(if you are using it).

Sign up to request clarification or add additional context in comments.

Comments

1

You are configured the web application to use struts-config.xml

<init-param>
    <param-name>config</param-name>
    <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>

but there's not the file with such name in the specified folder. Make sure the file exist there or if you use another name for the struts configuration file you could change this init param value to reflect the file availability. If you have several configuration files each for the module, you could use a comma to separate names.

Comments

1

You need to add the servlet-api.jar from the apache lib folder. You need to include the struts.xml folder in src folder under java resources.

Comments

0

1) You have mentioned your struts.xml filename as config-struts.xml but in the init-param you wrote as struts-config.xml. Please check the names properly.

2) Or maybe (common issue) because you are missing the DTD tag in your struts xml file. Try to add this code above the <struts-config> tag in your struts-config.xml.

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd">

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.