SpringMVC中转发和重定向

在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">-->
<!--        &lt;!&ndash;        前缀匹配&ndash;&gt;-->
<!--        <property name="prefix" value="/WEB-INF/jsp/"/>-->
<!--        &lt;!&ndash;        后缀匹配&ndash;&gt;-->
<!--        <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";
    }
}

发布了376 篇原创文章 · 获赞 242 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/HeZhiYing_/article/details/103995524
今日推荐