注意:在SpringMVC配置文件中要能够扫描到视图所在的包(context:component-scan)。

自定义视图要实现view接口或继承AbstractView抽象类,并加入到IOC容器中(注意:定义的视图类要声明注解@Component

package com.hello.view;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Date;
import java.util.Map;

@Component
public class HelloView implements View {
    @Override
    public String getContentType() {
        return "text/html";
    }

    @Override
    public void render(Map<String, ?> map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        httpServletResponse.getWriter().print(new Date());
    }
}

进行springmvc配置文件的配置并设置视图优先级

    <!--配置视图BeanNameViewResolver解析器:使用视图的名字来解析视图-->
    <!--通过order属性来定义视图解析器的优先级,order值越小,优先级越高-->
    <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver">
        <property name="order" value="100"></property>
    </bean>

注意:order的值越小优先级越高,当有多个视图解析器时,先通过优先级高的视图解析器来解析,如果不行,再由优先级低的视图解析器去解析。

在控制层添加目标方法

package com.helloworld;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("TestHelloWorldView")
public class TestHelloWorldView {

    @RequestMapping("helloView")
    public String testView(){
        System.out.println("testView");
        return "helloView";
    }
}

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: 23369
  Date: 2019/3/24
  Time: 18:29
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=gbk" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>

  <a href="TestHelloWorldView/helloView">TestHelloWorldView</a>
  
  </body>
</html>