springboot有什么好处?
简化xml(除外mybatis)
独立的应用程序(Jar/war(jsp))
单独war工程-不需要集成tomcat插件运行。(内嵌入一个tomcat)
1. 创建独立的 Spring 应用程序
2. 嵌入的 Tomcat,无需部署 WAR 文件
3. 简化 Maven 配置
4. 自动配置 Spring
5. 提供生产就绪型功能,如指标,健康检查和外部配置
6.开箱即用,没有代码生成,也无需 XML 配置。
快速入门
1.创建一个maven项目helloworld,新建类HelloController.java
@RestController //等同于@Controller+@ResponseBody,表示该类下的所有方法默认加上注解@ResponseBody,返回json格式字符串
@EnableAutoConfiguration //让SpringBoot根据应用所声明的依赖来对Spring框架进行自动配置
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
public static void main(String[] args) {
//运行这个main方法,这个web程序就可以进行访问了
SpringApplication.run(HelloController.class,args);
}
}
2.配置pom.xml:
<!--必须要引入继承 springboot-parent 帮我们实现了很多jar依赖管理 不需要再去写jar版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<!--springmvc (springboot默认集成) spring-web依赖即可-->
<!--spring-web 组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3.springboot启动:
执行该类的main函数,然后打开浏览器输入http://localhost:8080/hello,页面显示结果:hello
注意:springboot只能有一个入口进行访问,也就是说不要建立多个main函数执行类,这样会导致Tomcat的端口占用,因为在不同类每执行一次main函数相当于重新开启了一个Tomcat。
解决方案:单独创建一个类作为程序的唯一入口,并且加上扫描包路径,这样其他的类就不用自己写main函数启动了。
@EnableAutoConfiguration
//需要扫描加载的包路径
@ComponentScan(basePackages = "com.ft.controller")
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
web开发
1.静态资源访问:
我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件1.jpg。启动程序后,尝试访问http://localhost:8080/1.jpg。如能显示图片,则配置成功。
注意:路径中不需要出现static,springboot已经自己映射好了。
2.全局异常捕获:首先模拟一个异常类
@RestController
@EnableAutoConfiguration
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
@RequestMapping("/hello2")
public String hello2(){
int i=10/0; //这里会出现分母为0的异常
return "hello2";
}
}
然后新建一个异常处理类GlobalExceptionHandler.java
@ControllerAdvice
public class GlobalExceptionHandler {
@ResponseBody
//捕获运行时异常
@ExceptionHandler(RuntimeException.class)
public Map<String,Object> exceptionHandler(){
Map map=new HashMap();
map.put("code",500);
map.put("msg","异常报错");
return map;
}
}
当代码执行到异常类里的
int i=10/0; //这里会出现分母为0的异常
时,会直接跳入到异常处理类里面的exceptionHandler方法中,执行完后页面返回结果
{“msg”:”异常报错”,”code”:500}
注意:我这里的异常信息返回的是一个json字符串,异常信息也可以返回的是一个页面,只需要在exceptionHandler方法里返回页面即可。