Spring 全家桶之 Spring Boot 2.6.4(六)- Web Develop(Part A)

简介: Spring 全家桶之 Spring Boot 2.6.4(六)- Web Develop(Part A)

一、工程搭建

使用IDEA新建Spring Boot 工程 spring-boot-emps,选择基本Web依赖

88fcf65746fa4d44aa56e0c55f6d8026_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

在entity包中增加Employee和Department实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
   private Integer id;
    private String lastName;
    private String email;
    private Integer gender;
    private Department department;
}
复制代码
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Department {
   private Integer id;
   private String departmentName;
}
复制代码

在mapper包中增加对应的EmployeeMapper和DepartmentMapper类

@Repository
public class EmployeeMapper {
   private static Map<Integer, Employee> employees = null;
   @Autowired
   private DepartmentMapper departmentDao;
   static{
      employees = new HashMap<Integer, Employee>();
      employees.put(1001, new Employee(1001, "Tony Stark", "stark@starkindustrymail.com", 1, new Department(101, "STARK INDUSTRIES")));
      employees.put(1002, new Employee(1002, "Steve Rogers", "steve@gmail.com", 1, new Department(102, "S.H.I.E.L.D. ")));
      employees.put(1003, new Employee(1003, "Natasha Romanoff", "natash@gmail.com", 0, new Department(102, "S.H.I.E.L.D. ")));
      employees.put(1004, new Employee(1004, "Robert Bruce Banner", "banner@gmail.com", 1, new Department(103, "The Avengers")));
      employees.put(1005, new Employee(1005, "Clint Barton", "clint@gmail.com", 1, new Department(102, "S.H.I.E.L.D. ")));
   }
   private static Integer initId = 1006;
   public void save(Employee employee){
      if(employee.getId() == null){
         employee.setId(initId++);
      }
      employee.setDepartment(departmentDao.getDepartment(employee.getDepartment().getId()));
      employees.put(employee.getId(), employee);
   }
   public Collection<Employee> getAll(){
      return employees.values();
   }
   public Employee get(Integer id){
      return employees.get(id);
   }
   public void delete(Integer id){
      employees.remove(id);
   }
}
复制代码
@Repository
public class DepartmentMapper {
   private static Map<Integer, Department> departments = null;
   static{
      departments = new HashMap<Integer, Department>();
      departments.put(101, new Department(101, "STARK INDUSTRIES"));
      departments.put(102, new Department(102, "S.H.I.E.L.D. "));
      departments.put(103, new Department(103, "The Avengers"));
   }
   public Collection<Department> getDepartments(){
      return departments.values();
   }
   public Department getDepartment(Integer id){
      return departments.get(id);
   }
}
复制代码

将Bootstrps模板和静态资源分别拷贝到templates文件夹和static文件夹中 要将 "/" 映射到templates下的index.html页面,可以新建一个HelloController,并新增一个方法将“/”映射到index.html页面,Thymeleaf已经做好了视图解析的配置

@Controller
public class HelloController {
    @RequestMapping("/")
    public String hello(){
        return "index";
    }
}
复制代码

重新启动应用,浏览器输入 localhost:8080

91bfefd05f5347c2886185c00c5a3f2b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

这样为每一个页面跳转都增加一个方法未免太过麻烦,最好是能像SSM中Spring MVC配置文件中配置映射;这时候就可以使用到配置类。

新建config包并增加自定义的Web MVC配置类LilithMvcConfig实现 WebMvcConfigurer,添加@Configuration注解,并在自定义的配置中添加视图映射

@Configuration
public class LilithMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }
}
复制代码

将HelloController中的方法注释掉,重新启动应用,再次在浏览器中输入localhost:8080

91bfefd05f5347c2886185c00c5a3f2b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

静态资源引用改造

公共静态资源使用webjars代替

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.3.1</version>
</dependency>
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>4.0.0</version>
</dependency>
复制代码

私有静态资源使用Thymeleaf,在HTML页面头部添加Thymeleaf命名空间

xmlns:th="http://www.thymeleaf.org
复制代码

494ef77b64044d5381de39ba294eaa42_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

将所有的静态资源CSS、JS、PNG等资源全部改为使用Thymeleaf命名空间引用。

二、Spring Boot 国际化配置

Spring MVC 如何进行国际化配置的步骤

  1. 编写国际化配置文件
  2. 使用ResourceBundleMessageSource管理国际化资源文件
  3. JSP页面导入fmt命名空间,使用fmt:message取出国际化内容

Spring Boot进行国际化配置同样也需要编写国际化资源文件,并使用Thymeleaf模板引擎取出国际化内容

在resources目录下新建i18n文件夹,建立login.properties、login_zh_CN.properties、login_en_US.properties分别为默认显示的内容和中文内容以及英文内容

使用idea进行配置国际化,进入中文国际化配置文件

f17e9711057b4c9c9b4f4c818f8e04a2_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

点击ok之后bb5e06a85f234faf9683c6e623385b14_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

就可以填写默认显示的内容和中文英文状态显示的内容

接着将这五项全部配置国际化既添加国际化内容

16a4556bb30541efb6b1bd44b5e2d50a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

Spring Boot中包含了自动配置类MessageSourceAutoConfiguration,该类在 org.springframework.boot.autoconfigure.context包下。

ee9a597f66f64e0290653b1714a4007c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

MessageSource就是管理国际化资源文件的组件

0750f288133e4c728c695c48c600d8fa_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

setBasenames就是设置国际化资源文件的基础名,也就是去掉国家语言代码之后的名字

f89b5a3b5b0241b4a963878848465310_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

默认的国际化资源文件名的前缀是message

在application.properties配置文件中修改国际化文件名的前缀

spring.messages.basename=i18n.login
复制代码

Thymeleaf 官方文档中 4.1 Messages 提到使用#{}来获取消息内容

image.png

修改index.html页面,修改需要国际化的标签,修改时页面会出现国际化的提示

image.png

需要注意的是remember的国际配置要使用行内写法

<input type="checkbox" value="remember-me"> [[#{login.remember}]]
复制代码

重启应用,浏览器输入http://localhost:8080/

image.png

设置浏览器语言为英文

image.png

发送请求切换语言

国际化能显示不同的语言是因为Locale区域信息对象设置了不同的国家或地区,而LocaleResolver就是获取区域信息的对象

WebMvcAutoConfiguration自动配置类中配置了LocaleResolver区域解析器既如果配置类区域信息就是用配置的区域信息来实现国际化,否则就是用请求头的Accept Language中的区域信息来实现国际化,并且这个方法上标注了@ConditionalOnMissingBean,只要容器中有了自定义的区域解析器,Spring Boot自动配置的去解析器就不会导入容器中,自然也就不会生效了。

image.png

实际setDefaultLocale的区域就是从浏览器请求头中的“Accept-Language”中获取到的区域信息

image.png

想要点击页面的中英文连接实现语言切换那就不能使用自动配置类中实现的区域解析器,要自定义区域解析器

浏览器发送的请求头中会包含浏览器的语言

image.png

自定义一个区域信息解析器,根据链接上携带的区域信息切换语言

修改html页面中 中文 English连接,带上区域信息

<a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index.html(l='en_CN')}">English</a>
复制代码

实现自定义的区域解析器

public class LilithLocaleResovler implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        // 获取连接中携带的区域信息
        String localeInfo = request.getParameter("l");
        // 使用系统默认的
        Locale locale = Locale.getDefault();
        if (StringUtils.hasLength(localeInfo)){
            String[] split = localeInfo.split("_");
            // 使用携带的语言参数
            locale = new Locale(split[0],split[1]);
        }
        return locale;
    }
    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
    }
}
复制代码

在LilithMvcConfig中增加代码,将自定义的区域信息解析器注册到容器中

@Bean
public LocaleResolver localeResolver(){
    LilithLocaleResovler localeResovler = new LilithLocaleResovler();
    return localeResovler;
}
复制代码

重新启动程序,浏览器进入首页

image.png

点击中文和English可以成功实现语言切换


相关文章
|
8天前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
39 7
|
23天前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
42 6
|
29天前
|
XML Java 应用服务中间件
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
231 17
Spring Boot 两种部署到服务器的方式
|
1月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
359 12
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
83 8
|
2月前
|
缓存 前端开发 Java
【Spring】——SpringBoot项目创建
SpringBoot项目创建,SpringBootApplication启动类,target文件,web服务器,tomcat,访问服务器
|
2月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
103 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
209 5
|
3月前
|
XML Java 网络架构
使用 Spring Boot 公开 SOAP Web 服务端点:详细指南
使用 Spring Boot 公开 SOAP Web 服务端点:详细指南
168 0
|
3月前
|
监控 Java 数据库连接
详解Spring Batch:在Spring Boot中实现高效批处理
详解Spring Batch:在Spring Boot中实现高效批处理
468 12

热门文章

最新文章

  • 1
    Burp Suite Professional 2025.2 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
    24
  • 2
    AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
    19
  • 3
    【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
    54
  • 4
    部署使用 CHAT-NEXT-WEB 基于 Deepseek
    327
  • 5
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 6
    java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
    39
  • 7
    零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
    28
  • 8
    【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
    20
  • 9
    FastAPI与Selenium:打造高效的Web数据抓取服务 —— 采集Pixabay中的图片及相关信息
    53
  • 10
    springSecurity学习之springSecurity过滤web请求
    60