问题描述
出现问题的代码及执行信息如下三图。
Action文件:
html文件:
在Maven build... 的Goals框中输入 tomcat:run,执行。
执行信息如下:
到这里,去浏览器上输入http://localhost:8080/bos_management访问项目,能正常显示页面,但是在页面点击按钮,执行了standard_save方法后,页面显示的空白,不报错。
F12打开控制台查看信息
访问项目的时候:
standard_save.action转发执行完返回的时候:
原因是:在Action中,返回了success,那么页面就要转发(struts2的跳转类型默认是dispatcher)到standard.html。由于是在服务器端内进行的转发,相对路径发生了变化,standard.html里的引用文件,不能找到正确的文件位置。这两种时候的相对路径如上两图所示。
问题解决
方式一:
把struts2的跳转方式设置为重定向(type="redirect"),因为重定向,相当于从客户端再发送请求,不同于服务器端的内部转发,它的相对路径关系和从浏览器访问时的一置。
方式二:
把standard.html里的相对路径全部改为绝对路径
但也有两点要注意:
1、在Maven build...中运行 tomcat:run 默认执行的是tomcat6插件。而执行tomcat6插件,默认的访问路径是 http://localhost:8080/bos_management,带有项目名。那么要想正确运行,在standard.html的绝对路径上全部加上项目名。如下图。
2、先在pom文件中配置tomcat7插件,并设置访问路径<path>/</path>。再在Maven build...中运行 tomcat7:run 。而执行tomcat7插件,由于改了访问路径,那么在standard.html的绝对路径中不用加项目名。
配置tomcat7,并设置访问路径:
standard.html文件的绝对路径设置:
在Maven build... 的Goals框中输入 tomcat7:run,执行。执行信息如下,访问路径是 http://localhost:8080。
这个问题包含了 转发/重定向和相对路径的问题,以及pom配置tomcat插件的路径设置问题。
最后的解决方式是,方式二的第二点。
由此,避免相对路径的使用能少踩坑!!!