SpringBoot员工管理的项目——SpringBoot首页定制的操作和国际编码操作(课时十五)
本博文完成的两个功能:
- 利用 Thymeleaf模板引擎完成员工管理系统的的首页定制
- 国际化编码格式操作
<!--Thymeleaf 说明基于3.0.1 模板引擎--> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> </dependency> <!-- lombok依赖包 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-java8time</artifactId> </dependency>
第一部分 利用 Thymeleaf模板引擎完成员工管理系统的的首页定制
观察下面的的几张图来思考一下问题 为什么在静态资源的index.html中:使用模板引擎和步使用模板引擎的差别为什么这么大呀?
在项目运行的过程中没有使用的模板引擎的运行效果图
这是我将项目完成成功后进行了拦截
本页面下面有中英文国际翻译如何实现
什么是Thymeleaf?
Thymeleaf是现代网络和服务器端Java模板引擎独立的环境中,能够处理HTML、XML、JavaScript、CSS和纯文本。
Thymeleaf的主要目的是提供一个优雅的和高度可维护的方式创建模板。 为了实现这一点,它基于的概念自然的模板注入其逻辑模板文件的方式不会影响模板被用来作为设计原型。 这提高了通信的设计和桥梁设计和开发团队之间的差距。
Thymeleaf也从一开始就被设计思想——特别是Web标准HTML5——允许您创建完全验证模板如果需要你。
Thymeleaf重点的表达式
官网的地址: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#standard-expression-syntax
下面的内容是上的表达式
我们将休息小杂货虚拟商店的发展学习的最重要的一个部分Thymeleaf标准方言:Thymeleaf标准表达式语法。
我们已经看到了两种类型的有效属性值表示在这个语法:消息和变量表达式
<p th:utext=”# {home.welcome}”>Welcome to our grocery store!</p> <p>Today is: <跨度 th:文本=”今天的$ {}”>13 february 2011</跨度></p>
但是有更多类型的表达式和更有趣的细节去了解那些我们已经知道。 首先,让我们看到一个标准的快速摘要表达特点:
- 简单的表达式:
- 变量表达式:
${...}
- 选择变量表达式:
*{...}
- 消息表达式:
#{...}
- 链接URL表达式:
@{...}
- 分段表达式:
~{...}
链接URL表达式:@{...} 利用这个表达式完成
员工管理系统的的首页定制 在index.html中修改下面的信息
以此类推吧所有的页面都改成模板引擎页面可识别
@Configuration public class MyMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("index"); registry.addViewController("/index.html").setViewName("index"); }
首页的的信息功能完成成功
第二部分 国际化编码格式操作 首先要明确 项目的编码格式为UTF-8
建立一个文件 il8n
il8n国际化 支持多国语言的web应用,根据客户端系统的语言类型返回对应的界面
“I18N”是“Internationalization”的缩写,意思是“国际化”
英语缩略词“I18N”经常作为“Internationalization”的缩写来使用,中文表示:“国际化”。本文将详细介绍英语缩写词I18N所代表英文单词,其对应的中文拼音、详细解释以及在英语中的流行度。此外,还有关于缩略词I18N的分类、应用领域及相关应用示例等。
“I18N”(“国际化)释义
- 英文缩写词:I18N
- 英文单词:Internationalization
- 缩写词中文简要解释:国际化
- 中文拼音:guó jì huà
- 缩写词分类:Computing
- 缩写词领域:Software
“I18N”是“Internationalization”的缩写,意思是“国际化” UTF-8
新建了il8n的文件夹
login.properties
login.btn=登录 login.password=用户密码 login.tip=请用户登入 login.rememberme=记住我吗 lonin.username=用户名
package com.spring.springboot0907web.config; import org.springframework.web.servlet.LocaleResolver; import org.thymeleaf.util.StringUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; //应为类型要求为WebMvcConfigurer,所以我们实现其接口 //可以使用自定义类扩展MVC的功能 public class MyLocaleResolver implements LocaleResolver { //解析请求方式 @Override public Locale resolveLocale(HttpServletRequest request) { //获得请求参数的语言参数 String Iparameter = request.getParameter("l"); System.out.println("我得到的元素是"+"__"+Iparameter); Locale locale = Locale.getDefault();//如果没有是默认 if(!StringUtils.isEmpty(Iparameter)){ //字符串分 String[] split = Iparameter.split("_"); // //国家地区 locale= new Locale(split[0], split[1]); } return locale; } // }
// //自定义国际化文件 @Bean public LocaleResolver localeResolver() { return new MyLocaleResolver(); }
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>Signin Template for Bootstrap</title> <!-- Bootstrap core CSS --> <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"> <!-- Custom styles for this template --> <link th:href="@{/css/signin.css}" rel="stylesheet"> </head> <body class="text-center"> <form class="form-signin" th:action="@{/user/login}"> <img class="mb-4" th:src="@{/img/bootstrap-solid.svg}" alt="" width="72" height="72"> <h3 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}" style="background-color: whitesmoke; border: 2px solid white;background-clip: content-box;text-shadow: 1px 2px seashell">Please sign in</h3> <!--判断是否显示,使用if, ${}可以使用工具类,可以看thymeleaf的中文文档--> <!--/*@thymesVar id="msg" type="java"*/--> <h1 style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></h1> <label class="sr-only">Username</label> <input type="text" name="username" class="form-control" th:placeholder="#{lonin.username}" required="" autofocus=""> <label class="sr-only">Password</label> <input type="password" name="password" class="form-control" th:placeholder="#{login.password}" required=""> <div class="checkbox mb-3"> <label> <input type="checkbox" value="remember-me" th:text="#{login.rememberme}"> </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button> <p class="mt-5 mb-3 text-muted">2022年员工管理系统的登录页面</p> <a class="btn btn-sm" th:href="@{/index.html(l='zh_CN')}">中文</a> <a class="btn btn-sm" th:href="@{/index.html(l='en_US')}">English</a> </form> </body> </html>
"C:\Program Files\Java\jdk1.8.0_171\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:D:\IDEA\com.text\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar=64946:D:\IDEA\com.text\IntelliJ IDEA 2020.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_171\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_171\jre\lib\rt.jar;D:\maven-workspace\spaceVideospringboot\springboot0915\target\classes;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.7.3\spring-boot-starter-web-2.7.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\boot\spring-boot-starter\2.7.3\spring-boot-starter-2.7.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\boot\spring-boot\2.7.3\spring-boot-2.7.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.7.3\spring-boot-autoconfigure-2.7.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.7.3\spring-boot-starter-logging-2.7.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\Users\MZFAITHDREAM\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\MZFAITHDREAM\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.7.3\spring-boot-starter-json-2.7.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.3\jackson-databind-2.13.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.3\jackson-annotations-2.13.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.13.3\jackson-core-2.13.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.3\jackson-datatype-jdk8-2.13.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.3\jackson-datatype-jsr310-2.13.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.3\jackson-module-parameter-names-2.13.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.3\spring-boot-starter-tomcat-2.7.3.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.65\tomcat-embed-core-9.0.65.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.65\tomcat-embed-el-9.0.65.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.65\tomcat-embed-websocket-9.0.65.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\spring-web\5.3.22\spring-web-5.3.22.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\spring-beans\5.3.22\spring-beans-5.3.22.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\spring-webmvc\5.3.22\spring-webmvc-5.3.22.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\spring-aop\5.3.22\spring-aop-5.3.22.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\spring-context\5.3.22\spring-context-5.3.22.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\spring-expression\5.3.22\spring-expression-5.3.22.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\spring-core\5.3.22\spring-core-5.3.22.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\springframework\spring-jcl\5.3.22\spring-jcl-5.3.22.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\webjars\npm\jquery\3.6.1\jquery-3.6.1.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\thymeleaf\thymeleaf-spring5\3.0.15.RELEASE\thymeleaf-spring5-3.0.15.RELEASE.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\thymeleaf\thymeleaf\3.0.15.RELEASE\thymeleaf-3.0.15.RELEASE.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\attoparser\attoparser\2.0.5.RELEASE\attoparser-2.0.5.RELEASE.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\unbescape\unbescape\1.1.6.RELEASE\unbescape-1.1.6.RELEASE.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\projectlombok\lombok\1.16.10\lombok-1.16.10.jar;C:\Users\MZFAITHDREAM\.m2\repository\org\thymeleaf\extras\thymeleaf-extras-java8time\3.0.4.RELEASE\thymeleaf-extras-java8time-3.0.4.RELEASE.jar" com.spring.springboot0907web.Springboot0907WebApplication . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.7.3) 2022-10-02 21:21:59.224 INFO 2628 --- [ main] c.s.s.Springboot0907WebApplication : Starting Springboot0907WebApplication using Java 1.8.0_171 on HELLOWWORLD with PID 2628 (D:\maven-workspace\spaceVideospringboot\springboot0915\target\classes started by MZFAITHDREAM in D:\maven-workspace\spaceVideospringboot\springboot0915) 2022-10-02 21:21:59.229 INFO 2628 --- [ main] c.s.s.Springboot0907WebApplication : No active profile set, falling back to 1 default profile: "default" 2022-10-02 21:22:00.747 INFO 2628 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2022-10-02 21:22:00.759 INFO 2628 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2022-10-02 21:22:00.760 INFO 2628 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.65] 2022-10-02 21:22:01.239 INFO 2628 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2022-10-02 21:22:01.239 INFO 2628 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1960 ms 2022-10-02 21:22:01.321 INFO 2628 --- [ main] f.a.AutowiredAnnotationBeanPostProcessor : Autowired annotation is not supported on static fields: private static java.lang.Integer com.spring.springboot0907web.dao.EmployeeDao.ininId 2022-10-02 21:22:01.547 INFO 2628 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page template: index 2022-10-02 21:22:01.760 INFO 2628 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2022-10-02 21:22:01.776 INFO 2628 --- [ main] c.s.s.Springboot0907WebApplication : Started Springboot0907WebApplication in 3.092 seconds (JVM running for 4.79) 2022-10-02 21:22:11.779 INFO 2628 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2022-10-02 21:22:11.779 INFO 2628 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2022-10-02 21:22:11.781 INFO 2628 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms 我得到的元素是__null 我得到的元素是__null 我得到的元素是__zh_CN 我得到的元素是__zh_CN 我得到的元素是__en_US 我得到的元素是__en_US
_zh_CN 中文 _en_US 美国