1: 概念
-
springboot: 约定大于配置 : 去繁就简
-
javaweb: jsp+servlet
-
ssm: 对action和dao进行封装 配置麻烦
-
springboot: 简化配置
-
设计目的是用来简化新spring应用的初始化搭建以及开发过程.改框架使用了特定的方式来进行配置,从而使开发人员不需要定义样版化的配置.通过这种方式,spring boot致力于在蓬勃发展的快速应用开发领域(rapid application development)称为领导者.
特点:
-
(1) 可以创建独立的[spring]应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
-
(2) 内嵌Tomcat或Jetty等Servlet容器,
-
(3) 提供自动配置的"starter"项目对象模型(poms)以简化[Maven]配置;为各种应用场景设置了不同的启动器
-
(4)尽可能自动配置Spring容器;
-
(5)提供准备好的特性,如指标、健康检查和外部化配置;
-
(6)绝对没有代码生成,不需要xml配置
-
为所有 Spring 开发提供一个更快更广泛的入门体验
-
springboot框架中还有俩个非常重要的策略: 开箱即用和约定大于配置.
开箱即用(Outofbox):是指在开发过程中,通过在Maven项目的pom文件中添加相关依赖的包,然后使用对应注解来代替繁琐的xml配置文件以管理对象的生命周期。这个特点使得开发人员摆脱了复杂的配置工作以及依赖的管理工作,更加专注与业务逻辑。 -
约定大于配置(Convention over configuration):是一种由Springboot本身来配置目标结构,由开发人员在结构中添加信息的软件设计方式.这一特点虽然降低了部分灵活性,增加了bug定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的xml配置,并且可以将代码编译、测试和打包等工作自动化。
2: 案例一
-
new model —>spring initializr
-
指定项目的id
- 选择技术
-
存放位置
-
项目结构 就是典型的maven项目
-
创建action
- action所在位置必须是启动类的同一个包/子包下
package com.zhiyou100.action;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class Test01 {
@RequestMapping("/test01.action")
@ResponseBody
public String test01Method(){
return "hello spring-boot231";
}
}
- 创建静态页面
- 静态页面可以有四个位置
- 静态页面可以有四个位置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1><a href="/test01.action">hello spring-boot:::111</a></h1>
</body>
</html>
-
运行启动类: 发布项目
-
查看控制台:
-
项目port:8080 项目context-path: “”
-
访问
默认欢迎页是:index.html
3: springboot的热部署
- 修改settings
- 修改registry
在编辑器中同时按四个键:alt+shift+ctrl+? 然后选择第一个选项registry
- 在pom.xml中添加依赖
<!--添加热部署依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
- 在pom.xml中修改maven插件的配置
<!--引入maven的插件:实现maven对项目构建的管理-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--以下配置是:热部署-->
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
- 测试成功,热部署配置成功
4: springboot自定义logo
- 上网搜索spring boot banner获取需要的图形文本
;, .,, ,,;, ,,
'||: :||||;;;::; ,,, ;|;
,||,;;, || || '||| ||'
;|||;||;;'' ||||||;|| ,|| ,||' ,,,|||,
'''|||;,, ||'' || ||',, ,|'||||' ,|||'
,|;||'|;; ||||||;|| ,||||| ' || ''
;;':|| '';||'' || ,,|||'|| ||' ||
.'' :|; :|||||;;;' '|'' |,,|' , || '||,
, .'' .,, '''.,, ,|||, || || '|||
|| |; ';|;, '||;, ,|||, :||; || '|||
;|| '|; ';;: '|;;; ,||'' |||'||' || ||
:|| '|;, ., '' '' '' ' ,,,||
'' '|;;:,,,,,,,,||, '|||
''::::::::'' '''
Thinking of you (Chinese: xiǎng nǐ)
--by zaneau@hk.net (Zane Au)
-
在resources目录下创建一个文件: banner.txt
-
重启项目,显示效果
5: 配置基本参数
- 设置参数 都在application.properties 文件中
server.servlet.context-path=/test10
server.port=8081
6 : action方法的参数类型
完全和springmvc的action一致
- 单值类型参数: 接受同名的请求参数
- 对象类型参数: 通过属性接受同名的请求参数
- httpservletrequest: 1获取请求参数 2 获取请求头 3 请求转发/请求包含 4 作为域对象 5 其他方法
- httpservletresponse: 1 设置响应头 2 设置响应体 3 重定向 4 其他方法
- httpsession: 1 域对象 2 清空session 3 获取servletcontext
- model: request的域对象
action
package com.zhiyou100.action;
import com.zhiyou100.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @author solang
* @date 2021-06-17 19:15
*/
@Controller
public class Test02 {
// 单值类型参数: 接受同名的请求参数
@RequestMapping("/test021.action")
@ResponseBody
public String method1(Integer sid,String sname,Float score){
return "method1:sid="+sid+",sname="+sname+",score="+score;
}
//对象类型参数: 通过属性接受同名的请求参数
@RequestMapping("/test022.action")
@ResponseBody
public String method2(Student student){
return "method1:"+student;
}
// httpservletrequest:1 获取请求参数 2 获取请求头 3 请求转发/请求包含 4 作为域对象 5 其他方法
@RequestMapping("/test023.action")
@ResponseBody
public String method3(HttpServletRequest req)throws Exception{
req.setCharacterEncoding("utf-8");
return "method3:"+req.getParameter("sid")+":"+req.getParameter("sname")+":"+req.getParameter("score");
}
// httpservletresponse: 1 设置相应头 2 设置相应体 3 重定向 4 其他方法
@RequestMapping("/test024.action")
@ResponseBody
public void method4(HttpServletRequest req,HttpServletResponse resp)throws Exception{
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf_8");
resp.setContentType("text/html;charset=utf-8");
String message="method4:"+req.getParameter("sid")+":"+req.getParameter("sname")+":"+req.getParameter("score");
resp.getWriter().println(message);
}
// httpsession:1 域对象 2 清空session 3 获取servletcontext
@RequestMapping("/test025.action")
@ResponseBody
public String method5(Student student, HttpSession session)throws Exception{
session.setAttribute("student",student);
return session.getAttribute("student").toString();
}
// model : request的域对象
@RequestMapping("/test026.action")
@ResponseBody
public String method6(Student student, Model model){
model.addAttribute("student",student);
return model.getAttribute("student").toString();
}
}
页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<a href="/test021.action?sid=101&sname=tom&sex=1&score=11">请求test021.action</a><br/>
<a href="/test022.action?sid=101&sname=tom&sex=0&score=11">请求test022.action</a><br/>
<a href="/test023.action?sid=101&sname=tom&sex=0&score=11">请求test023.action</a><br/>
<a href="/test024.action?sid=101&sname=tom&sex=0&score=11">请求test024.action</a><br/>
<a href="/test025.action?sid=101&sname=tom&sex=0&score=11">请求test025.action</a><br/>
<a href="/test026.action?sid=101&sname=tom&sex=0&score=11">请求test026.action</a><br/>
</body>
</html>
7 : action方法返回值类型
- String : 请求转发的页面的逻辑路径
- ModelAndView : 封装了相应视图的路径和request域对象
- void
- json @responsebody
package com.zhiyou100.action;
import com.zhiyou100.entity.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author solang
* @date 2021-06-17 21:42
*/
@Controller
@RequestMapping("/t3")
public class Test03 {
//Model And View: 封装了相应视图的路径和request域对象
@RequestMapping("/m1.action")
public ModelAndView method01(){
System.out.println("m1::::请求转发到success.html:");
ModelAndView view=new ModelAndView();
view.setViewName("/success.html");
return view;//请求转发到页面
//测试结论:springboot的默认视图解析器: prefix和suffix都是
}
//void
@RequestMapping("/m2.action")
public void method02(HttpServletRequest req, HttpServletResponse resp)throws Exception{
System.out.println("m2:::请求转发到success.html");
req.getRequestDispatcher("/success.html").forward(req,resp);
}
// json @responsebody
@RequestMapping("/m3.action")
@ResponseBody
public Student method03() throws Exception{
return new Student(101,"张三",11f,1);
}
//String : 1 响应一个字符串
@RequestMapping("/m4.action")
@ResponseBody
public String method04() throws Exception{
return new Student(101,"张三",11f,1).toString();
}
// String : 2 请求转发到逻辑路径/真实路径
@RequestMapping("/m5.action")
public String method05() throws Exception{
return "/success.html";
}
//String : 3 请求转发action/html
@RequestMapping("/m6.action")
public String method06()throws Exception{
return "forward:/t3/m3.action";
}
//String : 4 重定向到action.html
@RequestMapping("/m7.action")
public String method07() throws Exception{
return "redirect:/t3/m3.action";
}
}
请求页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>测试action的返回值</h1>
<a href="/t3/m1.action">请求/t3/m1.action</a><br/>
<a href="/t3/m2.action">请求/t3/m2.action</a><br/>
<a href="/t3/m3.action">请求/t3/m3.action</a><br/>
<a href="/t3/m4.action">请求/t3/m4.action</a><br/>
<a href="/t3/m5.action">请求/t3/m5.action</a><br/>
<a href="/t3/m6.action">请求/t3/m6.action</a><br/>
<a href="/t3/m7.action">请求/t3/m7.action</a><br/>
</body>
</html>
响应页面:success.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>success页面</h1>
</body>
</html>
8 : 使用lombok
lombok插件:给实体类提供基本的方法:有参/无参的构造方法 tostring方法 getset方法
- 在pom.xml
<!--引入lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
- 需要在idea中配置lombok的插件