• 3. SpringMVC 组件解析


    什么是视图解析器?  先来复习一下吧:

    View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即 具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。

    SpringMVC有默认组件配置,视图解析器默认组件都是DispatcherServlet.properties配置文件中配置的,该配置文件地址 org/springframework/web/servlet/DispatcherServlet.properties,该文件中配置了默认的视图解析器,

    我们可以在IDEA的lib下去找 然后找到 spring-webmvc-5.0.5.RELEASE.jar 包下的org/springframework/web/servlet/DispatcherServlet.properties ,然后我们直接打开,发现里面有很多我们前面介绍过的解析器,我们这篇文章讲解的是视图解析器:

    找到

    org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

    一般在倒数第二行 我们跟踪InternalResourceViewResolver进去:

    然后可以看到这个类继承了UrlBasedViewResolver类,然后我们在跟踪进去:

    发现这两行代码

    public static final String REDIRECT_URL_PREFIX = "redirect:";
    public static final String FORWARD_URL_PREFIX = "forward:";

    其实呢 这个就是他定义的常量 我用我五毛钱英语可以读出 

    分别是: 重定向 - url - 前缀  和  转发 - url - 前缀

    所以我可以知道 这就是 控制器返回那个字符串的方式! 默认是第二个 转发,所以他隐藏了而已,

    所以我们可以去哪里添加 去改变他的方式:

    package com.bihu.Controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @Controller
    @RequestMapping(value = {"/aaa"})
    public class TestController {
    
        @RequestMapping(value = "/go",method = RequestMethod.GET)
        public String GoUrl(){
            System.out.println("您成功访问了 根目录/aaa/go 网页!");
            return "redirect:/s1.jsp";
     
    } }

    嗯 果然是这样 现在网页不转发了 是直接重定向了【网址变了】

    所以 就是说 这个东西默认是 转发 然后你完全可以添加这个进去实现重定向。

    还有就是:

    我们一般开发 如果视图是 jsp 那么我们一般都把 这个jsp 在webapp这个包下 创建一个文件夹存 jsp ,所以你在控制器返回的网址也是要变的【视图解析器】:

     例如这是我的结构图,那么我就要这要返回:

    return "/jsp/s1.jsp";

    所以如果你觉得麻烦 注意啊 是如果觉得麻烦,你完全可以返回一个 s1 其他的让 Spring帮你配【Spring-MVC 容器中 配置依赖注入】:

    注意: 我觉得不要配最好,因为听错报错率挺高 因为 转发 和 重定向的问题??  还有就是 多层目录 、 不同目录

    怎么配?

    首先我们得知道原理:

    还是这个类:

    UrlBasedViewResolver

     它里面有两个变量叫:

    private String prefix = "";
    private String suffix = "";

    五毛钱并夕夕翻译的我:

    prefix = ""; --视图名称前缀 

    suffix = ""; --视图名称后缀

    所以呢,就是: 

    return "/jsp/s1.jsp";
    /webapp/jsp/ : prefix   为什么是/webapp/jsp/ ?  因为如果你改变人家的父路劲 那么就得重写! 写完整 不然找不到
    .jsp : suffix 

     所以呢 你会发现他都有set 和 get 方法 ,那么你就可以在spring-mvc 容器上注入一下即可了!!!!

    spring-mvc.xml : [重要!]

    <?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"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--  这个是配置注解扫描器的  -->
        <context:component-scan base-package="com.bihu"/>
    
    <!--  下面注入prefix 和 suffix 原本是 = “”【空】 的  -->
    <!--  注意: class 地址一定别写错 是 org.springframework.web.servlet.view.InternalResourceViewResolver 报错这里吃过亏! -->
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!--    下面的 prefix 和 suffix 谁前谁后要分清    -->
            <property name="prefix" value="/jsp/"></property>
            <property name="suffix" value=".jsp"></property>
        </bean>
    </beans>

    一般都不这样弄 因为弊端貌似挺多的,这里解析一下原理吧

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14942476.html

  • 相关阅读:
    如何将一个用utf-8编码的文本用java程序转换成ANSI编码的文本
    【笔记】Nginx热更新相关知识
    网站性能测试工具 webbench 的安装和使用
    Windows 7环境下网站性能测试小工具 Apache Bench 和 Webbench使用和下载
    【笔记】Rancher2.1容器云平台新特性
    MinTTY终端模拟器要点
    CEBX格式的文档如何转换为PDF格式文档、DOCX文档?
    Rancher2.0与DataDog集成部署
    使用Docker方式创建3节点的Etcd集群
    NTP服务器时间同步
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14942476.html
Copyright © 2020-2023  润新知