5.1 spring程序与springBoot程序对比
boot程序不需要依赖tomcat和idea工具等,只需要将jar包发给前端人员,然后连接数据就行
5.2 打包运行
1.使用maven打包
2.找到jar包
3.启动程序
1.起步依赖
2.辅助功能
3.启动方式
4.换一个服务器
使用jetty:轻量级,用的东西比较少时使用,因为需要自己配置
tomcat:里面配置了很多的东西,一般使用是需要配置很多的配置项
本身是一个配置类:
@SpringBootConfiguration
当前启动类可以扫描其他的配置类:扫描范围是同包或者子包
@EnableAutoConfiguration
启动类可以扫描其他的组件,并应用:扫描范围是同包或者子包
@ComponentScan
过滤
@Filter
3.1.创建git仓库
3.2.赋值仓库的地址
3.3.在本地的仓库中克隆此仓库
正在上传…重新上传取消
3.4.克隆后,创建一个项目
3.5.创建项目后,忽略不用上传的东西
3.6.上传项目
4.1.git 常用的命令表
4.2.git 命令进行项目的上传
git status
git add *
git status
git commit -m "2022-08-16 创建spring项目"
git status
git push origin master
5.1.maven仓库(Jar仓库)
远程jar仓库
本地jar仓库:
依赖的三要素:groupId、artifactId、version
maven软件读取项目pom.xml文件,根据依赖,从远处仓库下载依赖到本地仓库
项目依赖本地仓库,根据三要素 在本地仓库寻找响应的依赖包
clean: 清除target
cleaninstall:清除,安装时将项目打成jar包,打包的位置是本地仓库和target
-D maven -test.skap :在安装时
5.2.代码仓库
远程的代码仓库:gitee
本地代码仓库:repository_git(防止项目的代码文件夹)/仓库的文件夹/项目的文件夹
1.1定义
REST(Representational State Tranfer),表示形式转换,也就是访问网络资源的格式。
http://localhost/user/getuserId?id=1 http://localhost/user/saveUser
http://localhost/user/1 http://localhost/user
1.2.REST风格的行为
路径+请求方式=行为
使用RESTful进行开发
spring支持的8种提交方式
2.1 修改删除增加
2.2 设定参数请求参数(路径变量)
2.3 注解格式
1.@RequestMapping
2.@PathVariable
2.4 接收参数的注解区别
简化代码
3.1.提出公共路径和@ResonseBody注解
在类上提出到类上,@ResponseBody也是提出来写到类的上方,表示类中所有的方法都可以引用。
但是由@controller和@ResonseBody一起的,所以可以用他们的共讨那个父类,替换两者,父类是@RestController
3.2 简化method
@RestController
@RequestMapping("/book")
public class UserController {
// @RequestMapping(method = RequestMethod.POST)
@PostMapping
public String save(@RequestBody Book book){
System.out.println("user save。。。。。"+book);
return "{'module','spring mvc'}";
}
// @RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
@DeleteMapping("/{id}")
public String delete(@PathVariable Integer id){
System.out.println("user del "+id);
return "{'module','spring mvc'}";
}
}
3.3 简化的注解两个
1.@RestController
2.请求方式的注解
/**
* 方法的描述:/test/helloworld
* 参数列表: get
* 返回值说明: string
* @return
*/
- java -jar *.jar || java -jar *.war;
- java -jar ***.jar --server.port=9090 ---- 设置端口;
- java -jar ***.jar --spring.profiles.active=dev ---- 设置环境;
- java -jar ***.jar --spring.config.location=/opt/config/application.properties ---- 指定外部配置文件;
- 内置:Jar 包 ---- 执行 Main 方法 ---- 启动 IOC ---- 启动 Servlet 容器;
- 外置:War 包 ---- 启动 Servlet 容器 ---- 执行 Main 方法 ---- 启动 IOC;
问题:
解决方案:
org.springframework.boot
spring-boot-starter-tomcat
provided
@SpringBootApplication
public class JavaSpringBootApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(JavaSpringBootApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(JavaSpringBootApplication.class, args);
}
}
@SpringBootApplication
public class JavaSpringBootApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(JavaSpringBootApplication.class); }
public static void main(String[] args) {
// SpringApplication.run(JavaSpringBootApplication.class, args);
SpringApplication springApplication = new SpringApplication(JavaSpringBootApplication.class);
springApplication.setBannerMode(Banner.Mode.OFF);
springApplication.run(args);
}
}
ASCII ----单字节编码0-127 ,键盘上
Iso8859-1 ------单字节
GBK ----
因为太多的编码格式出现乱码,所以使用
unicode -----多字节定长编码,也会出现异常
utf-8 -----多字节变长编码
所以在配置application时就不要使用中文
此时生效是application.properties文件中配置的接口生效
此时放在src/main/resources/config 下 的配置文件生效。
重点:
使用 @Value 注解读取配置文件属性,注意 key 命名不能用 com.thornBird 驼峰法命名,需用.或者-间隔;
server.port=80
# for test
com.sfac.name=eternity
com.sfac.age=18
com.sfac.desc=${com.sfac.name}----${com.sfac.age}
com.sfac.random=${random.uuid}
@Controller
public class TestController {
@Value("${com.sfac.name}")
private String name;
@Value("${com.sfac.age}")
private int age;
@Value("${com.sfac.desc}")
private String desc;
@Value("${com.sfac.random}")
private String random;
/**
* localhost
* /test/config
* get
* @return
*/
@GetMapping(value = "/test/config")
@ResponseBody
public String configTest(){
StringBuffer sb = new StringBuffer();
sb.append(name).append("---")
.append(age).append("---")
.append(desc).append("---")
.append(random).append("---").append("");
return sb.toString();
}
}
接下来测试,启动项目访问接口:http://127.0.0.1/test/config
# for test
org.sfac.name=eternity1
org.sfac.age=19
org.sfac.desc=${com.sfac.name}----${com.sfac.age}
org.sfac.random=${random.uuid}
@Component
@PropertySource(value = "classpath:config/applicationTest.properties")
//这时的classpath是指在target的地方的路径
public class ApplicationTest {
@Value("${org.sfac.name}")
private String name;
@Value("${org.sfac.age}")
private int age;
@Value("${org.sfac.desc}")
private String desc;
@Value("${org.sfac.random}")
private String random;
public String getName() {
return name;
}
生成他们的set与get方法自己生成,此处省略
}
@Controller
public class TestController {
//注入ApplicationTest这个bean
@Autowired
private ApplicationTest applicationTest;
/**
* 方法的描述:/test/helloworld
* 参数列表: get
* 返回值说明: string
* @return String
*/
@GetMapping(value = "/test/helloworld")
@ResponseBody
public String HelloWorld(){
return "Hello World";
}
/**
* localhost
* /test/config
* get
* @return
*/
@GetMapping(value = "/test/config")
@ResponseBody
public String configTest(){
StringBuffer sb = new StringBuffer();
sb.append(
applicationTest.getName()).append("---")
.append(applicationTest.getAge()).append("---")
.append(applicationTest.getDesc()).append("---")
.append(applicationTest.getRandom());
return sb.toString();
}
启动项目访问接口:http://127.0.0.1/test/config
${pattern}
${pattern}
${root}/${project}_${env}_%d.%i.log
${maxHistory}
${fileSize}
#for log
logging.config=classpath:config/logback.xml
@Controller
public class TestController {
private final static Logger LOGGER = LoggerFactory.getLogger(TestController.class);
// LOGGER 的构造方法参数是 Class,是根据类的结构来进行区分日志,所以一个类只要一个 LOGGER,故 static
// final 表示一种编程习惯,表示该类的 LOGGER 只是记录该类的信息,否则日志会无法提供可以令人信服的记录
// final 不可变,读取速度快
// static 静态,只创建一次,节省空间
@RequestMapping(value = "/test/log")
@ResponseBody
public String logTest(){
LOGGER.trace("This is trace loger");
LOGGER.debug("This is debug loger");
LOGGER.info("This is info loger");
LOGGER.warn("This is warn loger");
LOGGER.error("This is error loger");
return "Log Test!";
}
}
YAML(YAML Ain`t Markup Language) ,一种数据序列号格式
优点:
YAML文件的扩展名:
#配置端口号 server: port: 82 # 配置日志 logging: level: root:info #数组数据 likes: - music - geme - run
这种方式是框架内部使用多
如果在自动装配时出现警告,加入一下坐标到pom.xml文件中
#设置启动的环境
spring:
profiles:
active: div
---
#开发
spring:
profiles: dev
server:
port: 80
#开发
spring:
config:
activate:
on-profile: dev
server:
port: 80
打包前先去clean一下。要注意备份配置文件。
带参数启动springBoot
maven中和springBoot中的配置环境谁起作用,启动jar包的话,执行package的指令后,maven的profile起主导作用,springBoot 的profile是打包时的工具
maven为主,springBoot为辅。
简介:在实际开发过程中,每次修改代码就得重启项目,对于一些大型应用来说,需要花费大量的时间成本,在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,我们采用 Devtools 工具包完成热部署,操作简单,每次变更代码自动重启项目;
org.springframework.boot
spring-boot-devtools
dev tools
#热部署生效
spring.devtools.restart.enabled=true
#设置重启的目录
spring.devtools.restart.additional-paths=src/main/java
自建证书、创建配置类、配置连接器、并将连接器注入容器中
静态资源配置
是将本地的静态文件映射给系统的一个路径
1.在全局配置中配置
#for port
server.port=443
server.http.port=80
#for ssl 认证
server.ssl.key-store=classpath:.keystore
server.ssl.key-store-password=123456
2.访问资源
https://127.0.0.1:80/test/log
https://127.0.0.1:443/test/log
出现不安全的提示,就表示测试成功
keytool -genkey -alias tomcat -keyalg RSA 创建别名为 tomcat 的一条证书,指定使用 RSA 算法, 生成文件 C:\Users\XXX\.keystore; 如果该目录已经有了 .keystore,创建不成功,删除后再次创建;
keytool -genkey -alias tomcat -keyalg RSA
server.ssl.key-store=classpath:.keystore
server.ssl.key-store-password=123456
server.port=443
server.http.port=80
@Configuration
@AutoConfigureAfter({WebMvcAutoConfiguration.class})
public class WebMvcConfig {
@Value("${server.http.port}")
private int httpPort;
@Bean
public Connector connector(){
Connector connector = new Connector();
connector.setPort(httpPort);
connector.setScheme("http");
return connector;
}
@Bean
public ServletWebServerFactory servletWebServerFactory(){
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addAdditionalTomcatConnectors(connector());
return factory;
}
}
访问路径: 127.0.0.1/springboot_static_repo/2.png
上传图片----写道绝对路径地址---的那会url的路径地址(/static/1.jpg)--通过映射路径地址和文件相对路径拼接。/static/** + 1.jpg
1.映射路径地址前缀 /static/
2.映射路径 /static/**
3.Windows系统本地绝对路径地址
4.Linux系统本地绝对路径地址
#for static resource
spring.resource.path=/static/
spring.resource.pathPattern=/static/**
spring.resource.window.path=D:/repository/springboot_static_repo/
spring.resource.linux.path=/static/
@Component
public class ResourceConfigBean {
@Value("${spring.resource.path}")
private String resourcepath;
@Value("${spring.resource.pathPattern}")
private String resourcepathPattern;
@Value("${spring.resource.window.path}")
private String localPathForWin;
@Value("${spring.resource.linux.path}")
private String localPathForLin;
set和get方法
}
@Configuration
@AutoConfigureAfter({WebMvcAutoConfiguration.class})
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private ResourceConfigBean resourceConfigBean;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//将本地的文件夹映射给系统一个相对的路径
// 提供了一个注册器,注册一个文件夹为系统的一个路径,把本地的路径映射给系统的一个相对路径
String osname = System.getProperty("os.name");
if (osname.toLowerCase().startsWith("win")){
registry.addResourceHandler(resourceConfigBean.getResourcepathPattern())
.addResourceLocations(ResourceUtils.FILE_URL_PREFIX+resourceConfigBean.getLocalPathForWin());
}else {
registry.addResourceHandler(resourceConfigBean.getResourcepathPattern())
.addResourceLocations(ResourceUtils.FILE_URL_PREFIX+resourceConfigBean.getLocalPathForLin());
}
}
}
首先知道同源和跨域是什么?
同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。它是一个安全策略。所有支持JavaScript的浏览器都会使用这个策略
满足同源的三个条件:
所谓同源是指,域名、协议、端口相同。
跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
注意:跨域限制访问,其实是浏览器的限制
1.页面:访问不同源的东西
2.后端:在配置类中去实现接口的方法,设置所有的源
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedOriginPatterns("*")
.allowedMethods("*")
.maxAge(3600);
}
我会继续更新,有需要完整版笔记的猿猿可以在点击下面的地址在语雀app中去获取哟:
语雀:
https://www.yuque.com/docs/share/10a4736b-ac41-41d3-961a-273c4cb6c6c7?# 《springBoot阶段学习》密码:ggc4