Struts2中namespace和result的路径问题

自己种下的因,现在结下的过,所以从现在开始,为以后有一个好的果!

今天在配置struts2的namespace的时候,遇到了学习struts的第一个坑,所以来写一篇也是第一篇博客来给我增加记忆。

1.首先上代码:

<package name="p2" extends="struts-default" namespace="/user">
<action name="user_Add" class="priv.xxx.web.aciton.UserAction" method="userAdd">
<result name="success">WEB-INF/user/userAdd.jsp</result>
</action>
</package>

2.上述代码中看似并没有什么问题,但是在访问时会报错,报错如下: 

 3.很奇怪,为什么前面会自动加上/user呢?于是带着这个问题,我上了百度....emmmm

   原因如下:

     因为namespace是struts.xml配置文件中package标签中的属性,不仅决定了访问时URL的路径也决定了你的result访问jsp页面的路径,所以会出现以上问题。

    例子1:

<package name="p2" extends="struts-default" namespace="/">
<action name="user_Add" class="priv.xxx.web.aciton.UserAction" method="userAdd">
<result name="success">WEB-INF/user/userAdd.jsp</result>
</action>
</package>

    如上述代码来说,当你访问localhost:8080/user_add时,会在你的根目录下找,其中的action为user_Add的路径,result中的路径并不是全路径(不知全路径可自行百度),访问

    user_Add会在result加上“/”,会变成“/WEB-INF/user/userAdd.jsp”,这样是没有问题的。但是!请看接下来的情况。

    例子2:

  
<package name="p2" extends="struts-default" namespace="/user">
<action name="user_Add" class="priv.xxx.web.aciton.UserAction" method="userAdd">
<result name="success">WEB-INF/user/userAdd.jsp</result>
</action>
</package>
 
   

      当你访问时,如上所述,就会在你的result的路径前加上namespace,result为“/user/WEB-INF/user/userAdd.jsp”所以导致404。也就是最开始的问题。

  如何解决呢?

    很简单,只需要在你的result路径前面加上“/”变成全路径即可解决。如下:

    <result name="success">/WEB-INF/user/userAdd.jsp</result>

猜你喜欢

转载自www.cnblogs.com/xiaocore/p/10452066.html