SpringBoot学习2:如何创建web项目

简介: SpringBoot学习2:如何创建web项目

问题

image.png

导入静态资源

image.png

我们通过查看这个类中的WebMvcAutoConfigurationAdapter类的addResourceHandlers方法。

在这里可以了解到

其加载静态资源的文件夹为以下几个

"classpath:/META-INF/resources/", "classpath:/resources/", 
"classpath:/static/", "classpath:/public/"

image.png

image.png

首页

还是在WebMvcAutoConfigurationAdapter类中我们可以找到

image.png

这说明其实就是再找静态资源目录下的index.html

动态网页 Thymeleaf 模板引擎

动态网页跳转

springBoot中文文档

https://felord.cn/_doc/_springboot/2.1.5.RELEASE/_book/pages/using-spring-boot.html#using-boot-starter

根据上方链接可以查询到springboot的依赖为

spring-boot-starter-thymeleaf

我们将其导入即可

我们修改coontroller为以下信息

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyTestController {
    @RequestMapping("/test")
    public String test(){
        return "test";
    }
}

注意这里没有使用@ResponseBody注解,所以不是以json形式返回

所以我们查看Thymeleaf自动装配的源码ThymeleafProperties

image.png

由此可知我们只需要在templates里创建文件就可以达到webinfo相同的效果

我们在templates中创建test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h1>TTTTTTT</h1>
  <h1>est</h1>
</body>
</html>

此时访问http://localhost:8080/test

image.png

修改controller层的代码

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class MyTestController {
    @RequestMapping("/test")
    public String test(Model model){
        model.addAttribute("message","hello SpringBoot");
        return "test";
    }
}

使用model向前端传递了message参数

前端修改为

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h1 >----<a th:text="${message}"></a></h1>
</body>
</html>

注意上面导入了 xmlns:th="http://www.thymeleaf.org"

此时访问http://localhost:8080/test

image.png

Thymeleaf 常用语法

${} 提取Attribute

controller

@Controller
public class MyTestController {
    @RequestMapping("/test")
    public String test(Model model){
        model.addAttribute("message","<h1>hello SpringBoot</h1>");
        List<String> lists = new ArrayList<String>();
        lists.add("aaa");
        lists.add("bbb");
        lists.add("ccc");
        model.addAttribute("lists",lists);
        return "test";
    }
}

test.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div th:text="${message}"></div>
    <div th:utext="${message}"></div>
    <hr>
    <h3 th:each="list:${lists}" th:text="${list}"></h3>
</body>
</html>

结果:

image.png

@{} 指定路径 (即使在转发后也可以找到对应路径)

<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">

th:fragment 创建模板(预制体)

创建预制体

  <nav class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0" th:fragment="tou">
    <a class="navbar-brand col-sm-3 col-md-2 mr-0" href="#">Company name</a>
    <input class="form-control form-control-dark w-100" type="text" placeholder="Search" aria-label="Search">
    <ul class="navbar-nav px-3">
      <li class="nav-item text-nowrap">
        <a class="nav-link" th:href="@{/templates/index.html}">Sign out</a>
      </li>
    </ul>
  </nav>

th:insert="~{::}" 调用预制体且可以传参

<div th:insert="~{public/publlics::tou(active='main.html')}"></div>

if

th:class="${active=='main.html'? 'nav-link active': 'nav-link'}"

th:each="" 遍历 th:selected选中下拉列表

<select class="form-select" name="department.id" >
 <option th:each="dep:${deps}" th:selected="${dep.getId()==emp.getDepartment().getId()}" th:text="${dep.getId()+'---'+dep.getDepartmentName()}" th:value="${dep.getId()}"></option>
</select>

th:checked 选中单选框

<div class="form-check form-check-inline">
   <input th:checked="${emp.getSex()==1}" class="form-check-input" type="radio" name="sex" id="inlineRadio1" value="1">
   <label  class="form-check-label" for="inlineRadio1">男</label>
</div>
<div class="form-check form-check-inline">
   <input th:checked="${emp.getSex()==0}" class="form-check-input" type="radio" name="sex" id="inlineRadio2" value="0">
   <label  class="form-check-label" for="inlineRadio2">女</label>
</div>

#dates.format 日期格式化

th:value="${#dates.format(emp.getDate(),'yyyy-MM-dd')}"

MVC配置扩展

创建config类

package com.example.myfirstproject.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * @author 化粪池堵塞的凶手
 */
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    //视图跳转
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/hhhh").setViewName("test");
    }
}

注意要使用@Configuration注解,和实现WebMvcConfigurer接口

此时便可以通过访问http://localhost:8080/hhhh

来访问test了

类似这种设置还有很多

https://blog.csdn.net/zhangpower1993/article/details/89016503

https://blog.csdn.net/A434534658/article/details/112139041

注意不要使用@EnableWebMvc注解,因为此注解导入了DelegatingWebMvcConfiguration,而DelegatingWebMvcConfiguration又继承了WebMvcConfigurationSupport

image.png

而在WebMvcAutoConfiguration中可以看到导入WebMvcConfigurationSupport会使自动装配失效

image.png

国际化

前提条件:文件均设置为UTF-8

image.png

国际化主要需要以下几个步骤

1.在resource目录创建i18n文件夹并创建配置文件并添加内容

image.png

image.png

2.在application配置文件中配置i18n文件所在位置

image.png

3.创建区域解析类

/**
 * 国际化
 * @author 化粪池堵塞的凶手
 */
//@Repository
public class LocaleResolverConfig implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        Locale locale = Locale.getDefault();//若没有则采用默认
        String language = request.getParameter("l");
        System.out.println("===>"+language);
        if (!StringUtils.isEmpty(language)){
            String[] s = language.split("_");
            locale = new Locale(s[0],s[1]);
        }
        return locale;
    }
    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    }
}

4.将其通过配置类放入IOC容器中,注意Bean名需要是localeResolver。也可以直接在LocaleResolverConfig类上加上@Component("localeResolver")注解。

image.png

5.修改html

====5.1创建切换按钮

      <a th:href="@{index.html(l=zh_CN)}">中文</a>
      <a th:href="@{index.html(l=en_US)}">english</a>

====5.2将文字改为国际化形式

比如

<h1 class="h3 mb-3 font-weight-normal"  >请登录</h1>
 <input type="email" id="inputEmail" class="form-control" placeholder="账户" required autofocus>
 <button class="btn btn-lg btn-primary btn-block" type="submit" >login</button>

改为

<h1 class="h3 mb-3 font-weight-normal" th:text="#{login.title}" ></h1>
 <input type="email" id="inputEmail" class="form-control" th:placeholder="#{login.address}" required autofocus>
 <button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}"></button>

此时运行切换语言便可以看出效果

国际化补充

其实第三步和第四步可以省略,不过省略后会使用默认的解析器,下面中英文切换的超链接就失效了,网页只会随着浏览器设置的语言发生改变。

image.png

image.png

错误处理(404 500)

只需要在这里添加文件即可 500同理

image.png

   


相关文章
|
24天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
37 4
|
6天前
|
JavaScript 前端开发 开发工具
web项目规范配置(husky、eslint、lint-staged、commit)
通过上述配置,可以确保在Web项目开发过程中自动进行代码质量检查和规范化提交。Husky、ESLint、lint-staged和Commitlint共同作用,使得每次提交代码之前都会自动检查代码风格和语法问题,防止不符合规范的代码进入代码库。这不仅提高了代码质量,还保证了团队协作中的一致性。希望这些配置指南能帮助你建立高效的开发流程。
20 5
|
12天前
|
JavaScript 前端开发 数据安全/隐私保护
Web开发者必看:手把手教你如何轻松播放m3u8流地址,解锁视频播放新技能,让你的项目更上一层楼!
【10月更文挑战第23天】随着互联网技术的发展,m3u8格式因良好的兼容性和高压缩率被广泛用于网络流媒体传输。本文介绍如何在Web端播放m3u8流地址,包括引入视频播放器(如Video.js)、创建播放器容器、初始化播放器及播放m3u8流的具体步骤。此外,还涉及处理加密m3u8流的示例。
36 1
|
21天前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
41 1
|
23天前
|
机器学习/深度学习 移动开发 JavaScript
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
Web实时通信的学习之旅:SSE(Server-Sent Events)的技术详解及简单示例演示
106 0
|
23天前
|
网络协议 API 网络安全
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
Web实时通信的学习之旅:轮询、WebSocket、SSE的区别以及优缺点
109 0
|
23天前
|
网络协议 安全 JavaScript
Web实时通信的学习之旅:WebSocket入门指南及示例演示
Web实时通信的学习之旅:WebSocket入门指南及示例演示
107 0
|
27天前
|
监控 Java Maven
springboot学习二:springboot 初创建 web 项目、修改banner、热部署插件、切换运行环境、springboot参数配置,打包项目并测试成功
这篇文章介绍了如何快速创建Spring Boot项目,包括项目的初始化、结构、打包部署、修改启动Banner、热部署、环境切换和参数配置等基础操作。
110 0
|
29天前
|
NoSQL Java 数据库连接
springBoot:整合其他框架&condition&切换web配置 (五)
本文档介绍了如何在Spring Boot项目中整合JUnit、Redis和MyBatis等框架,并提供了相应的依赖配置示例。同时,还展示了如何通过条件注解实现Bean的条件创建,以及如何切换Web服务器配置,从默认的Tomcat切换到Jetty。
|
6月前
|
Java Maven Spring
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)2
【IntelliJ IDEA】使用Maven方式构建Spring Boot Web 项目(超详细)
447 2
下一篇
无影云桌面