对于使用了 struts2 的?convention 插件进行开发时,我们知道可以通过以下的配置项来约定所有的 Result 视图的路径:
class="xml"><constant name="struts.convention.result.path" value="/WEB-INF/content/"/>
?上面的value就是?convention 插件 中的默认值,当然,我们可以改成任意我们想要的值。
这样的话,当我们声明以下的@Result时:
@Result(name = "success", location = "my-upload.jsp")
?系统就会试着去访问如下的文件:
/WEB-INF/content/my-upload.jsp
?如果存在,那就OK,不然就会报404的错误。
?
对于result path,我也可以使用@ResultPath进行个别定制,如:
@Results(@Result(name = "success", location = "my-upload.jsp")) @ResultPath("/jsp") public class File2Action { public String upload() { System.out.println("uploading files..."); return "success"; } }
?这样一来,虽然“struts.convention.result.path”的值为“/WEB-INF/content/”,但是我们这边使用了@ResultPath 注解对其进行了覆盖,所以,这边实际访问的页面为:
/jsp/my-upload.jsp
?
不过,有一点,我们需要特别注意:
上面的
location = "my-upload.jsp"
?中,“my-upload.jsp” 没有以 “/” 开头,所以,也就是说它是一个相对路径,这样,它才会基于@ResultPath中的路径去找相应的文件。
如果,我们将其修改成如下:
location = "/my-upload.jsp"
?即,让“my-upload.jsp”以"/"开头,这时候,它就是一个绝对路径,这个时候,它不是会基于@ResultPath中的路径去搜索相关的文件的,而是直接基于web工程的根路径去搜索相关文件。
也就是说,假设你的web工程的名字就 test,那么此时它访问的页面为:
http://xxx.xxx.xxx.xxx:port/test/my-upload.jsp
?