各种网站建设报价,石家庄网站建设公司,域名里可以建网站,ie10网站后台无法编辑Spring Boot 框架总结
1. springboot的引言 Spring Boot是由Pivotal团队提供的全新框架#xff0c;其设计目的是用来简化Spring应用的 初始搭建以及开发过程。该框架使用了特定的方式来进行配置#xff0c;从而使开发人员不 再需要定义样板化的配置。通过这种方式#xff0…Spring Boot 框架总结
1. springboot的引言 Spring Boot是由Pivotal团队提供的全新框架其设计目的是用来简化Spring应用的 初始搭建以及开发过程。该框架使用了特定的方式来进行配置从而使开发人员不 再需要定义样板化的配置。通过这种方式Spring Boot致力于在蓬勃发展的快速应 用开发领域(rapid application development)成为领导者。 springboot(微框架) springmvc(控制器) spring(项目管理) 2. springboot的特点 创建独立的Spring应用程序 嵌入的Tomcat无需部署WAR文件 简化Maven配置 自动配置Spring 没有XML配置
3. springboot的环境搭建 环境要求: MAVEN 3.xSpring FrameWork 5.xJDK8.x Spring Boot 2.2.x 3.1 项目中引入依赖 !--继承springboot的父项目--parentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.2.5.RELEASE/version/parentdependencies!--引入springboot的web支持--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency/dependencies3.2 引入配置文件
项目中src/main/resources/application.yml
3.3 建包并创建控制器
//在项目中创建指定的包结构
/*com| baizhi| controller */ ControllerRequestMapping(/hello)public class HelloController {RequestMapping(/hello)ResponseBodypublic String hello(){System.out.println(hello world);return hello;}}3.4 编写入口类
//在项目中如下的包结构中创建入口类 Application
/*com| baizhi */SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}}3.5 运行main启动项目
o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8989 (http)
com.baizhi.Application : Started Application in 2.152 seconds (JVM running for 2.611)//说明: 出现以上日志说明启动成功3.6 访问项目
//注意: springboot的项目默认没有项目名
//访问路径: http://localhost:8080/hello/hello4. 启动tomcat端口占用问题
server:port: 8989 #用来指定内嵌服务器端口号context-path: /springboot #用来指定项目的访问路径5. springboot相关注解说明
# Spring boot通常有一个名为 xxxApplication的类,入口类中有一个main方法, 在main方法中使用SpringApplication.run(xxxApplication.class,args)启动springboot应用的项目。# SpringBootApplication 注解等价于: SpringBootConfiguration 标识注解,标识这是一个springboot的配置类EnableAutoConfiguration 自动与项目中集成的第三方技术进行集成ComponentScan 扫描入口类所在子包以及子包后代包中注解 6. springboot中配置文件的拆分
#说明: 在实际开发过程中生产环境和测试环境有可能是不一样的 因此将生产中的配置和测试中的配置拆分开,是非常必要的在springboot中也提供了配置文件拆分的方式. 这里以生产中项名名称不一致为例:生产中项目名为: cmfz测试中项目名为: springboot端口同时为: 8080拆分如下:#主配置文件:application.yml #用来书写相同的的配置server:port: 8080 #生产和测试为同一个端口#生产配置文件:application-pord.ymlserver:context-path: /cmfz#测试配置文件:application-dev.ymlserver:context-path: /springboot 7.springboot中管理对象创建
7.1 管理单个对象 在springboot中可以管理自定义的简单组件对象的创建可以直接使用注解形式创建。 # 1.使用 Repository Service Controller 以及Component管理不同简单对象如: 比如要通过工厂创建自定义User对象:Component
public class User {private String id;private String name;......
} # 2.通过工厂创建之后可以在使用处任意注入该对象如:在控制器中使用自定义简单对象创建Controller
RequestMapping(hello)
public class HelloController {Autowiredprivate User user;......
}7.2 管理多个对象 在springboot中如果要管理复杂对象必须使用Configuration Bean注解进行管理 # 1.管理复杂对象的创建Configuration(推荐)|Component(不推荐)
public class Beans {Beanpublic Calendar getCalendar(){return Calendar.getInstance();}
}# 2.使用复杂对象Controller
RequestMapping(hello)
public class HelloController {Autowiredprivate Calendar calendar;......
}# 注意: 1.Configuration 配置注解主要用来生产多个组件交给工厂管理 (注册形式)2.Component 用来管理单个组件 8. springboot中集成jsp展示
8.1 引入jsp的集成jar包
dependencygroupIdjstl/groupIdartifactIdjstl/artifactIdversion1.2/version
/dependency!--2.2.5 之后最新版本中无须引入--
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactId
/dependencydependencygroupIdorg.apache.tomcat.embed/groupIdartifactIdtomcat-embed-jasper/artifactId
/dependency8.2 引入jsp运行插件
buildfinalNamespringboot_day1/finalName!--引入jsp运行插件--pluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationjvmArguments-Dfile.encodingUTF-8/jvmArguments/configuration/plugin/plugins
/build8.3 配置视图解析器
#在配置文件中引入视图解析器
spring:mvc:view:prefix: / # /代表访问项目中webapp中页面suffix: .jsp 8.4 启动访问jsp页面
http://localhost:8989/cmfz/index.jsp9. springboot集成mybatis
9.1 引入依赖
!--整合mybatis--
dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.1.2/version
/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.12/version
/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.38/version
/dependency说明:由于springboot整合mybatis版本中默认依赖mybatis 因此不需要额外引入mybati版本,否则会出现冲突9.2 配置配置文件
spring:mvc:view:prefix: /suffix: .jspdatasource:type: org.apache.commons.dbcp.BasicDataSource #指定连接池类型driver-class-name: com.mysql.jdbc.Driver #指定驱动url: jdbc:mysql://localhost:3306/cmfz #指定urlusername: root #指定用户名password: root #指定密码9.3 加入mybatis配置
#配置文件中加入如下配置:mybatis:mapper-locations: classpath:com/baizhi/mapper/*.xml #指定mapper配置文件位置type-aliases-package: com.baizhi.entity #指定起别名来的类//入口类中加入如下配置:
SpringBootApplication
MapperScan(com.baizhi.dao) //必须在入口类中加入这个配置
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}
}9.4 建表
CREATE TABLE t_clazz (id varchar(40) NOT NULL,name varchar(80) DEFAULT NULL,no varchar(90) DEFAULT NULL,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8;9.5 开发实体类
public class Clazz {private String id;private String name;private String no;//get set 方法省略....
}9.6 开发DAO接口以及Mapper
public interface ClazzDAO {ListClazz findAll();
}?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.baizhi.dao.ClazzDAOselect idfindAll resultTypeClazzselect * from t_clazz /select
/mapper9.7 开发Service以及实现
//接口
public interface ClazzService {ListClazz findAll();
}
//实现
Service
Transactional
public class ClazzServiceImpl implements ClazzService {Autowiredprivate ClazzDAO clazzDAO;Transactional(propagation Propagation.SUPPORTS)Overridepublic ListClazz findAll() {return clazzDAO.findAll();}
}9.8 引入测试依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope
/dependency9.9 编写测试类
RunWith(SpringRunner.class)
SpringBootTest(classes Application.class)
public class TestClazzService {Autowiredprivate ClazzService clazzService;Testpublic void test(){ListClazz all clazzService.findAll();for (Clazz clazz : all) {System.out.println(clazz);}}
}10.开启jsp页面热部署
10.1 引言 在springboot中默认对jsp运行为生产模式,不允许修改内容保存后立即生效,因此在开发过程需要调试jsp页面每次需要重新启动服务器这样极大影响了我们的效率,为此springboot中提供了可以将默认的生产模式修改为调试模式,改为调试模式后就可以保存立即生效,如何配置为测试模式需要在配置文件中加入如下配置即可修改为开发模式。 10.2 配置开启测试模式
server:port: 8989jsp-servlet:init-parameters:development: true #开启jsp页面的调试模式11.springboot中devtools热部署
11.1 引言 为了进一步提高开发效率,springboot为我们提供了全局项目热部署,日后在开发过程中修改了部分代码以及相关配置文件后,不需要每次重启使修改生效,在项目中开启了springboot全局热部署之后只需要在修改之后等待几秒即可使修改生效。 11.2 开启热部署
11.2.1 项目中引入依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-devtools/artifactIdoptionaltrue/optional
/dependency11.2.2 设置idea中支持自动编译
# 1.开启自动编译Preferences | Build, Execution, Deployment | Compiler - 勾选上 Build project automatically 这个选项# 2.开启允许在运行过程中修改文件ctrl alt shift / ----选择1.Registry --- 勾选 compiler.automake.allow.when.app.running 这个选项11.2.3 启动项目检测热部署是否生效
# 1.启动出现如下日志代表生效2019-07-17 21:23:17.566 INFO 4496 --- [ restartedMain] com.baizhi.InitApplication : Starting InitApplication on chenyannandeMacBook-Pro.local with PID 4496 (/Users/chenyannan/IdeaProjects/ideacode/springboot_day1/target/classes started by chenyannan in /Users/chenyannan/IdeaProjects/ideacode/springboot_day1)
2019-07-17 21:23:17.567 INFO 4496 --- [ restartedMain] com.baizhi.InitApplication : The following profiles are active: dev
2019-07-17 21:23:17.612 INFO 4496 --- [ restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext66d799c5: startup date [Wed Jul 17 21:23:17 CST 2019]; root of context hierarchy
2019-07-17 21:23:18.782 INFO 4496 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8989 (http)
2019-07-17 21:23:18.796 INFO 4496 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-07-17 21:23:18.797 INFO 4496 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.20 注意:日志出现restartedMain代表已经生效,在使用热部署时如果遇到修改之后不能生效,请重试重启项目在试 12. logback日志的集成
12.1 logback简介 Logback是由log4j创始人设计的又一个开源日志组件。目前logback分为三个模块logback-corelogback-classic和logback-access。是对log4j日志展示进一步改进 12.2 日志的级别 DEBUG INFO WARN ERROR 日志级别由低到高: 日志级别越高输出的日志信息越少12.3 项目中日志分类 日志分为两类一种是rootLogger : 用来监听项目中所有的运行日志 包括引入依赖jar中的日志 一种是logger : 用来监听项目中指定包中的日志信息12.4 java项目中使用
12.4.1 logback配置文件 logback的配置文件必须放在项目根目录中 且名字必须为logback.xml?xml version1.0 encodingUTF-8 ?
configuration!--定义项目中日志输出位置--appender namestdout classch.qos.logback.core.ConsoleAppender!--定义项目的日志输出格式--!--定义项目的日志输出格式--layout classch.qos.logback.classic.PatternLayoutpattern [%p] %d{yyyy-MM-dd HH:mm:ss} %m %n/pattern/layout/appender!--项目中跟日志控制--root levelINFOappender-ref refstdout//root!--项目中指定包日志控制--logger namecom.baizhi.dao levelDEBUG//configuration12.4.2 具体类中使用日志
Controller
RequestMapping(user)
public class UserController {private Logger logger org.slf4j.LoggerFactory.getLogger(this.getClass());RequestMapping(findAll)public String findAll(String name) {logger.debug(debug接收的姓名是: name);logger.info(info接收的姓名是: name);logger.warn(warn接收的姓名是: name);logger.error(error接收的姓名是: name);return index;}
}12.4.3 使用默认日志配置
logging:level:root: debugcom.baizhi.dao: debugpath: /Users/chenyannan/aa.logfile: bbb.log13. 切面编程
13.1 引言 springboot是对原有项目中spring框架和springmvc的进一步封装,因此在springboot中同样支持spring框架中AOP切面编程,不过在springboot中为了快速开发仅仅提供了注解方式的切面编程. 13.2 使用
13.2.1 引入依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId
/dependency13.2.2 相关注解
/**Aspect 用来类上,代表这个类是一个切面Before 用在方法上代表这个方法是一个前置通知方法 After 用在方法上代表这个方法是一个后置通知方法 Around 用在方法上代表这个方法是一个环绕的方法Around 用在方法上代表这个方法是一个环绕的方法
**/13.2.3 前置切面
Aspect
Component
public class MyAspect {Before(execution(* com.baizhi.service.*.*(..)))public void before(JoinPoint joinPoint){System.out.println(前置通知);joinPoint.getTarget();//目标对象joinPoint.getSignature();//方法签名joinPoint.getArgs();//方法参数}
}13.2.4 后置切面
Aspect
Component
public class MyAspect {After(execution(* com.baizhi.service.*.*(..)))public void before(JoinPoint joinPoint){System.out.println(后置通知);joinPoint.getTarget();//目标对象joinPoint.getSignature();//方法签名joinPoint.getArgs();//方法参数}
}**注意: 前置通知和后置通知都没有返回值,方法参数都为joinpoint**13.2.5 环绕切面
Aspect
Component
public class MyAspect {Around(execution(* com.baizhi.service.*.*(..)))public Object before(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {System.out.println(进入环绕通知);proceedingJoinPoint.getTarget();//目标对象proceedingJoinPoint.getSignature();//方法签名proceedingJoinPoint.getArgs();//方法参数Object proceed proceedingJoinPoint.proceed();//放行执行目标方法System.out.println(目标方法执行之后回到环绕通知);return proceed;//返回目标方法返回值}
}注意: 环绕通知存在返回值,参数为ProceedingJoinPoint,如果执行放行,不会执行目标方法,一旦放行必须将目标方法的返回值返回,否则调用者无法接受返回数据 14. 文件上传下载
14.1 文件上传
13.1.1 准备上传页面
form action路径.... methodpost enctypemultipart/form-datainput typefile nameaainput typesubmit value上传
/form
!--1. 表单提交方式必须是post2. 表单的enctype属性必须为multipart/form-data3. 后台接受变量名字要与文件选择name属性一致
--14.1.2 编写控制器
Controller
RequestMapping(/file)
public class FileController {RequestMapping(/upload)public String upload(MultipartFile aa, HttpServletRequest request) throws IOException {String realPath request.getRealPath(/upload);aa.transferTo(new File(realPath,aa.getOriginalFilename()));//文件上传return index;}
}14.1.3 修改文件上传大小
#上传时出现如下异常: 上传文件的大小超出默认配置 默认10M
nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (38443713) exceeds the configured maximum (10485760)
#修改上传文件大小:
spring:http:multipart:max-request-size: 209715200 #用来控制文件上传大小的限制max-file-size: 209715200 #用来指定服务端最大文件大小 14.2 文件下载
14.2.1 提供下载文件链接
a href../file/download?fileNamecorejava.txtcorejava.txt/a14.2.2 开发控制器
RequestMapping(/download)
public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {String realPath request.getRealPath(/upload);FileInputStream is new FileInputStream(new File(realPath, fileName));ServletOutputStream os response.getOutputStream();response.setHeader(content-disposition,attachment;fileName URLEncoder.encode(fileName,UTF-8));IOUtils.copy(is,os);IOUtils.closeQuietly(is);IOUtils.closeQuietly(os);}15. 拦截器
15.1 开发拦截器
public class MyInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {System.out.println(1);return true;//返回true 放行 返回false阻止}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {System.out.println(2);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception {System.out.println(3);}
}15.2 配置拦截器
Component
public class InterceptorConfig implements WebMvcConfigurer {//用来加入拦截器相关配置 参数1:InterceptorRegistry 拦截器注册对象Overridepublic void addInterceptors(InterceptorRegistry registry) {//添加那个拦截器registry.addInterceptor(new MyInterceptor1()).addPathPatterns(/**)//拦截所有控制器请求.excludePathPatterns(/user/findAll);//排除指定的请求;registry.addInterceptor(new MyInterceptor2()).addPathPatterns(/**)//拦截所有控制器请求.excludePathPatterns(/user/findAll);//排除指定的请求;}
}16. war包部署
16.1 设置打包方式为war war 16.2 在插件中指定入口类
buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId!--使用热部署出现中文乱码解决方案--configurationforktrue/fork!--增加jvm参数--jvmArguments-Dfile.encodingUTF-8/jvmArguments!--指定入口类--mainClasscom.baizhi.Application/mainClass/configuration/plugin/plugins
/build 16.3 排除内嵌的tomcat
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactIdscopeprovided/scope !--去掉内嵌tomcat--
/dependencydependencygroupIdorg.apache.tomcat.embed/groupIdartifactIdtomcat-embed-jasper/artifactIdscopeprovided/scope !--去掉使用内嵌tomcat解析jsp--
/dependency16.4 配置入口类
//1.继承SpringBootServletInitializer
//2.覆盖configure方法
public class Application extends SpringBootServletInitializer{public static void main(String[] args) {SpringApplication.run(Application.class,args);}Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(Application.class);}
}16.5 打包测试
/* 一旦使用war包部署注意:1. application.yml 中配置port context-path 失效2. 访问时使用打成war包的名字和外部tomcat端口号进行访问项目
*/