zoukankan      html  css  js  c++  java
  • SpringMVC与SpringBoot返回静态页面遇到的问题

    1、SpringMVC静态页面响应

     1 package com.sv.controller;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.PathVariable;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 /**
     7  * 页面展示
     8  * @author jixh
     9  *
    10  */
    11 @Controller
    12 public class PageController {
    13 
    14     /**
    15      * 展示首页
    16      * @return
    17      */
    18     @RequestMapping(value="/")
    19     public String indexShow() {
    20         return "index";
    21     }
    22     
    23     /**
    24      * 展示其他页面,每一个页面请求都要写一个对应的页面返回处理,这样太过麻烦,进行简化
    25      * 方法:正如所见,将请求的URL和处理函数返回的URL写成一样的,这样一来就可以使用
    26      * Restfaull的URL模板映射,直接将请求的URL作为返回的URL,    如此就可公用了
    27      * 如果参数名称和表达式名称不一致时,加参数(@PathVariable(value="page") String page3)
    28      * 
    29      */
    30     @RequestMapping(value="/{page}")
    31     public String pageShow(@PathVariable String page) {
    32         return page;
    33     }
    34 }

    2、SpringBoot的视图控制器实现静态页面响应

            如上面SpringMVC响应静态页面的方法,在SpringBoot提供了专门的视图控制器,只需要实现WebMvcConfigurer接口,重写其addViewControllers方法就可以进行配置,原理只是简单的重定向,但是在使用过程中遇到报404的问题,多次尝试,发现有个小坑,记录一下。

    原因如下:

            SpringBoot有很多的默认。就resources目录而言,在不配置静态资源目录的情况下,默认static目录中存公开的静态资源,而templates目录中存放模板文件。这里就有个问题,如果一个test.html文件中不涉及数据填充,只当作静态页面时,感觉放在两个目录中都可以,只是是否公开的区别而已?然而却不是这样,,,

            在不引入Freemarker或Thymeleaf的jar包时,如果按照上面的方法,将test.html文件放在templates下时是不起作用的,表示找不到该文件(404),此时templates模板文件目录不起作用。必须放在static下才能被controller方法返回。使用模板引擎后,放在任意目录中都可以。

    目录结构如下:

    视图控制器配置类如下:

     1 package com.huawei.myconfig;
     2 
     3 import org.springframework.context.annotation.Configuration;
     4 import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
     5 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
     6 @Configuration//标志当前类在启动的时候会被加载
     7 public class MyConfiguration implements WebMvcConfigurer {
     8     //视图控制器配置
     9     @Override
    10     public void addViewControllers(ViewControllerRegistry registry) {
    11         //urlPath:浏览器输入的地址  viewName:该地址跳转到的页面,不加templates文件夹和.html
    12         //registry.addViewController("/left").setViewName("left");错误的写法
    13         registry.addViewController("/login").setViewName("left.html");
    14     }
    15     
    16 }

    还有一件事:这种视图返回方法的urlPath和viewName不能相同,否则会报500异常(

    There was an unexpected error (type=Internal Server Error, status=500).

    Circular view path [left]: would dispatch back to the current handler URL [/left] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

    ),

    使用模板引擎时可以省略后缀名.html等,但返回静态资源时则不能省略,就像请求.css,.js文件一样。

    controller类如下

     1 package com.huawei.test;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.RequestMapping;
     5 import org.springframework.web.bind.annotation.ResponseBody;
     6 
     7 @Controller
     8 public class Test {
     9     @RequestMapping("/")
    10     @ResponseBody
    11     public String hello(){
    12         return "hello Spring boot";
    13     }
    14 
    15     @RequestMapping("/test")
    16     @ResponseBody
    17     public String test(){
    18         return "举杯邀明月,对影成三人";
    19     }
    20 
    21     @RequestMapping("/page")
    22     public String left(){
    23         return "left.html";
    24     }
    25 }

    如要转载,请注明出处。

  • 相关阅读:
    koa2学习(二) 中间件router
    行内元素与块级函数的三个区别
    Mobile Matrices
    jquery中attr()与prop()函数用法实例详解(附用法区别)
    jquery 鼠标右键事件、左键单击事件判定
    JS回调函数(callback)
    js关闭当前页面 (窗口)的几种方式总结
    em(倍)与px的区别
    jQuery学习笔记
    通过JS判断联网类型和连接状态
  • 原文地址:https://www.cnblogs.com/jixiaohua/p/10421127.html
Copyright © 2011-2022 走看看