欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Struts2中namespace和result的路径问题

程序员文章站 2022-06-28 13:52:59
自己种下的因,现在结下的过,所以从现在开始,为以后有一个好的果! 今天在配置struts2的namespace的时候,遇到了学习struts的第一个坑,所以来写一篇也是第一篇博客来给我增加记忆。 1.首先上代码: 2.上述代码中看似并没有什么问题,但是在访问时会报错,报错如下: 3.很奇怪,为什么前 ......

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

 

今天在配置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.上述代码中看似并没有什么问题,但是在访问时会报错,报错如下: Struts2中namespace和result的路径问题

 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>