配置视图解析器的prefix和suffix参数后如何指定是重定向还是转发
1.先看控制层代码
@Controller
//用于与方法的请求路径拼接
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/quick")
public String hello(){
System.out.println("hello running,,,,,");
return "hello"
}
//http://localhost:8080/user/quick
}
2.spring-mvc.xml配置
<!--配置视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--配置虚拟路径前缀 -->
<property name="prefix" value="/jsp/"></property>
<!--配置虚拟路径后缀-->
<property name="suffix" value=".jsp"></property>
<!--/jsp+ 返回路径名 +.jsp-->
</bean>
3.项目结构
4.分析
我已经配置好虚拟路径的前缀“/jsp/”,第一个'/'代表找webapp根目录
虚拟路径后缀“.jsp”
此时只需要控制层方法返回jsp文件名即可
在没有配置前后缀的情况下,可以在return语句后的字符串之前指定“forward:”或“redirect:”来指定是转发还是重定向,如下:
// return "redirect:/jsp/hello.jsp";//重定向
// return "forward:/jsp/hello.jsp";//默认是转发
但由于配置了前后缀,代码变为:
return "hello";
此时若依然在前面加“forward:”或“redirect:”,就访问不到资源
如下:
return "forward:hello";
return "redirect:hello";
5.解决方案:
无视配置好的前后缀,按照原来没指定之前,把路径写完整 如:
return "redirect:/jsp/hello.jsp";//重定向
return "forward:/jsp/hello.jsp";
6.总结
如果配置了MVC的视图解析器的前后缀,在默认情况下,return只需写要访问jsp的名字(无需写文件后缀名),且默认为转发。
此时若有部分映射的方法想使用重定向,则直接无视配置好的前后缀,return“redirect:文件位置”(文件位置处,/webapp下一级目录/文件名.后缀)