<struts>
   <constant name="struts.devMode" value="true" />
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <package name="default" extends="struts-default">
        <action name="login" class="com.test.web.LoginAction">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>
------------
 <form action="login!userlogin.action" method="post">
     username:<input type="text" name="username"><bt>
     password:<input type="password" name="password"><br>
     <input type="submit" value="提交">
    </form>
--------------
private String username;
private String password;

public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String userlogin() throws Exception {
if(this.username.equals("admin")&&this.password.equals("admin")){
return "success";
}
else{
return "error";
}
}
---------------
HTTP Status 404 - /struts2/login!userlogin.action
---------------------
说明:不使用通配符和action中配置method的方法

解决方案 »

  1.   


    <package name="default" extends="struts-default" namespace="/">
    <form action="/login!userlogin.action" method="post">
      

  2.   

    !在此的意思为寻找相应的action中的方法的意思~~~~
    代码没什么问题
    问题可能出现在你的web.xml中
    你的路径的配置
    web.xml找不到你的login
      

  3.   

    尽量不要使用动态方法调用!  实现动态方法调用在Struts2中用*通配符解决.!
    Struts2官方documents是这样说的.!
    而且动态方法调用有个弊端,把你Action的方法名暴露给外界了.!
    还有,每个Action方法都应该有自己相应的视图配置,动态方法调用的话, 那就是多个Action公用一套视图方案, 你觉得这样能合理吗.?
      

  4.   

    表单的ACTION改成
    default/login.action
      

  5.   

    谢谢 各位 热心帮助  问题解决了  是web.xml配置有问题  分大家都有
      

  6.   

    2L的namespace属性可以不写,默认为"", 即为默认包, 在找不到访问模块路径的时候还会去默认包的.!所以5L的就完全对Struts2了解的, package的name属性,除了给别个包extends以外,没用任何作用,模块访问路径是namespace的事