设为首页 加入收藏

TOP

day04-视图和视图解析器(一)
2023-07-26 08:17:19 】 浏览:105
Tags:day04- 解析器

视图和视图解析器

1.基本介绍

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

    注意,这里的视图是一个类对象,不是一个页面!!

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

2.自定义视图

2.1为什么需要自定义视图

  1. 在默认情况下,我们都是返回默认的视图,然后返回的视图交由 SpringMVC 的 InternalResourcesViewResolver 默认视图解析器来处理的:

    image-20230206213632558
  2. 在实际开发中,因为业务需求,我们有时候需要自定义视图解析器

  3. 视图解析器可以配置多个,按照指定的顺序来对视图进行解析。如果上一个视图解析器不匹配,下一个视图解析器就会去解析视图,以此类推。

2.2应用实例

执行流程:

image-20230207171939607
  1. view.jsp,请求到 Handler

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>自定义视图测试</title>
    </head>
    <body>
    <h1>自定义视图测试</h1>
    <a href="goods/buy">点击到自定义视图</a>
    </body>
    </html>
    
  2. GoodsHandler.java

    package com.li.web.viewresolver;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * @author 李
     * @version 1.0
     */
    @RequestMapping(value = "/goods")
    @Controller
    public class GoodsHandler {
        @RequestMapping(value = "/buy")
        public String buy(){
            System.out.println("----------buy()---------");
            return "liView";//自定义视图名
        }
    }
    
  3. 自定义视图 MyView.java

    package com.li.web.viewresolver;
    
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.view.AbstractView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.Map;
    
    /**
     * @author 李
     * @version 1.0
     * 1. MyView 继承了AbstractView,就可以作为了一个视图使用
     * 2. @Component(value = "myView") ,该视图会注入到容器中,id为 liView
     */
    @Component(value = "liView")
    public class MyView extends AbstractView {
        @Override
        protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
            //1.完成视图渲染
            System.out.println("进入到自己的视图...");
    
            //2.并且确定我们要跳转的页面,如 /WEB-INF/pages/my_view.jsp
            /*
             * 1.下面就是请求转发到 /WEB-INF/pages/my_view.jsp
             * 2.该路径会被springmvc解析成 /web工程路径/WEB-INF/pages/my_view.jsp
             */
            request.getRequestDispatcher("/WEB-INF/pages/my_view.jsp")
                    .forward(request, response);
        }
    }
    
  4. 结果页面 my_view.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>my_view</title>
    </head>
    <body>
    <h1>进入到my_view页面</h1>
    <p>从自定义视图来的...</p>
    </body>
    </html>
    
  5. springDispatcherServlet-servlet.xml 配置自定义视图解析器

    <!--1.指定扫描的包-->
    <context:component-scan base-package="com.li.web"/>
    
    <!--2.配置视图解析器[默认的视图解析器]-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置属性 suffix(后缀) 和 prefix(前缀)-->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <!--3.
        3.1 配置自定义视图解析器 BeanNameViewResolver
        3.2 BeanNameViewResolver 可以解析我们自定义的视图
        3.3 属性 order 表示视图节解析器执行的顺序,值越小优先级越高
        3.4 order 的默认值为最低优先级-LOWEST_PRECEDENCE
        3.5 默认的视图解析器就是最低优先级,因此我们的自定义解析器会先执行
     -->
    <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"&g
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇3.SpringSecurity+登录功能+jwt校.. 下一篇读Java实战(第二版)笔记04_用流..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目