视图和视图解析器

文章介绍了在SpringMVC框架中如何自定义视图以及视图解析器,通过配置BeanNameViewResolver以处理自定义视图。示例展示了如何创建自定义视图类MyView,扩展AbstractView并实现渲染逻辑,以及如何在控制器中返回自定义视图的名称。此外,还提到了目标方法直接指定重定向或请求转发的情况。
摘要由CSDN通过智能技术生成

SpringMVC–视图和视图解析器

基本介绍

  1. 在springMVC 中的目标方法最终返回都是一个视图(有各种视图)。

  2. 返回的视图都会由一个视图解析器来处理(视图解析器有很多种)。

自定义视图

为什么需要自定义视图

​ 在默认情况下,我们都是返回默认的视图, 然后这个返回的视图交由SpringMVC 的InternalResourceViewResolver 视图处理器来处理的。

在实际开发中,我们有时需要自定义视图,这样可以满足更多更复杂的需求。

自定义视图实例-代码实现

配置springDispatcherServlet-servlet.xml , 增加自定义视图解析器

<!--
    1. 配置可以解析自定义的视图的解析器
    2. BeanNameViewResolver 这个就是可以解析自定义视图的解析器
    3. name="order" :表示给这个解析器设置优先级, 默认优先级很低值Integer.MAX_VALUE
    4. 一般来说明,我们自己的视图解析优先级高,Order 值越小,优先级越高
-->
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
	<property name="order" value="99"></property>
</bean>

创建springmvc\src\com\web\viewresolver\MyView.java -自定义视图类

/**
 * 1. MyView继承了AbstractView, 就可以作为一个视图使用
 * 2. @Component(value = "myView"),该视图会注入到容器中, 名字/id是 myView
 */
@Component(value = "myView")
public class MyView extends AbstractView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> model,
                                           HttpServletRequest request,
                                           HttpServletResponse response) throws Exception {
        //完成视图渲染
        //并且可以确定我们要跳转的页面 [请求转发] /WEB-INF/pages/my_view.jsp
        System.out.println("进入到自己的视图..");

        //1. 下面就是进行请求转发到 /WEB-INF/pages/my_view.jsp
        //2. /WEB-INF/pages/my_view.jsp 会被springmvc解析  /springmvc/WEB-INF/pages/my_view.jsp
        request.getRequestDispatcher("/WEB-INF/pages/my_view.jsp")   .forward(request, response);

    }
}

创建springmvc\src\com\web\viewresolver\GoodsHandler.java

@RequestMapping("/goods")
@Controller
public class GoodsHandler {
    @RequestMapping(value = "/buy")
    public String buy() {
        System.out.println("------buy()-----");
        return "myView";
    }
}

创建springmvc\web\view.jsp 和/WEB-INF/pages/my_view.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
    <title>view</title>
    </head>
    <body>
            <h2>测试自定义视图</h2>
            <a href="goods/buy">测试自定义视图</a><br/>
    </body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <head>
    <title>Title</title>
    </head>
    <body>
            <h1>从自己的视图过来的</h1>
            <hr/>
            welcome! 
    </body>
</html>

自定义视图工作流程小结

自定义视图-小结
  1. 自定义视图: 创建一个View 的bean, 该bean 需要继承自AbstractView, 并实现renderMergedOutputModel 方法。

  2. 并把自定义View 加入到IOC 容器中。

  3. 自定义视图的视图处理器,使用BeanNameViewResolver, 这个视图处理器也需要配置到ioc 容器。

  4. BeanNameViewResolver 的调用优先级需要设置一下,设置order 比Integer.MAX_VAL小的值,

以确保其在InternalResourceViewResolver 之前被调用。

自定义视图-工作流程
  1. SpringMVC 调用目标方法, 返回自定义View 在IOC 容器中的id。

  2. SpringMVC 调用BeanNameViewResolver 解析视图: 从IOC 容器中获取返回id 值对应的bean, 即自定义的View 的对象。

  3. SpringMVC 调用自定义视图的renderMergedOutputModel 方法渲染视图。

  4. 如果在SpringMVC 调用目标方法, 返回自定义View 在IOC 容器中的id不存在, 则仍然按照默认的视图处理器机制处理。

目标方法直接指定转发或重定向

使用实例

目标方法中指定转发或者重定向。

  1. 默认返回的方式是请求转发,然后用视图处理器进行处理,比如在目标方法中这样写:

      @PostMapping(value = "/buy")
        public String buy() {
            System.out.println("购买商品~");
            return "success";
        }
    
  2. 也可以在目标方法直接指定重定向或转发的url 地址

  3. 如果指定重定向,不能定向到/WEB-INF 目录中

应用实例-代码实现

修改GoodsHandler.java, 增加方法order()

// 在目标方法直接指定重定向&请求转发
@RequestMapping(value = "/order")
public String order() {
    System.out.println("=======order()=====");
    //这里直接指定转发到哪个页面
    //return "forward:/WEB-INF/pages/my_view.jsp";
    //重定向, 如果是重定向,就不能重定向到/WEB-INF 目录中
    return "redirect:/login.jsp";
}

修改view.jsp,

<h2>测试自定义视图</h2>
<a href="goods/buy">测试自定义视图</a><br/>
<a href="goods/order">测试目标方法直接指定重定向&请求转发</a><br/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring Boot视图解析器是在Spring Boot应用程序中用于解析和渲染视图的组件。它可以将控制器返回的数据与预定义的视图模板结合,生成HTML、JSON、XML等响应。 Spring Boot提供了默认的视图解析器配置,可以自动处理视图的解析和渲染。默认情况下,Spring Boot使用Thymeleaf作为视图模板引擎,但也可以根据需要选择其他视图模板引擎,如FreeMarker、JSP等。 视图解析器的配置通常在application.properties或application.yml文件中完成。例如,可以使用以下配置将Thymeleaf作为默认视图解析器: ``` spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html ``` 在控制器中,可以使用方法返回值指定要渲染的视图。例如,以下示例将返回名为"index.html"的视图: ```java @Controller public class HomeController { @GetMapping("/") public String home(Model model) { model.addAttribute("message", "Hello, World!"); return "index"; } } ``` 视图解析器将自动查找位于"/templates"目录下的"index.html"文件,并将模型中的数据渲染到视图中。渲染后的HTML将作为响应发送给客户端。 除了渲染HTML视图外,视图解析器还可以处理其他类型的视图。例如,可以使用@ResponseBody注解将控制器方法返回的数据直接作为JSON响应发送给客户端。 总之,Spring Boot视图解析器是用于解析和渲染视图的组件,可以根据配置自动处理视图的解析和渲染。它提供了灵活的配置选项,可以使用不同的视图模板引擎进行视图的渲染。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晨犀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值