springBoot入门

springBoot入门到精通

1.springBoot前期准备

  • 1.环境配置:jdk,maven
  • 2.编写工具:sts(Spring Tool Suite)
  • 3.在sts里面配置maven
    以上百度自行解决

2.使用springBoot APi自动创建第一个maven项目

  • 1.进入这个网址:https://start.spring.io/
  • 2.进行如下配置:点击查看
  • 3.下载好刚刚创建的Maven项目止之后进行导入:
    右单击->import->maven->exsiting Maven projects->选中项目文件夹 点击导入即可

判断是否导入成功的标志是:

打开java目录下的.java文件,运行,控制台出现以下内容即视为导入成功 点击查看运行结果

下面讲一下创建的项目每一个文件夹所存放以及用于存放的内容

  • 点击查看

springBoot运行程序时如果发现端口号被占用的问题,请参考文档

  • 解决端口号被占用的问题.docx

如果在浏览器上运行时出现:

Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Jun 30 17:24:02 CST 2015 There was an unexpected error (type=Not Found, status=404). No message available

       
       
       
       
       
       
       
       
  • 1

那么就是因为你所创建的包不在springboot的主配置类所在包内,点击查看详情

  • 什么叫做springboot的主配置类

    含有注解@SpringBootApplication的类,比如默认创建好的主配置类是这样子的:

package com.test.HelloWord;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloWordApplication {
	public static void main(String[] args) {
		SpringApplication.run(HelloWordApplication.class, args);
	}
}

       
       
       
       
       
       
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

要想使用注解,创建的包必须全部在package com.test.HelloWord内部

举一个例子

  • 有效的包名:package com.test.HelloWord.controller;
  • 无效的包名:package com.test.controller;

下面讲一下常见的一些注解:

  • @SpringBootApplication:springboot的主配置类,该注解包含:

1.@SpringBootConfiguration ------- 2. @EnableAutoConfiguration

1.@SpringBootConfiguration

这个注解又包含:

@Configuration,它表示配置类:

  • 该类是一个配置类
  • 加了这个注解会自动放入spring 容器
  1. @EnableAutoConfiguration:使用springBoot可以自动配置,摆脱了ssm中使用spring.xml,mybatis.xml,以及springmvc.xml文件配置的繁琐,工作原理就是就是找到主配置类所在的包,并将该包以及所在的子包纳入控制器

spring 在启动时会根据D:\MAVENRes\org\springframework\boot\spring-boot-autoconfigure\2.1.0.RELEASE\spring-boot-autoconfigure-2.1.0.RELEASE.jar下面的/META-INF/spring.factories自动加载第三方jar包

@Conditional注解:

  • @ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
  • @ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
  • @ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
  • @ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
  • @ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
  • @ConditionalOnNotWebApplication(不是web应用)
  • 更多注解请参考 @Controller扩展注解

如何知道系统中开启了那些自动装配,或者禁止了哪些自动装配

在application.properties加入debug=true即可

  • Positive matches:中包含了所有开启的配置
  • Negative matches:中包含了所有未开启的配置

3.配置文件以及ymls使用

1.配置文件的作用:就是对默认的配置进行修改

2.默认的全局配置文件:

  • 1.application.properties 如何使用:key=value的形式
  • 2.application.yml key:空格value(注意yml不是文本标记语言,什么是文本标记语言:xml文件就是文本标记语言,因为xml文件符合下面这种格式:)

    8888
    

       
       
       
       
       
       
       
       
  • 1
  • 2
  • 3

而yml如何实现更改端口,参考下面代码:

server:
       port: 8888   注意‘:’与8888之间存在空格

       
       
       
       
       
       
       
       
  • 1
  • 2

要注意port要与server垂直对齐

3.具体如何修改默认配置举一个小例子:

默认端口是8080,如果我想修改成其他的端口号只需要这步操作即可:
server.port=8081,只需要这一句话即可以把端口号改为8081

       
       
       
       
       
       
       
       
  • 1
  • 2

4.在yml文件中对象属性进行操作:

直接看代码:

package com.test.HelloWord.po;
@Component//作用是将此bean放入spring容器
@ConfigurationProperties(prefix="StudentPo")//作用是将StudentPo能够被yml文件识别,并能对其进行属性的注入
public class StudentPo {
	private String name;
	private int age;
	private boolean sex;
	private Data birthday;
	private Map location;
	private String hobbbies[];
	private List skills;
	private PetPo pet;
	此处省略构造函数以及get set方法
}

       
       
       
       
       
       
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

而yml文件中的内容如下:

StudentPo:
 name: zx
 age: 21
 sex: true 
 birthday: 2018/11/21
 location: {province: 江苏省,city: 南京市,zone: 玄武区}//注:这种是对map函数的赋值方法,此处虽然没有加引号,但是如果字段里面有转意符,比如\n,\t等,要想使转意生效,就必须加双引号
 hobbbies: 
  - 唱歌
  - 运动         //这种是对数组进行赋值的方法
 skills:
  - 计算机
  - 软件开发    //这种是对数组进行赋值的方法
 pet:
  nickName: luckliy
  strain: 哈士奇      //这种是对属性为对象的赋值方法

       
       
       
       
       
       
       
       
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

测试语句如下:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWordApplicationTests {
	@Autowired
	StudentPo stu;//由于已经将student加上注解:@Component//作用是将此bean放入spring容器,所以可以进行自动注入
	@Test
	public void contextLoads() {
		System.out.println(stu.toString());
	}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4.yml通过@ConfigurationProperties 和@Value方式注入值

  • @ConfigurationProperties:是为了能够让配置文件识别这个对象
  • @Value:是给单个属性赋值
    @Value用法:
public class StudentPo {
	@Value("zx")//加上这条注解之后name的值就变为zx
	private String name;
	@Value("23")//age就变为23
	private int age;
	}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# @ConfigurationProperties @Value
注值 批量注入 单个
spEL 不支持 支持
JSR303 支持 不支持
注入复杂类型 支持 不支持

复杂类型:除了(8个基本类型,String,Date类型以外的都是复杂类型)

下面重点讲解一下JSR303校验的用法:

@Component//作用是将此bean放入spring容器
@ConfigurationProperties(prefix="student")//作用是将StudentPo能够被yml文件识别,并能对其进行属性的注入
@Validated//开启jsr303数据校验
public class StudentPo {
	@Email
	private String emial
	}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

通过注解@PropertySource来加载不是默认配置文件的文件,注:默认配置文件只有两种:

  • application.properties
  • application.yml
  • 除此之外都不是默认配置文件
    具体如何使用@PropertySource,参考下面代码

先看看conf.properties

student.age=66

   
   
   
   
   
   
   
   
  • 1

再接着看如何使用:

@Component//作用是将此bean放入spring容器
@ConfigurationProperties(prefix="student")//作用是将StudentPo能够被yml文件识别,并能对其进行属性的注入
@Validated//开启jsr303数据校验
@PropertySource(value= {"classpath:conf.properties"})//作用是引入配置文件
public class StudentPo {
	private int age
	}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

但是这个注解有个缺陷就是仅支持.properties文件

5.@ImportResource,配置类 ,占位符表达式

1.@ImportResource的使用:

  • 用于引入xml配置文件,由于springBoot已经帮我们配置好了类似于spring.xml类型的配置文件,所以当我们直接获取spring容器时就会出现错误,但是如果我们就是想使用自己的配置文件,此时只有在主程序中加入@ImportResource注解,详情如下:
@SpringBootApplication
@ImportResource({"classpath:spring.xml"})//此处是新加入的
public class HelloWordApplication {
	public static void main(String[] args) {
		SpringApplication.run(HelloWordApplication.class, args);
	}
}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

具体如何调用这个xml文件,我们先看看这个xml文件的内容:



	
	
	
	


   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

对应的PetPo对象:

package com.test.HelloWord.po;

public class PetPo {
private String nickName;
private String strain;
对应的get set方法已经省略,但是一定要加进去,否则属性就无法注入
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

对应的测试程序:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWordApplicationTests {
	@Autowired
	ApplicationContext ac;//此处是为了获取spring容器
	@Test
	public void test1() {
		PetPo petPo= (PetPo)ac.getBean("PetPo");
		System.out.println(petPo.toString());
	}}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

但是并不推荐这种方式进行属性的注入,太麻烦,推荐使用配置类

2.配置类

配置类就是配置文件(.xml文件)配上注解的形式,如何创建配置类:

  • 在原来普通的类的基础上加上注解:@Configuration
  • 但是一般配置类要和@Bean同时使用,@Bean就是为了能够像spring.xml中标签一样,能够创建多个
    具体怎么使用参考下面代码:
@Configuration//加上他之后这个类就是配置类
public class AppConfig {
	@Bean//加上它之后就相当于创建了一个标签
	public PetPo ppp() {/*ppp相当于中的id*/
		PetPo p=new PetPo();
		return p;
	/*返回的结果类型就相当于中的class*/
	}
}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

下面写一个测试方法自己感受一下

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWordApplicationTests {
	@Autowired
	ApplicationContext ac;//此处是为了获取spring容器
	@Test
	public void test1() {
		PetPo petPo= (PetPo)ac.getBean("p");
		System.out.println(petPo.toString());
	}
}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3.占位符表达式

  • 常见的占位符点击查看
student.age=${}

   
   
   
   
   
   
   
   
  • 1

6.springBoot多环境设置及切换

  • 默认情况下boot会读取application.propertiesh环境下的端口
  • 多个环境:application-环境名.properties,比如:
application-dev.properties
application-test.properties

   
   
   
   
   
   
   
   
  • 1
  • 2

至于具体怎么切换:就是在主配置文件(application.properties)中加入:

spring.profiles.active=dev

   
   
   
   
   
   
   
   
  • 1

表示切换到dev下的端口环境

通过yml文件切换环境:

server:
  port: 1234
---
server:
  port: 8880
spring:
  profiles: dev//用于声明环境名为dev
---
server:
  port: 8881
spring:
  profiles: test  //用于声明环境名test

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这样的话就创建好了三个环境,但是至于使用哪一个环境,就得使用这样的配置:

在主端口中这样声明:
server:
  port: 1234
spring:
  profiles:
    active: dev    //切换到端口到dev环境

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如何动态切换环境:

  • 1.使用命令行:
右单击 ->Run As->RunConfigurations->Arguments->在里面输入--spring.profiles.active=环境名
比如:--spring.profiles.active=dev

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 2.打成jar在cmd里面执行,下面先讲解一下如何打成jar包
右单击项目->Run As->maven build,进入之后在package即可

   
   
   
   
   
   
   
   
  • 1

下面再接着叙述如何在cmd中运行打成的jar包

  • 进入cmd
  • 先进入这个jar包所在的目录 然后输入指令
java -jar HelloWord-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

   
   
   
   
   
   
   
   
  • 1
  • 3.通过jvm参数指定
右单击 ->Run As->RunConfigurations->Java Application->HellowdApplication(此处为项目名,项目不同名字也不一样)->右边的Argument,
输入 -Dspring.profiles.active=dev

   
   
   
   
   
   
   
   
  • 1
  • 2

7.SpringBoot配置文件位置

springBoot能够默认读取的文件有两种,一个是application.properties以及application.yml文件
但是这两个文件可以存放在哪一个位置,就是在

  • file:项目根目录/config
  • file:项目根目录
  • classpath:项目根目录/config
  • classpath:项目根目录
    file与classpath的区别就是
  • file指普通目录
  • classpath指构建路径(构建路径的文件夹上面有一个小标识)
    如果项目配置冲突,优先级从上往下

8.外部配置文件以及加载顺序问题

配置项目运行名

在主配置文件application.properties中加入:

server.servlet.context-path=/springBoot

   
   
   
   
   
   
   
   
  • 1

注意:此处的springBoot就是新加入的项目名,在未加入之前访问是这样的:

http://localhost:8888/HelloWord?name=zhuxu

   
   
   
   
   
   
   
   
  • 1

加了之后就变成了这样的:

http://localhost:8888/springBoot/HelloWord?name=zhuxu

   
   
   
   
   
   
   
   
  • 1

如何使用外部的配置文件

比如说在我的这个路径下C:\Users\17732\Desktop\test\application.properties有一个application.properties文件,那么怎么使用里面的配置:

右单击 ->Run As->RunConfigurations->Arguments->在里面输入--spring.config.location=路径名
比如:--spring.config.location=C:\Users\17732\Desktop\test\application.properties

   
   
   
   
   
   
   
   
  • 1
  • 2

如果内部外部配置有冲突,优先选择外部的

接着学习一下如何通过cmd命令调用外部配置文件

java -jar HelloWord-0.0.1-SNAPSHOT.jar --spring.config.location=C:\Users\17732\Desktop\test\application.properties

   
   
   
   
   
   
   
   
  • 1

设置某一个参数,还是按照这个步骤(右单击 ->Run As->RunConfigurations->Arguments)到Arguments下
比如说只更改端口:–server.port=8882

9.springBoot的日志处理

目前springBoot用的是slf4j以及logback日志

具体如何使用日志参照下面代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloWordApplicationTests {
	Logger logger=LoggerFactory.getLogger(HelloWordApplicationTests.class);
	@Test
	public void testLog() {
		logger.trace("测试Logger_Trace");
		logger.debug("测试Logger_debug");
		logger.info("测试Logger_Info");
		logger.warn("测试Logger_warn");
		logger.error("测试logger_error");
	}}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

但是在测试时发现只能输出info warn 以及error中的内容,其他的内容均为输出,这是由于日志级别的问题
日志级别有:

trace debug info warn error fail off 

   
   
   
   
   
   
   
   
  • 1

其中默认的级别是 info,只打印info以后的,而Info以前的不给予打印

下面继续认识一下如何自定义日志级别

在主配置文件application.properties中设置:

logging.level.com.test.HelloWord=debug
其中com.test.HelloWord是主配置类的包名

   
   
   
   
   
   
   
   
  • 1
  • 2

这样的话就把日志的默认级别也就是最低级别调到debug

继续深入————如何把日志输出信息打印到文件中呢

在主配置文件application.properties中设置:
logging.file=D:/program/springBoot/HelloWord/log/springBoot.Log
这样的话就可以把日志信息加入到上面目录下的springBoot.Log文件中
当然还有logging.path=D:/
这样的话就直接把日志输出指定的文件夹中,默认的文件名是spring.log

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5

下面接着看如何更改日志输出的格式

指定日志显示格式:

  • 1.日志显示在控制台:
在主配置文件application.properties中设置:
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} -%msg%n

   
   
   
   
   
   
   
   
  • 1
  • 2

下面解释一下上面这串代码的意思:

  • %d:日期时间
  • %thread:打印线程名
  • %-5level:显示日志级别,-5表示从左显示5个字符宽度
  • %logger{50}:设置日志宽度,50表示最多只能有50个日志
  • %msg:日志消息
  • %n:表示显示完自动换行
  • 2.日志显示在文件中:
在主配置文件application.properties中设置:
logging.pattern.file=%d{yyyy-MM-dd} ** [%thread] **  %-5level **  %logger{50} **  %msg%n

   
   
   
   
   
   
   
   
  • 1
  • 2

10.springBoot处理web静态资源

1.先pom.xml文件中导入jquery,Bootstrap等静态资源文件:

  • jquery:

		org.webjars
		jquery
		3.3.1-1
	

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • BootStrap


    org.webjars
    bootstrap
    4.1.3


   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

下面简单的进行对jquery.js进行访问:

http://localhost:1234/zhiyi/webjars/jquery/3.3.1-1/jquery.js

   
   
   
   
   
   
   
   
  • 1

注意:开始的是从webjars开始的

下面在看一下怎么引入自己写的静态资源,自己写的静态资源放在哪里

  • 首先自定义的资源只能放在构建路径下的static或者resources目录下面
  • 在访问静态资源时不用写前缀目录,比如有一个文件a.html在resources目录下,那么在访问时:
http://localhost:1234/zhiyi/Hello.html

   
   
   
   
   
   
   
   
  • 1

欢迎页的实现:

在任意静态资源目录下,只要文件名叫做index.html,它就是主页,直接访问即可:

http://localhost:1234/zhiyi

   
   
   
   
   
   
   
   
  • 1

下面接着看看如何更改网站的logo,任何一个网站中的logo都有一个固定名字:favicon.ico

那么如何进行更改favicon.ico呢

我们只需要将favicon.ico放在任何静态资源目录中即可
如何自定静态资源位置:

在主配置文件application.properties中设置:
spring.resources.static-locations=classpath:/res/

   
   
   
   
   
   
   
   
  • 1
  • 2

然后在src/main/resources下创建对应的res目录,这样的话静态资源目录除了默认的resources以及static目录,res现在也是静态资源目录了
同样访问的时候也不需要加前缀res,直接输入文件名即可:

http://localhost:1234/zhiyi/res.html

   
   
   
   
   
   
   
   
  • 1

如果创建多个资源路径就这样:

spring.resources.static-locations=classpath:/res/ ,classpath:/img/

   
   
   
   
   
   
   
   
  • 1

注意:一旦自定义了,默认的静态资源文件夹就会全部失效

11.引入模板引擎thymeleaf

上面学习了如何引入静态资源,那么如何引入动态资源

springBoot是不支持动态页面jsp,但是如何来替换jsp页面呢,那么就使用我们的动态模板引擎thymeleaf
那么到底什么是模板引擎:
模板引擎就是将一个网友分为两部分:

  • 模板
  • 数据
    如何引用这个数据引擎:
在pom文件中添加依赖,这个依赖可以在maven里面直接搜索,也可以在这个网址:

https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#using-boot-starter


			org.springframework.boot
			spring-boot-starter
		
		
			org.thymeleaf
			thymeleaf-spring5
		
		
			org.thymeleaf.extras
			thymeleaf-extras-java8time
		

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

导入之后我们来研究第一个问题:引入thymeleaf 代码应该往哪里写

thymeleaf的代码全部放在构建路径(src/main/resources/)下的templete目录下
下面先看一个模板:
templete目录下的html:




Thymleaf

 

Welcome to thymeleaf!

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

先看一下上面这个代码片段,其他的都是模板,以后直接拿着用,但是p中有一个th:text="${welcome},会优先显示welcome中的内容
那么总结一下:th:就是替换的意思,比如:

Welcome to thymeleaf!

  • 1

那么如果${welcome}中有值,那么就就会有优先使用welcome中的值
在写一个controller:

@Controller
public class BootController {
	@RequestMapping("/wecome")
	public String wecome(Map map) {
		map.put("welcome", "welcome_Thymeleaf");
		return "result";
	}}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

th后面到底可以存放哪些内容呢:

Order Feature Attributes
1 Fragment inclusion th:insert th:replace
2 Fragment iteration
3 Conditional evaluation th:if th:unless th:switch th:case
4 Local variable definition th:object th:with
5 General attribute modification th:attr th:attrprepend th:attrappend
6 Specific attribute modification th:value th:href th:src …
7 Text (tag body modification) th:text th:utext
8 Fragment specification th:fragment
9 Fragment removal th:remove

下面重点讲一下 th:text,th:untext

  • th:text:表示转义,何为转义,举一个小小的例子:
th:text="

hello

" th:untext="

hello

"
  • 1
  • 2

第一个显示的是大大的标题hello,而第二个显示的是‘《h1》hello《/h1》’
下面写一个关于th:each的用法:
html页面:




Thymleaf







	
姓名 年龄
姓名 年龄
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

对应的controller:

@Controller
public class BootController {
	@RequestMapping("/wecome")
	public String wecome(Map map) {
		map.put("welcome", "welcome_Thymeleaf");
		List lStudents = new ArrayList();
		lStudents.add(new Student("zx", 21));
		lStudents.add(new Student("zx1", 22));
		lStudents.add(new Student("zx3", 23));
		lStudents.add(new Student("zx4", 24));
		map.put("Students", lStudents);
		return "result";
	}}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

对应的Po:

public class Student {
	private String name;
	private Integer age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public Student() {
		super();
	}
	public Student(String n,Integer a) {
		super();
		this.name=n;
		this.age=a;
	}}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

12.SpringBoot整合外置tomcat以及使用jsp开发

springBoot是不支持jsp开发的,因为jsp页面需要打成war包部署到tomcat,但是springBoot是不用打成war包就能运行,这个时候就需要使用外置的tomcat

下面接着讲一个maven的小知识:

如果pom中的依赖中有provided字样,那么在打包时不会将q以对应的插件或者文件一起打包

接着进入我们的主题:如何使用外置的tomcat,参考 点击此处
然后进行下面几个步骤:

  • 1.建立基本的web目录结构:在src/main/webapp里面建立一个目录:WEB-INF
  • 2.在src/main/webapp下面写jsp页面
    下面讲一下如何在springBoot中配置视图解析器;
    在主配置文件application.properties中添加如下代码:
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

   
   
   
   
   
   
   
   
  • 1
  • 2

index.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"
	pageEncoding="utf-8"%>




Insert title here


Hello ${requestScope.name} Welcome to Index.jsp



   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Controller:

@Controller
public class WebController {
	@RequestMapping("/welcome")
	public String welcome(Mapmap) {
		map.put("name", "朱旭");
		return "index";
	}}

   
   
   
   
   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
      
    
中国真正厉害的只有一种人:三不卖七不买,盈利一辈子都不会停止 股管家 · 顶新

学习 Spring Boot 知识看这一篇就够了

05-28 阅读数 6万+

从2016年因为工作原因开始研究SpringBoot,先后写了很多关于SpringBoot的文章,发表在技术社区、我的博客和我的公号内。粗略的统计了一下总共的文章加起来大概有六十多篇了,其中一部分是在... 博文 来自: 纯洁的微笑

SpringBoot入门最详细教程

02-27 阅读数 12万+

网上有很多springboot的入门教程,自己也因为项目要使用springboot,所以利用业余时间自学了下springboot和springcloud,使用下来发现springboot还是挺简单的,... 博文 来自: liutong123987的专栏

第一个SpringBoot入门级项目(超详细步骤)

07-07 阅读数 1万+

开发环境:                MyEcplise2017+Maven+SpringBoot+Tomcat8.5①创建一个新的Maven项目:File--&gt;New--&... 博文 来自: BADAO_LIUMANG_QIZHI的博客

Spring Boot入门级使用教程

08-16 阅读数 1万+

SpringBoot并不是一个全新的框架,而是将已有的Spring组件整合起来。特点是去掉了繁琐的XML配置,改使用约定或注解。所以熟悉了SpringBoot之后,开发效率将会提升一个档次。约定优于配... 博文 来自: 爱笑的博客


Spring Boot 入门 (一)——建一个最简单的springboot项目

11-29 阅读数 3382

创建一个最简单的springboot项目废话不多说直接开整!!打开eclipse新建一个maven项目,目录格式如下:打开pom.xml文件,引入父依赖,web依赖,并设置JDK版本 4.0.0 co... 博文 来自: qq_17357299的博客

Spring Boot 2.0 的快速入门(图文教程)

02-05 阅读数 1万+

本文来自作者 泥瓦匠 在 GitChat 上分享「SpringBoot2.0的快速入门(图文教程)」,「阅读原文」查看交流实录。「文末高能」编辑|哈比SpringBoot 的快速入门(图文教程)大家都... 博文 来自: GitChat技术杂谈

Spring框架介绍及使用

03-17 阅读数 18万+

Spring框架—控制反转(IOC)1Spring框架概述1.1什么是Spring1.2Spring的优点1.3Spring的体系结构2入门案例:(IoC)2.1导入jar包2.2目标类2.3配置文件... 博文 来自: qq_22583741的博客

Spring boot简单入门学习

07-25 阅读数 824

Springboot简单入门学习     最近公司所有的项目架构都升级了,思想采用了微服务的思想,技术架构采用了springcloud,虽然开始了边学边用的阶段,以及踩到了不少的坑,但是里边的原理以及... 博文 来自: java_bird

springboot入门

02-24 阅读数 2534

1.  今日大纲1、 了解Spring的发展2、 掌握Spring的java配置方式3、 学习SpringBoot4、 使用SpringBoot来改造购物车系统2.  Spring的发展2.1. Sp... 博文 来自: 飞腾创客

SpringBoot(1):入门

05-22 阅读数 72

SpringBoot可以以jar包的形式独立运行 内嵌Servlet容器starter简化Maven配置自动加入依赖包自动配置Spring(也支持自定义自动配置)项目监控条件注解Eclipse安装Sp... 博文 来自: 文心

【Spring Boot系列学习】01.入门helloworld

01-07 阅读数 38

一、springboot初识概念    SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使... 博文 来自: 剑翊乾坤

spring-boot2-整合(一)Mybatis-(特别完整!)

03-28 阅读数 1万+

整合Mybatis分为两种模式,一种是xml配置,一种是注解。(类似JPA)我在这里重点放在xml配置上,因为如果想用注解的话,建议直接用jpa代替,因为Jpa有更成熟的CRUD接口更方便开发。我在后... 博文 来自: _hello_world_的博客

spring boot 搭建web项目完整流程,以及遇到的一些坑坑洼洼总结

03-01 阅读数 7万+

一、springboot简介   springboot是最近非常流行的,在spring的框架上改进的框架。该框架的目的是为了提高开发人员的速度,降低配置的难度等等,极大了简化了开发流程。具体的详细的说... 博文 来自: fyhailin的专栏

SpringBoot入门系列:第一篇 Hello World

06-19 阅读数 32万+

跟随SpringBoot的文档(http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-d... 博文 来自: lxhjh的专栏

STM32IAP升级------IAP升级功能编写初期的一些困惑与疑问---完成功能后的总结

06-18 阅读数 1万+

IAP升级功能编写初期的一些困惑与疑问---完成功能后的总结 一,网上下载的例程,跳转部分的代码有差异,尤其是用的汇编那句 二,关于跳转部分的代码的理解(转) 三,关于跳转时能否不用按键,用软件标志位... 博文 来自: Super_Demo的专栏

在64位Win7操作系统中安装Microsoft Access Engine的解决方案

01-06 阅读数 6万+

现在的Win7系统中安装的一般都是32位的Office,因为微软推荐使用32位的Office,兼容性更强,稳定性更好。在使用Access作为数据库的时候,C#操作Access,如果Access是acc... 博文 来自: 写代码的蜗牛

百度地图开发(五)之公交信息检索 + 路线规划

03-05 阅读数 5万+

转载请注明出处:     在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容。 公交信息检索     实际上,公交信息检索与POI检索、在线建议检索非常相似,也... 博文 来自: crazy_jack

ThreadLocal的设计理念与作用

09-25 阅读数 9万+

Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread... 博文 来自: u011860731的专栏

C#实现开发windows服务实现自动从FTP服务器下载文件(自行设置分/时执行)

06-10 阅读数 3万+

最近在做一个每天定点从FTP自动下载节目.xml并更新到数据库的功能。首先想到用 FileSystemWatcher来监控下载到某个目录中的文件是否发生改变,如果改变就执行相应的操作,然后用timer... 博文 来自: kongwei521的专栏

(LaTex)CTex的初次使用心得及入门教程

11-30 阅读数 12万+

摘要 最近要发论文了,被知乎里人推荐使用论文编译软件(CTex、LaTex和Overleaf之类),瞬间感觉自己用Word简直Out了(书读少)。 学校里也听说过LaTex,不过因为当时没怎么写过... 博文 来自: tostq的专栏

如何编译64位( 64bit ) boost类库

11-17 阅读数 9582

 64位windows平台,编译环境是VS2005,进入Visual Studio 2005 x64 Win64 Command Prompt(单纯的cmd也不一定不行,我没试)。把bjam.exe放... 博文 来自: rickypc的专栏

vsftpd匿名用户上传和下载的配置

10-30 阅读数 2万+

  看到很多朋友配置vsftpd时不能使用匿名用户上传和下载(创建目录或删除、重命名文件夹),本文主要解决vsftpd的匿名用户权限配制问题。... 博文 来自: 九宫霓虹

mybatis一级缓存(session cache)引发的问题

05-14 阅读数 4万+

mybatis一级缓存(session cache)引发的问题 博文 来自: flysharkym的专栏

高斯混合模型(GMM)及其EM算法的理解

03-02 阅读数 12万+

一个例子高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一... 博文 来自: 小平子的专栏

linux上安装Docker(非常简单的安装方法)

06-29 阅读数 28万+

最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!

Docker的三大核心概念:镜像、容器、仓库
镜像:类似虚拟机的镜像、用俗话说就是安装文件。
容器:类似一个轻量…


博文
来自: 我走小路的博客



将Excel文件导入数据库(POI+Excel+MySQL+jsp页面导入)第一次优化

09-05 阅读数 7万+

本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇... 博文 来自: Lynn_Blog

HttpClient使用详解

02-28 阅读数 81万+

Http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且... 博文 来自: 鹏霄万里展雄飞

Android圆形图片--自定义控件

12-17 阅读数 1万+

Android圆形图片--自定义控件 博文 来自: Main_Stage的专栏

ubuntu16.04环境Kdevelop安装和汉化

01-20 阅读数 6239

1、Kdevelop安装

 

最简单的命令行安装,打开终端,执行

 

sudo apt-get install kdevelop

 

2、Kdevelop汉化

不需要自己下载汉化包,…


博文
来自: lch_vision的博客



图片拉伸变形

12-11 阅读数 332

http://blog.csdn.net/abc649395594/article/details/50004991 博文 来自: klkxxy的博客

三菱FX系列PLC与PC通讯的实现之专有协议(计算机联接)的程序设计之一

02-11 阅读数 3万+

阅读内容为:FX系列微型可编程控制器用户手册(通讯篇)中计算机链接功能章节。 采用本方法通信,pc端的实现,其实就是,把操作按照协议(2种)翻译成相应的字符串,通过串口发送给plc。

编写一应用程…


博文
来自: pengjc2001的博客



实现header file (.h)相应的source file (.cc/.cpp)文件时的注意事项

07-22 阅读数 1万+

本帖慢慢扩充……1. 假设是实现namespace Abc中的一个class,不要因为是在.cc中就肆无忌惮的在global scope或者namespace Abc{}中定义辅助变量和函数,或者ty... 博文

强连通分量及缩点tarjan算法解析

11-16 阅读数 66万+

强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti... 博文 来自: 九野的博客

数据结构实验:栈实现计算器(表达式计算)

12-04 阅读数 4049

原创作品转载请注明出处 欢迎抄袭,造福各位伸手党 /************************************************************************* ... 博文 来自: u013268685的专栏(有一种幸福叫AC,有一种期待叫AK)

简单linux字符设备驱动程序与编程小技巧(上)

02-15 阅读数 629

这几天开始研究linux下的驱动程序编写了,遇到的问题也挺多的,好在linux是开源的,很多高人编写的技巧和思路都会在他们的源代码中体现,我也在他们的源码中学到了很多好东西,我归纳了下贴出来,希望自己... 博文

关于SpringBoot bean无法注入的问题(与文件包位置有关)

12-16 阅读数 27万+

问题场景描述整个项目通过Maven构建,大致结构如下: 核心Spring框架一个module spring-boot-base service和dao一个module server-core 提供系统... 博文 来自: 开发随笔

苹果充值常见的刷单手段和防范方法

09-28 阅读数 3万+

苹果充值的刷单现象在游戏行业非常普遍,很多团队挖空心思寻找漏洞以非法获利。常见的手段主要有以下六种:

伪造充值凭据(receipt)以小额凭据骗取大额商品

凭据重复使用
凭据重复使用信用卡黑卡/…


博文
来自: 分享知识、分享进步



jquery/js实现一个网页同时调用多个倒计时(最新的)

11-25 阅读数 54万+

jquery/js实现一个网页同时调用多个倒计时(最新的)

最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!

//js



博文
来自: Websites



VirtualBox COM获取对象失败

04-17 阅读数 4万+

错误详情

  1. 先来看看错误详情
    获取 VirtualBox COM 对象失败.应用程序将被中断.Failed to instantiate CLSID_VirtualBox …


    博文
    来自: 多点折腾少点抱怨

Eclipse如何安装WindowBuilder插件及如何使用WB

05-31 阅读数 6481

Eclipse如何安装WindowBuilder插件及如何使用WB 博文 来自: 天命王子的博客

.NET和java的RSA互通,仅此而已

03-09 阅读数 7万+

RSA .net jva 互通 解决不能互通的问题 博文 来自: lubiaopan的专栏

Java设计模式学习06——静态代理与动态代理

10-30 阅读数 3万+

一、代理模式为某个对象提供一个代理,从而控制这个代理的访问。代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。代理类负责请求的预处理、过滤、将请求分配给委托... 博文 来自: 小小本科生成长之路

蜂窝小区最短距离的坐标系解法

10-14 阅读数 2万+

如下图所示,蜂窝小区,以1为中心,顺时针编号,编号最大限定为100000。求任意两编号之间的最短距离。两个相邻小区的距离为1 示例:19到30的最短距离为5 实现如下三个接口: /**********... 博文 来自: NYS001的专栏

魔兽争霸3冰封王座1.24e 多开联机补丁 信息发布与收集点

06-20 阅读数 6万+

畅所欲言! 博文 来自: Smile_qiqi的专栏

MATLAB中注释一段程序

12-09 阅读数 5万+

在MATLAB中,可以注释一段程序。 使用“%{”和“%}”。 例如 %{ 。。。 %} 即可。 经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 ... 博文 来自: 知识小屋

            
                        

没有更多推荐了,返回首页

你可能感兴趣的:(框架)