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

   


相关文章
|
19天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
38 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
22天前
|
缓存 JSON 监控
如何在项目中保证 Web 组件化的性能
保证 Web 组件化的性能需要从多个方面入手,综合运用各种优化方法和策略。通过持续的优化和改进,能够提高组件化的整体性能,为用户提供更好的体验,同时也有助于提高项目的开发效率和质量。
31 8
|
22天前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
27 7
|
28天前
|
监控 安全 测试技术
如何在实际项目中应用Python Web开发的安全测试知识?
如何在实际项目中应用Python Web开发的安全测试知识?
28 4
|
28天前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
70 1
|
1月前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
63 9
|
1月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
42 2
|
21天前
|
XML Java 网络架构
使用 Spring Boot 公开 SOAP Web 服务端点:详细指南
使用 Spring Boot 公开 SOAP Web 服务端点:详细指南
31 0
|
29天前
|
Java Kotlin 索引
学习Spring框架特性及jiar包下载
Spring 5作为最新版本,更新了JDK基线至8,修订了核心框架,增强了反射和接口功能,支持响应式编程及Kotlin语言,引入了函数式Web框架,并提升了测试功能。Spring框架可在其官网下载,包括文档、jar包和XML Schema文档,适用于Java SE和Java EE项目。
31 0
|
29天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
37 0
下一篇
DataWorks