各位前辈你们好
我有一个有struts 2 配置文件的路径问题,请帮忙解决一下
浏览器报的错误
HTTP Status 404 - There is no Action mapped for namespace / and action name user.
这是Myeclipse中报的错误
There is no Action mapped for namespace / and action name user. - [unknown location]
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:178)
at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:619)
这是struts.xml的配置
<struts>
<package name="user" extends="struts-default" namespace="/user">
<action name="user!add" class="abc.UserAction" >
<result>/user_add_success.jsp</result>
<result name="error">/user_add_error.jsp</result>
</action>
</package>
</struts>
这是Action
public class UserAction extends ActionSupport{
private String name;

public String add(){
if(name==null||!name.equals("admin")){
this.addFieldError("name","name is error");
this.addFieldError("name","name is too long");
return ERROR;
}return SUCCESS;
}
public String getName(){
return name;
}
public void setName(String name) {
this.name = name;
}

}
这是浏览器地址栏发出的请求
http://localhost:8080/struts2-02/user!add?name=%22a%22谢谢

解决方案 »

  1.   

    <package name="user" extends="struts-default" namespace="/user">
    这里错了吧???
      

  2.   

    <package name="user" extends="struts-default" namespace="/">
    <action name ="user!*" class ="abc.UserAction" method="{1}" > 
      

  3.   

    http://localhost:8080/struts2-02/user/user!add?name=%22a%22
      

  4.   

     楼上已经说清楚了,namespace即包命名空间必须加入到请求路径
      

  5.   

    你在struts2的配置文件中的package中加了namespace=“user” 所以你写地址的时候应该在项目名后面加上/user
    如下:
    http://localhost:8080/项目名/package名称/action名称!方法
    你现在的路径想访问成功的话,应该将package中的namespace="/user"改成namespace="/"
      

  6.   

    两个改法:
    一种改前台请求路径url 
       「参考3楼」
    一种改struts.xml            <package name="user" extends="struts-default" namespace="/">
      

  7.   

    为防忘记 不要定义具体的namespace 统一用/
      

  8.   

    <package name="user" extends="struts-default" namespace="/">