各位,今天我按照北京圣思园张龙老师的Struts2视频教程,有关于命struts.xml名空间的配置和应用;具体要求如下:
1、前台页面:input.jsp、output.jsp(位于webroot下的thenamespace文件夹下);
2、单击input.jsp页面上的"提交"按钮,发出请求:namespaceAction.action;
3、服务器接受请求跳转到output.jsp;
    我配置了struts.xml的命名空间namespace如下:
struts.xml的配置:
 
      <package name="hello"  extends="struts-default" namespace="/thenamespace">
  <action name="namespaceAction" class="com.zxp.test1.NameSpaceAction">
  <result name="success">output.jsp</result>
  </action>
 </package>前台页面input.jsp的表单是<form action="namespaceAction.action">
     <input type="submit" value="提交"/>
</form>   我总觉得配置文件没有写错,不过就是运行后单击input.jsp上的“提交”按钮,提示404,找不到相对应的Action.我看了浏览器的请求地址是:http://127.0.0.1:8080/struts2/namespaceAction.action?
问题就在这里,每次请求地址应该是:http://127.0.0.1:8080/struts2/thenamespace/namespaceAction.action?
    因此我修改了form表单的action为:thenamespace/namespaceAction.action;单击提交之后,output.jsp页面显示出来了。
     但我发现视频教程里form的action="namespaceAction.action"居然可以,而我的怎么试总是不可以。这就郁闷了。我究竟是哪里做错了?
   以下是报错信息:
strutsnamespace

解决方案 »

  1.   

    这是你form标签路径配置的问题。
    比较安全的配置
    <form action="${pageContext.request.contextPath}/thenamespace/namespaceAction.action" method="post">
    action的访问路径:http://127.0.0.1:8080/struts2/thenamespace/namespaceAction.action
    所以action的值也是这个。
    如果你的<form> 的action 值为/namespaceAction.action,则访问路径为
    http://127.0.0.1:8080/struts2/namespaceAction.action。所以要把<package name="hello"  extends="struts-default" namespace="/thenamespace">中的namespace改为namespace="/"就行了
      

  2.   

    你说的那种安全配置是可以,不过教程上说明,<form> 的action 值为/namespaceAction.action时,发出请求的页面是在webroot/thenamespace目录下,那请求会映射到struts.xml中对应命名空间namespace为“thenamespace”的action(name="namespaceAction").而且返回的页面output.jsp也会在相对应的命名空间namespace下找!