当前位置: 首页 > news >正文

心理网站的建设与维护域名注册商哪个好

心理网站的建设与维护,域名注册商哪个好,公共资源交易中心主任,可视化域名网站模块被删了6. SpringBoot Spring 的诞⽣是为了简化 Java 程序的开发的#xff0c;⽽ Spring Boot 是为了快速开发 Spring 程序开发而诞生的。 Spring Boot 的优点#xff1a; 快速集成框架#xff0c;Spring Boot 提供了启动添加依赖的功能#xff0c;⽤于秒级集成各种框架。内置运⾏…6. SpringBoot Spring 的诞⽣是为了简化 Java 程序的开发的⽽ Spring Boot 是为了快速开发 Spring 程序开发而诞生的。 Spring Boot 的优点 快速集成框架Spring Boot 提供了启动添加依赖的功能⽤于秒级集成各种框架。内置运⾏容器⽆需配置 Tomcat 等 Web 容器直接运⾏和部署程序快速部署项⽬⽆需外部容器即可启动并运⾏项⽬。可以完全抛弃繁琐的 XML使⽤注解和配置的⽅式进⾏开发。⽀持更多的监控的指标可以更好的了解项⽬的运⾏情况。 6.1 SpringBoot 创建和使用演示 6.1.1 创建 安装Spirng Boot Helper插件安装好之后它的名字就变成Spirng Initialzr and Assistant 了 创建 Spring Boot 项目 首先把 Maven 配置为国内源 第⼀次打开 Spring Boot 项⽬需要加载很久因为当前 Spring Boot 框架并没有在⾃⼰的本地仓库为了加速 Spring Boot 项⽬的下载在打开项⽬之前先把 Maven 配置为国内源。 1 打开 settings 2 检查 User Settings file 的 settings.xml ⽂件是否存在,如果不存在复制下⾯配置了国内源的 settings.xml ⽂件放到 User Settings file ⽬录下。 // 配置了国内源的 settings.xml settings xmlnshttp://maven.apache.org/SETTINGS/1.1.0 xmlns:xsihtt p://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/SETTINGS/1.1.0 http://maven. apache.org/xsd/settings-1.1.0.xsd localRepositoryC:\Users\intel\.m2\repository/localRepository mirrorsmirroridalimaven/idnamealiyun maven/name urlhttp://maven.aliyun.com/nexus/content/groups/public//url mirrorOfcentral/mirrorOf/mirror/mirrors /settings如果存在检查 settings.xml 是否配置了国内源对照代码修改配置即可。 3删除本地存储 jar ⽬录中的所有⽂件 4 切换到 Idea 中重新下载 jar 包: 如果出现中⽂会导致下载了 jar 包但是在项⽬中不能正常使⽤如果还是下载失败那就是本地⽹速问题尝试更好⽹络使⽤⼿机热点或朋友的⼿机热点尝试如果还是不⾏间隔 4 ⼩时之后再试。 正式开始创建项⽬ 点击 Finish 就完成 Spring Boot 的项⽬创建了。 网页版创建 不使⽤ Idea 也可以创建 Spring Boot 项⽬我们可以使⽤ Spring 官⽅提供的⽹⻚版来创建Spring Boot 项⽬。 1 先访问https://start.spring.io 点击⽣成按钮会下载⼀个 Spring Boot 的 zip 包解压 zip 之后⽬录如下 2 使⽤ Idea 打开之后Spring Boot 项⽬就算创建成功了 6.1.1 使用 Spring项目的特点约定大于配置。 约定把要注入到容器的类和启动类放到同级目录下此时Spring Boot 项目才能将bean注入到容器中类上标注 SpringBootApplication 就可以启动 Spring Boot 项⽬了。 对⽐ Spring 的项⽬我们也可以看到这⼀特点⽐如在 Spring 中也是要配置 Bean 的扫描路径的⽽ Spring Boot 则不需要Spring 配置如下 项目目录介绍 src/main/java 为 Java 源代码src/main/resources 为静态资源或配置⽂件/static静态资源⽂件夹/templates模版资源⽂件夹。 运行项目 点击启动类的 main ⽅法就可以运⾏ Spring Boot 项⽬了 启动成功如下图所示 输出 Hello world 之前 Spring 是⼀个普通 Java 项⽬没 办法直接和浏览器进⾏互动⽤ Spring Boot 可以直接实现和浏览器及⽤户的交互。 1 在创建的项⽬包路径下创建 UserController ⽂件实现代码如下 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/user) public class UserController {RequestMapping(/sayhi) public String sayHi(){ return Hi,Spring Boot.; } }2 重新启动项⽬访问 http://localhost:8080/user/sayhi 最终效果如下 6.2 SpringBoot 热部署 添加热部署框架⽀持 在 pom.xml 中添加如下框架引⽤ dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdscoperuntime/scope /dependencySettings 开启项⽬⾃动编译 开启运⾏中热部署 ⾼版本 Idea 设置IntelliJ IDEA 2021.2 之后版本 使⽤ Debug 启动⾮Run 6.3 SpringBoot 配置文件 6.3.1 配置文件作用 整个项⽬中所有重要的数据都是在配置⽂件中配置的: 数据库的连接信息包含⽤户名和密码的设置,项⽬的启动端⼝第三⽅系统的调⽤秘钥等信息⽤于发现和定位问题的普通⽇志和异常⽇志等 如果没有配置信息那么 Spring Boot 项⽬就不能连接和操作数据库甚⾄是不能保存可以⽤ 于排查问题的关键⽇志所以配置⽂件⾮常重要。 6.3.2 配置⽂件的格式 理论上讲 properties 可以和 yml ⼀起存在于⼀个项⽬当中当 properties 和 yml ⼀起存在⼀个项⽬中时如果配置⽂件中出现了同样的配置⽐如 properties 和 yml 中都配置“server.port” 那么这个时候会以 properties 中的配置为主也就是 .properties 配置⽂件的优先级最⾼但加载 完 .properties ⽂件之后也会加载 .yml ⽂件的配置信息。实际的业务当中我们通常会采取⼀种统⼀的配置⽂件格式这样可以更好的维护降低故障率。 6.3.2.1 .properties 详解 properties 配置⽂件是最早期的配置⽂件格式也是创建 Spring Boot 项⽬默认的配置⽂件。 语法 properties 是以键值的形式配置的key 和 value 之间是以“”连接。 # 配置项⽬端⼝号 # 配置⽂件中使⽤“#”来添加注释信息。 server.port8084 spring.datasource.urljdbc:mysql://127.0.0.1:3306/testdb?characterEncoding utf8 spring.datasource.usernameroot spring.datasource.passwordroot从上述配置key看出properties 配置⽂件中会有很多的冗余的信息 读取配置⽂件 主动的读取配置⽂件中的内容可以使⽤ Value 注解来实现Value 注解使⽤“${}”的格式读取。 Component 在 Spring Boot 启动时候会注⼊到框架中注⼊到框架中时会执⾏ PostConstruct初始化⽅法这个时候就能读取到配置信息了。 示例 import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;Component public class ReadYml { Value(${server.port}) private String port;PostConstructpublic void postConstruct() { System.out.println(Read YML,port: port); } }6.3.2.2 .yml 详解 yml 是 YAML 是缩写它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔”。 yml 是⼀个可读性⾼写法简单、易于理解它的语法和 JSON 语⾔类似。yml ⽀持更多的数据类型它可以简单表达清单数组、散列表标量等数据形态。它使⽤空⽩ 符号缩进和⼤量依赖外观的特⾊特别适合⽤来表达或编辑数据结构、各种配置⽂件等。yml ⽀持更多的编程语⾔它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、 JavaScript、Perl 中。 语法 yml 是树形结构的配置⽂件它的基础语法是“key: value”注意 key 和 value 之间使⽤英⽂冒汗加空 格的⽅式组成的其中的空格不可省略。 示例使⽤ yml 连接数据库 spring:datasource:url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncodingutf8 username: rootpassword: rootproperties yml yml 配置读取 yml 读取配置的⽅式和 properties 相同使⽤ Value 注解即可。 import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;Component public class ReadYml { Value(${string.hello}) private String hello;PostConstructpublic void postConstruct() { System.out.println(Read YML,Hello: hello); } }配置不同数据类型及 null # 字符串 string.value: Hello#布尔值true或false boolean.value: true boolean.value1: false# 整数 int.value: 10 int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制# 浮点数 float.value: 3.14159 float.value1: 314159e-5 # 科学计数法# Null~代表null null.value: ~配置字符串 字符串默认不⽤加上单引号或者双引号如果加英⽂的单双引号可以表示特殊的含义。 字符串默认不⽤加上单引号或者双引号。单引号会转义特殊字符特殊字符最终只是⼀个普通的字符串数据。双引号不会转义字符串⾥⾯的特殊字符特殊字符会作为本身想表示的意思。 配置 string:str1: Hello \n Spring Boot. str2: Hello \n Spring Boot. str3: Hello \n Spring Boot.读取 import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;Component public class ReadYml { Value(${string.str1}) private String str1;Value(${string.str2}) private String str2;Value(${string.str3}) private String str3;PostConstructpublic void postConstruct() { System.out.println(string.str1 str1); System.out.println(string.str2 str2); System.out.println(string.str3 str3); } }执行结果 配置对象 student: id: 1 name: Java age: 18# 行内写法 student: {id: 1,name: Java,age: 18}读取对象 ConfigurationProperties # getter 和 setter ⽅法不能省略。import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;ConfigurationProperties(prefix student) Component public class StudentComponent {private int id;private String name;private int age;public int getId() { return id;}public void setId(int id) { this.id id;}public String getName() { return name;}public void setName(String name) { this.name name;}public int getAge() { return age;}public void setAge(int age) { this.age age;}Overridepublic String toString() { return StudentComponent{ id id , name name \ , age age };} }调用类 Component public class ReadYml2 {Autowiredprivate StudentComponent studentComponent;PostConstructpublic void postConstruct() { System.out.println(studentComponent); } }执行结果 配置集合 dbtypes:name:- mysql- sqlserver - db2# ⾏内写法 dbtypes: {name: [mysql,sqlserver,db2]}读取集合 ConfigurationProperties Component ConfigurationProperties(dbtypes) Data public class ListConfig { private ListString name; } 打印类 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;Component public class ReadYml2 { Autowiredprivate ListConfig listConfig;PostConstruct public void postConstruct() { System.out.println(listConfig.getName()); } }6.3.2.3 properties VS yml properties 是以 keyvalue 的形式配置的键值类型的配置⽂件⽽ yml 使⽤的是类似 json 格式的 树形配置⽅式进⾏配置的yml 层级之间使⽤换⾏缩进的⽅式配置key 和 value 之间使⽤“: ”英⽂冒号加空格的⽅式设置并且空格不可省略。properties 为早期并且默认的配置⽂件格式但其配置存在⼀定的冗余数据使⽤ yml 可以很好的 解决数据冗余的问题。yml 通⽤性更好⽀持更多语⾔如 Java、Go、Python 等如果是云服务器开发可以使⽤⼀份 配置⽂件作为 Java 和 Go 的共同配置⽂件。yml ⽀持更多的数据类型。 SpringMVC程序开发 什么是MVC MVC 是 Model View Controller 的缩写它是软件⼯程中的⼀种软件架构模式它把软件系统分 为模型、视图和控制器三个基本部分。 Model模型是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View视图是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。Controller控制器是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据 控制⽤户输⼊并向模型发送数据。 什么是SpringMVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc)但它通常被称为“SpringMVC”。MVC 是⼀种思想⽽ Spring MVC 是对 MVC 思想的具体实现。总结来说Spring MVC 是⼀个实现了 MVC 模式并继承了 Servlet API 的 Web 框架。既然是 Web 框架那么当⽤户在浏览器中输⼊了 url 之后, Spring MVC 项⽬就可以感知到⽤户的请求。Spring MVC 是 Spring 框架的核⼼模块⽽ Spring Boot 是 Spring 的脚⼿架绝⼤部分的 Java 项⽬约等于 Spring MVC 项⽬。在创建 Spring Boot 项⽬时我们勾选的 Spring Web 框架其实就是 Spring MVC 框架。 Spring MVC 创建和连接 Spring MVC 项⽬创建和 Spring Boot 创建项⽬相同Spring MVC 使⽤ Spring Boot 的⽅式创建 在创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项⽬。 Spring MVC 中使⽤ RequestMapping 来实现 URL 路由映射也就是浏览器连接程序的作⽤。 创建 Spring MVC 项⽬ 1 Spring MVC 可以基于 Spring Boot 创建也就是创建⼀个 Spring Boot 项⽬勾选上 Spring Web 模块即可。 2 创建⼀个 UserController 类实现⽤户到 Spring 程序的互联互通 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;Controller // 让 spring 框架启动时加载 ResponseBody // 返回⾮⻚⾯数据 RequestMapping(/user) // 路由器规则注册 public class UserController {// 路由器规则注册 RequestMapping(/hi)public String sayHi(){return h1Hi,Spring MVC./h1; } }3 当访问地址http://localhost:8080/user/hi 时就能打印“hellospring mvc”的信息了。 RequestMapping 注解 RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之⼀它是⽤来注册接⼝的路 由映射的。所谓的路由映射指的是当⽤户访问⼀个 url 时将⽤户的请求对应到程序中某个类 的某个⽅法的过程就叫路由映射。RequestMapping 修饰类 import com.example.demo.model.Person; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;Controller RequestMapping(/p) public class PersonController { RequestMapping(/index)public Object index(Person person){// 获取参数 System.out.println(person.getName() person.getPassword());// 执⾏业务...return /index.html; } }RequestMapping 修饰类修饰⽅法当修饰类和⽅法时访问的地址是类 ⽅法。 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;Controller ResponseBody // 定义返回的数据格式为⾮视图text/html public class UserController { RequestMapping(/hi)public String sayHi(){return h1Hi,Spring MVC./h1;} }⽅法地址http://localhost:8080/hi RequestMapping默认接收GET请求显示的指定 RequestMapping 来接收 POST请求 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody;Controller ResponseBody // 定义返回的数据格式为⾮⻚⾯ public class UserController {RequestMapping(value /hi,method RequestMethod.POST) public String sayHi(){return h1Hi,Spring MVC./h1;} }GET请求的3种写法 // 写法1 RequestMapping(/index)// 写法2 RequestMapping(value /index,method RequestMethod.GET)// 写法3 GetMapping(/index)post 请求的 2 种写法 // 写法1 RequestMapping(value /index,method RequestMethod.POST)// 写法2 PostMapping(/index) 获取参数 传递单个参数 在 Spring MVC 中可以直接⽤⽅法中的参数来实现传参。 示例 RequestMapping(/m1) public Object method_1(String name){ System.out.println(参数 namename); return /index.html; }程序的执⾏结果 传递对象 Spring MVC 可以⾃动实现参数对象的赋值 示例 定义对象 import lombok.Data;Data public class Person { private int id; private String name; private String password; }传递对象代码实现 RequestMapping(/m2) public Object method_2(Person p){ System.out.println(对象中的 namep.getName()); System.out.println(对象中的 passwordp.getPassword()); return /index.html; }前端访问 最终执⾏结果 表单参数传递/传递多个参数(⾮对象) 当有多个参数时前后端进⾏参数匹配时是以参数的名称进⾏匹配的因此参数的位置不影响后端获取参数的结果。 RequestMapping(/m3) public Object method_3(String name, String pwd) { System.out.println(name 参数 name); System.out.println(pwd 参数 pwd); return /index.html; }前台访问地址 后端参数重命名后端参数映射 某些特殊的情况下前端传递的参数 key 和我们后端接收的 key 可以不⼀致⽐如前端传递了⼀个 time 给后端⽽后端⼜是有 createtime 字段来接收的这样就会出现参数接收不到的情况如果出现 这种情况我们就可以使⽤ RequestParam 来重命名前后端的参数值。 RequestMapping(/m4) public Object method_4(RequestParam(time) String createtime) { System.out.println(时间 createtime);return /index.html; }前端访问地址 设置必传参数 如果我们是前端传递⼀个⾮ time 的参数就会出现程序报错的情况 这是因为后端RequestParam 注解已经声明了前端必须传递⼀个 time 的参数但是前端没有给后端传递查看 RequestParam 注解的实现细节⾮必传参数设置 如果我们的实际业务前端的参数是⼀个⾮必传的参数我们可以通过设置 RequestParam 中的 requiredfalse 来避免不传递时报错。 RequestMapping(/m4) public Object method_4(RequestParam(value time, required false) Stri ng createtime) {System.out.println(时间 createtime);return /index.html; }RequestBody 接收JSON对象 后端接收代码 RequestMapping(value /m5, method RequestMethod.POST) public Object method_5(RequestBody Person person) { System.out.println(Person person);return redirect:/index.html; }获取URL中参数PathVariable 后端实现代码 PostMapping(/m6/{name}/{password}) public Object method_6(PathVariable String name, PathVariable String pass word) {System.out.println(name name);System.out.println(password password);return redirect:/index.html; }前端⽅法地址 PostMapping(“/m6/{name}/{password}”) 中的 {password} 参数不能省略。 上传⽂件RequestPart RequestMapping(/param9) public String param9(String name, RequestPart(myfile) MultipartFile fil e) throws IOException {// 获取⽂件后缀名String fileName file.getOriginalFilename().substring(file.getOrigina lFilename().lastIndexOf(.));// ⽂件保存地址String filePath ClassUtils.getDefaultClassLoader().getResource(stat ic).getPath() / UUID.randomUUID() fileName;// 保存⽂件file.transferTo(new File(filePath));return filePath 上传成功.; }获取项⽬⽬录的⼏种⽅式 ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX).getPath();new ClassPathResource().getFile().getAbsolutePath(); ClassUtils.getDefaultClassLoader().getResource().getPath(); ResourceUtils.getFile(classpath:static/).getPath();获取 Request 和 Response 对象 RequestMapping(/param10) public String param10(HttpServletResponse response, HttpServletRequest requ est) {String name request.getParameter(name);// 获取所有 cookie 信息Cookie[] cookies request.getCookies();return name 你好.; }传统获取 header/cookie RequestMapping(/param10) ResponseBody public String param10(HttpServletResponse response, HttpServletRequest requ est) {String name request.getParameter(name);// 获取所有 cookie 信息Cookie[] cookies request.getCookies();String userAgent request.getHeader(User-Agent);return name userAgent; }简洁的获取 Cookie—CookieValue RequestMapping(/cookie) ResponseBody public String cookie(CookieValue(bite) String bite) { return cookie bite; }简洁获取 Header—RequestHeader RequestMapping(/header) ResponseBody public String header(RequestHeader(User-Agent) String userAgent) { return userAgentuserAgent; }Session 存储和获取 Session 存储 RequestMapping(/setsess) ResponseBody public String setsess(HttpServletRequest request) {// 获取 HttpSession 对象参数设置为 true 表示如果没有 session 对象就创建⼀个 sessionHttpSession session request.getSession(true);if(session!null){session.setAttribute(username,java);}return session 存储成功; }读取 Session RequestMapping(/sess) ResponseBody public String sess(HttpServletRequest request) {// 如果 session 不存在不会⾃动创建HttpSession session request.getSession(false);String username 暂⽆;if(session!null session.getAttribute(username)!null){ username (String) session.getAttribute(username);}return usernameusername; }获取 Session 更简洁的⽅式 RequestMapping(/sess2) ResponseBody public String sess2(SessionAttribute(value username,required false) String username) {return usernameusername; }返回数据 默认请求下⽆论是 Spring MVC 或者是 Spring Boot 返回的是视图 xxx.html⽽现在都是前后端分离的后端只需要返给给前端数据即可这个时候我们就需要使⽤ ResponseBody 注解了。 ResponseBody 返回的值如果是字符会转换成 text/html如果返回的是对象会转换成 application/json 返回给前端。 ResponseBody 可以⽤来修饰⽅法或者是修饰类修饰类表示类中的所有⽅法都会返回 html 或者 json⽽不是视图。 组合注解RestControllerRestController Controller ResponseBody。 返回静态⻚⾯ 1 创建前端⻚⾯ index.html !doctype html html langen headmeta charsetUTF-8meta nameviewportcontentwidthdevice-width, user-scalableno, initial-scale1. 0, maximum-scale1.0, minimum-scale1.0meta http-equivX-UA-Compatible contentieedge titlehello,spring mvc/titlescript srcindex.js/script /head bodyh1Hello,Spring MVC./h1 /body /html创建控制器 controller import com.example.demo.model.Person; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;Controller RequestMapping(/p) public class PersonController { RequestMapping(/index) public Object index(){ // 执⾏业务...// 返回view - index.html return /index.html;} }返回 text/html RequestMapping(/m7) ResponseBody public String method_7() { return h1Hello,HTML~/h1; }示例实现计算器功能 使⽤ postman 传递参数或使⽤ form 表单的⽅式提交参数。 前端⻚⾯ !doctype html html langen headmeta charsetUTF-8meta nameviewportcontentwidthdevice-width, user-scalableno, initial-scale1. 0, maximum-scale1.0, minimum-scale1.0meta http-equivX-UA-Compatible contentieedge title计算器示例/title /head bodyform actionhttp://localhost:8080/calc/sumh1计算器/h1数字1input namenum1 typetextbr数字2input namenum2 typetextbrinput typesubmit value 点击相加 /form /body /htmlcontroler代码 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;ResponseBody Controller RequestMapping(/calc) public class CalcController {RequestMapping(/sum)public String sum(Integer num1,Integer num2){return String.format(h1计算的结果是%d/h1a hrefjavascript:h istory.go(-1);返回/a,num1num2);} } 返回 JSON 对象 RequestMapping(/m8) ResponseBody public HashMapString, String method_8() { HashMapString, String map new HashMap(); map.put(Java, Java Value); map.put(MySQL, MySQL Value); map.put(Redis, Redis Value);return map; }示例实现登录功能前端使⽤ ajax后端返回 json 给前端 后端代码 RequestMapping(value /login)ResponseBodypublic HashMapString,Object login(String username, String password){ HashMapString,Object res new HashMap();int succ 200;if(username!null password!null username.equals(admin) password.equals(admin)){ res.put(msg,登录成功);}else{res.put(msg,登录失败);}res.put(succ,succ);return res;}前端代码 !doctype html html langen headmeta charsetUTF-8meta nameviewportcontentwidthdevice-width, user-scalableno, initial-scale1. 0, maximum-scale1.0, minimum-scale1.0meta http-equivX-UA-Compatible contentieedgescript srcjs/jquery-1.9.1.min.js/script titleDocument/titlescriptfunction mysub() {var username jQuery(#username).val();var password jQuery(#password).val(); jQuery.getJSON(/user/login,{username:username, password:password},function (result) {if(result.succ200){ alert(返回结果result.msg);}else{alert(操作失败请重试。);}});}/script /head bodydiv styletext-align: center;h1登录/h1⽤户input idusernamebr密码input idpassword typepasswordbrinput typebutton value 提交 onclickmysub() stylemargin -top: 20px;margin-left: 50px;/div /body /html请求转发或请求重定向 // 请求重定向 RequestMapping(/index) public String index(){return redirect:/index.html; }// 请求转发 RequestMapping(/index2) public String index2(){return forward:/index.html; }转发是服务器帮转的⽽重定向是让浏览器重新请求另⼀个地址 请求重定向redirect将请求重新定位到资源请求转发forward服务器端转发。 请求重定向地址发⽣变化请求转发地址不发⽣变化。 请求重定向与直接访问新地址效果⼀直不存在原来的外部资源不能访问请求转发服务器端转发有可能造成原外部资源不能访问。 请求转发 forward 导致问题演示 请求转发如果资源和转发的⻚⾯不在⼀个⽬录下会导致外部资源不可访问。 Controller RequestMapping(/user) public class UserController { RequestMapping(value /index) public String sayHi(){ return forward:/index.html; } }程序的⽬录 程序的执⾏结果 将转发 foward 换成重定向 redirect⻚⾯就可以正常获取到外部资源 js 了。 import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody;Controller RequestMapping(/user) public class UserController { RequestMapping(value /index) public String sayHi(){ return redirect:/index.html; } }综合示例 示例一使⽤ ajax 实现登录功能⽆需连接数据库如果⽤户名和密码都是 root则显示登录成功可以直 接访问 main ⻚⾯否则显示登录失败。每次访问 main ⻚⾯时验证是否已经登录如果登录了显示 欢迎信息否则让⽤户先去登录⻚⾯登录。 示例二带头像功能的注册功能实现。 6.4 SpringBoot 单元测试 什么是单元测试 单元测试unit testing是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。 单元测试是开发者编写的⼀⼩段代码⽤于检验被测代码的⼀个很⼩的、很明确的代码功能是否正确。执⾏单元测试就是为了证明某段代码的执⾏结果是否符合我们的预期。如果测试结果符合我们的预 期称之为测试通过否则就是测试未通过或者叫测试失败。 可以⾮常简单、直观、快速的测试某⼀个功能是否正确使⽤单元测试可以帮我们在打包的时候发现⼀些问题因为在打包之前所以的单元测试必须通 过否则不能打包成功。使⽤单元测试在测试功能的时候可以不污染连接的数据库也就是可以不对数据库进⾏任何改 变的情况下测试功能。 6.4.1 Spring Boot 单元测试使用 Spring Boot 项⽬创建时会默认单元测试框架 spring-boot-test⽽这个单元测试框架主要是依靠另⼀ 个著名的测试框架 JUnit 实现的 Spring Boot 项⽬创建时⾃动添加。 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependencyspring-boot-starter-test 的 MANIFEST.MF⾥⾯有具体的说明 ⽣成单元测试类 最终⽣成的代码 import org.junit.jupiter.api.Test;class UserControllerTest {Test void save() {} }这个时候此⽅法是不能调⽤到任何单元测试的⽅法的此类只⽣成了单元测试的框架类具体的业务 代码要⾃⼰填充。 添加单元测试代码 1 添加 Spring Boot 框架测试注解SpringBootTest import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;SpringBootTest class UserControllerTest {Test void save() {} }2 添加单元测试业务逻辑 import com.example.demo.model.User; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import javax.annotation.Resource;SpringBootTest class UserControllerTest {Resourceprivate UserController userController;Testvoid save() {User user new User(); user.setId(1);user.setName(Java Test); user.setPassword(123);boolean result userController.save(user); // 使⽤断⾔判断最终的结果是否符合预期 Assertions.assertEquals(true, result); // Assertions.assertTrue(result);} }如果断⾔失败则后⾯的代码都不会执⾏ 6.8 SpringBoot 日志文件 6.8.1 日志的功能 发现和定位问题记录⽤户登录⽇志⽅便分析⽤户是正常登录还是恶意破解⽤户记录系统的操作⽇志⽅便数据恢复和定位操作⼈记录程序的执⾏时间⽅便为以后优化程序提供数据⽀持 6.8.2 日志的使用 Spring Boot 内置了⽇志框架默认情况下使⽤的是 info ⽇志级别将⽇志输出到控制台的。 6.8.3⾃定义⽇志打印 在程序中得到⽇志对象 在程序中获取⽇志对象需要使⽤⽇志⼯⼚ LoggerFactory。 Logger 对象是属于 org.slf4j 包下的不要导⼊错包Spring Boot 中内置了⽇志框架 Slf4j可以直接在程序中调⽤ slf4j 来输出⽇志。 代码示例 private static Logger logger LoggerFactory.getLogger(UserController.class ); 使⽤⽇志对象打印⽇志 // 2.使⽤⽇志打印⽇志 logger.info(--------------要输出⽇志的内容----------------); 6.8.4⽇志级别 6.8.4.1 ⽇志级别的作用 ⽇志级别可以帮你筛选出重要的信息⽐如设置⽇志级别为 error那么就可以只看程序的报错⽇ 志了对于普通的调试⽇志和业务⽇志就可以忽略了从⽽节省开发者信息筛选的时间。⽇志级别可以控制不同环境下⼀个程序是否需要打印⽇志如开发环境我们需要很详细的信息 ⽽⽣产环境为了保证性能和安全性就会输⼊尽量少的⽇志⽽通过⽇志的级别就可以实现此需求。 6.8.4.2 ⽇志级别的分类 trace微量少许的意思级别最低debug需要调试时候的关键信息打印info普通的打印信息默认⽇志级别warn警告不影响使⽤但需要注意的问题error错误信息级别较⾼的错误⽇志信息fatal致命的因为代码异常导致程序退出执⾏的事件 越往上接收到的消息就越少如设置了 warn 就只能收到 warn、error、fatal 级别的⽇志了。 6.8.4.3 ⽇志级别的设置 ⽇志级别配置只需要在配置⽂件中设置“logging.level”配置项即可。⽇志的输出级别默认是 info。 示例 logging: level: root: error import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/user) public class UserController {// 1.得到⽇志对象private static Logger logger LoggerFactory.getLogger(UserController.class);Value(${server.port}) private String port;Value(${spring.datasource.url}) private String url;RequestMapping(/sayhi) public String sayHi() { // 2.使⽤⽇志打印⽇志logger.trace( trace ); logger.debug( debug ); logger.info( info );logger.warn( warn ); logger.error( error );return Hi, url; } }6.8.4.4 日志持久化 在⽣产环境上咱们需要将⽇志保存下来以便出现问题之后追 溯问题把⽇志保存下来的过程就叫做持久化。在配置⽂件中指定⽇志的存储⽬录或者是指定⽇志保存⽂件名之后 Spring Boot 就会将控制台的⽇志写到相应的⽬录或⽂件下了。 示例一 # 设置⽇志⽂件的⽬录 logging:file:path: D:\\home\\ruoyi# 设置⽇志⽂件的⽂件名 logging:file:name: D:\\home\\ruoyi\\spring-1204.log示例二 controller 包下 error 级别以上的⽇志保存到 log_all.log 下将 service 下 warn 级别以上的⽇志保存到 log_all.log 下。 实现的关键步骤 不同包定义不同的⽇志级别。 使⽤⽇志对象打印所有类型的⽇志。 设置固定的⽇志保存⽂件名。 6.8.4.5 使用Lombok输出日志 使⽤ Slf4j 注解在程序中使⽤ log 对象即可输⼊⽇志并且只能使⽤ log 对象才能输出 这是 lombok 提供的对象名。 添加 lombok 依赖 dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version1.18.20/version optionaltrue/optional /dependency输出⽇志 import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/p) Slf4j public class PersonController {RequestMapping(/log)public void loggerTest() { log.error(------------------- error -----------------); } }lombok 原理 打开target目录可以看到 lombok 的更多注解
http://www.pierceye.com/news/780506/

相关文章:

  • 做衣服接订单的网站网站用哪些系统做的
  • 爱美刻在线制作网站罗村网站制作公司
  • 现在网站用什么软件做免费的会计做账系统
  • 国外的包装设计网站三明网站设计
  • 网站源码怎样弄成网站工商登记网站
  • 2016做砸了的小网站一键创建网站
  • 怎么制作网站域名六安网站制作人才招聘
  • 网站建设 启象科技上海公司排名100强
  • 户外旅游网站排名深圳seo专家
  • 娄底建设网站的公司深圳人才招聘网
  • 网站建设和制作网站名称设置
  • 温州外贸网站深圳工程建设交易服务中心网站
  • 网站导航网址大全网页设计模板代码免费
  • 卖机械设备什么网站做推广好做机械有什么兼职网站
  • 全屋定制十大公认品牌有哪些seo页面链接优化
  • 电子商务网站建设基础考试十大营销手段
  • 关于做服饰网站的首页WordPress纯代码添加
  • 网站qq交谈怎么做的公司注册50万和100万
  • 网站推广的电子邮件推广使用ftp修改网站图片
  • 建设宣传家乡的网站跨境电商怎么注册
  • 广州天河区网站建设公司wordpress调用文章描述
  • 网站开发项目策划书制作书签怎么做
  • 做网站组织结构框架例子整站seo优化哪家好
  • 网站内存不足哈尔滨网站优化页面
  • 响应式网站 图片尺寸奇数南宁网站建设业务员
  • 咸宁 网站建设wordpress聚合广告平台
  • 家具展示型网站个人可以做几个网站
  • 建设网站商城需要多少费用注册网页代码
  • 徐州企业网站制作南宁网站建设专家
  • 雨发建设集团有限公司网站wordpress related posts