在SpringMVC中正常的页面转发是通过视图解析器的,视图解析器对view的名字进行拼接,加上前缀和后缀
<!-- 视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀匹配-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀匹配-->
<property name="suffix" value=".jsp"/>
</bean>
对应的Controller类
@Controller
public class ControllerTest3 {
@RequestMapping("/hello1")
public String test1(Model model) {
model.addAttribute("msg", "Test1");
return "test";
}
}
下面我们来演示通过SpringMVC实现页面的转发和重定向,而不用视图解析器,这里给出修改过的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 自动扫描指定的包,该包下面的所有注解类交给IoC容器管理-->
<context:component-scan base-package="com.zhiying.controller"/>
<!-- 视图解析器-->
<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
<!-- <!– 前缀匹配–>-->
<!-- <property name="prefix" value="/WEB-INF/jsp/"/>-->
<!-- <!– 后缀匹配–>-->
<!-- <property name="suffix" value=".jsp"/>-->
<!-- </bean>-->
<!-- <bean id="/hello" class="com.zhiying.controller.ControllerTest1"/>-->
</beans>
来一个Controller控制器类
package com.zhiying.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ResultSpringMVC {
@RequestMapping("/t1")
public String test1(Model model) {
//转发(默认的)
model.addAttribute("msg","test1");
return "/WEB-INF/jsp/test.jsp";
}
@RequestMapping("/t2")
public String test2(Model model) {
//转发 (forward)
model.addAttribute("msg","test2");
return "forward:/WEB-INF/jsp/test.jsp";
}
@RequestMapping("/t3")
public String test3(Model model) {
//重定向 (redirect)
model.addAttribute("msg","test3");
return "redirect:/index.jsp";
}
}
还有一个web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置DispatchServlet,其本质是一个Servlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
最后是jsp文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${msg}
</body>
</html>
这样可以得到
如果我们加上视图解析器,那么转发只需要return要转发的名字即可,如果要重定向,则需要写上redirect:+要转发的全路径
这里我们在web下建一个aa的包,该包下写一个aa.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
hello
</body>
</html>
然后把Controller类改为如下,即是在有视图解析器的情况下
package com.zhiying.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ResultSpringMVC {
@RequestMapping("/t1")
public String test1(Model model) {
//转发(默认的)
model.addAttribute("msg","test1");
return "test";
}
@RequestMapping("/t2")
public String test2(Model model) {
//重定向 (redirect)
model.addAttribute("msg","test3");
return "redirect:aa/aa.jsp";
}
}