SpringBoot Web 开发

Mr.WyjJanuary 16, 2023
  • SpringBoot
  • SpringBoot
About 3 min

静态资源导入

创建项目 SpringBoot-Web-demo1, 项目测试中http://localhost:8080//hello 不可使用, 暂时使用 http://127.0.0.1:8080//hello 启动 tomcat 访问 controller, 第二天后 localhost 可以使用了

测试 controller 代码:

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "hello, world!";
    }
}

静态资源可以放在类路径 resources 下的 staticpublicresources 文件夹下, 文件夹下的内容通过 http://localhost:8080/** 即可访问, 例如 static 文件夹下有 1.js, 则直接通过 http://localhost:8080/1.js 便可访问成功

访问优先级别: resources> static > public

一般 public 放公共资源, static 放静态资源如图片, resources 下放上传文件

首页和图标定制

定制首页的 index.html 时, 可以将 index.html 文件放在类路径 resources 下的 resourcesstaticpublic 文件夹下, 此时便可以直接通过 http://localhost:8080 直接访问到 index.html链接

模板引擎 Thymeleaf

新建项目 SpringBoot-Web-demo2, 创建项目时候将 Dependencies-> Template Engines -> Thymeleaf 选上

Thymeleaf 用来开发 Web 和独立环境项目的服务器端的Java模版引擎, 代替传统的 Jsp 文件, 使用 Thymeleaf 的文件必须放在类路径 resources 下的 templates 文件夹下, templates 文件夹下的内容不能通过 http://localhost:8080 直接访问, 必须要通过 controller 进行跳转

实现首页的跳转, controller 层源码:

@Controller
public class IndexController {
    @RequestMapping("/index")
    public String index() {
        return "index";
    }
}

templates 文件夹下的 index.html 源码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    使用thymeleaf
</body>
</html>

html 中使用模板引擎 thymeleaf 时, 首先要在 html 文件引入 thymeleaf 模板引擎, 首先要在 html 文件中引入头文件

xmlns:th="http://www.thymeleaf.org" 
<html lang="en" xmlns:th="http://www.thymeleaf.org" >

引入头文件之后, 可以绑定 html 文件里的任何元素, 使用 th:元素名 的方式, 源码如下:

@Controller
public class IndexThymeleafController {

    @RequestMapping("/index")
    public String index(Model model) {
        model.addAttribute("msg", "hello, thymeleaf");
        return "index";
    }

}
<!DOCTYPE html >
<html lang="en" xmlns:th="http://www.thymeleaf.org" >
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    使用thymeleaf
    <div th:text="${msg}"></div>
</body>
</html>

Thymeleaf 语法

Thymeleaf官方文档参考open in new window

Thymeleaf 语法如下:

属性含义
th:text文本替换
th:utext支持 html 的文本替换
th:value属性赋值
th:each遍历循环元素
th:if判断条件, 类似的还有th:unless、th:switch、th:case
th:insert代码块引入,类似的还有th:replace, th:include 常用于公共代码块提取的场景
th:fragment定义代码块, 方便被 th:insert 引用
th:object声明变量, 一般和*{} 一起配合使用
th:attr设置标签属性, 多个属性可以用逗号分隔

源码演示:

<!DOCTYPE html >
<html lang="en" xmlns:th="http://www.thymeleaf.org" >
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
    使用thymeleaf
    <div th:text="${msg}"></div>
    <h1 th:each="user:${users}" th:text="${user}"></h1>
</body>
</html>
@Controller
public class IndexThymeleafController {
    @RequestMapping("/index")
    public String index(Model model) {
        model.addAttribute("msg", "hello, thymeleaf");
        model.addAttribute("users", Arrays.asList("wyj", "mary"));
        return "index";
    }
}

Thymeleaf 表达式如下:

表达式含义
${...}变量表达式
@{...}链接表达式
#{...}消息表达式
~{...}代码块表达式
*{...}选择变量表达式

自定义 MVC 配置原理

(1)自定义SpringMVC 功能时, 需要自定义一个类并实现接口 WebMvcConfigurer

(2)自定义视图解析器需要创建一个类并实现接口 ViewResolver

源码如下:

/**
 * 自定义SpringMVC功能, 扩展 SpringMVC
 */
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {

    //取自定义视图解析器作为一个 Bean
    @Bean
    public ViewResolver myViewResolver() {
        return new MyViewResolver();
    }

    //自定义视图解析器
    public static class MyViewResolver implements ViewResolver {
        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }
    }
}
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.13.0