Fork me on GitHub

【Spring】Springboot的正确开启方式

听说springboot很久了,今天就上手来玩玩,以下是我开始玩的记录。
首先就是创建一个springboot 的一个quickstart的项目。

创建项目

create


完成项目的创建还不够,此时你的maven项目中依赖文件还没有导入,你需要将pom.xml文件配置如下,当然==name==根据自己配置,然后右键项目找到mavenreimport,成功的话项目中会出现很多springboot的依赖包

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
<name>Springboot_Test</name>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>

<!-- spring boot-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>

<dependencies>
<!--spring boot 配置web依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>

测试

首先创建一个HelloController类,当创建好之后,我们运行该项目,然后在浏览器访问localhost://8080/hello 会会出现Hello,Spring boot

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@RestController
@EnableAutoConfiguration
public class HelloController {

@RequestMapping("hello")
@ResponseBody
public String hello(){
return "Hello,Spring boot";
}
public static void main(String[] args) {
//启动springboot项目
SpringApplication.run(HelloController.class,args);
}
}

启动方式

one

第一种方法就是上面的测试写法,将main函数写在controller中,但是这样写的弊端就是一个控制器中只有一个main,一次只能启动一个controller,因此这样的写法是不推荐。

two

第二种方法其实采用的原理就是包扫描,

首先创建一个App类,如下:

1
2
3
4
5
6
7
8
9
10
@EnableAutoConfiguration  //自动配置spring,当然,这里有的话其他文件中就不需要在写
@ComponentScan(basePackages = "com.lxk.web.controller") //扫描该包下的
public class App
{
public static void main( String[] args )
{
//启动springboot项目
SpringApplication.run(App.class,args);
}
}

注解解释:
@EnableAutoConfiguration
注解的作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,这就减少了开发人员的工作量。

注解@RestController@RequestMapping由 Spring MVC 提供,用来创建 REST 服务。这两个注解和 Spring Boot 本身并没有关系。

Spring Boot依赖介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
spring-boot-starter		核心 POM,包含自动配置支持、日志库和对 YAML 配置文件的支持。
spring-boot-starter-amqp 通过 spring-rabbit 支持 AMQP
spring-boot-starter-aop 包含 spring-aop 和 AspectJ 来支持面向切面编程(AOP)。
spring-boot-starter-batch 支持 Spring Batch,包含 HSQLDB。
spring-boot-starter-data-jpa 包含 spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA。
spring-boot-starter-data-mongodb 包含 spring-data-mongodb 来支持 MongoDB。
spring-boot-starter-data-rest 通过 spring-data-rest-webmvc 支持以 REST 方式暴露 Spring Data 仓库。
spring-boot-starter-jdbc 支持使用 JDBC 访问数据库
spring-boot-starter-security 包含 spring-security。
spring-boot-starter-test 包含常用的测试所需的依赖,如 JUnit、Hamcrest、Mockito 和 spring-test 等。
spring-boot-starter-velocity 支持使用 Velocity 作为模板引擎。
spring-boot-starter-web 支持 Web 应用开发,包含 Tomcat 和 spring-mvc。
spring-boot-starter-websocket 支持使用 Tomcat 开发 WebSocket 应用。
spring-boot-starter-ws 支持 Spring Web Services
spring-boot-starter-actuator 添加适用于生产环境的功能,如性能指标和监测等功能。
spring-boot-starter-remote-shell 添加远程 SSH 支持
spring-boot-starter-jetty 使用 Jetty 而不是默认的 Tomcat 作为应用服务器。
spring-boot-starter-log4j 添加 Log4j 的支持
spring-boot-starter-logging 使用 Spring Boot 默认的日志框架 Logback
spring-boot-starter-tomcat 使用 Spring Boot 默认的 Tomcat 作为应用服务器。

web开发介绍

静态资源的访问

在我们开发Web应用的时候,需要引用大量的js、css图片等静态资源。
Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:

/static
/public
/resources
/META-INF/resources

示例:
我们可以在src/main/resources/目录下创建static/imgs,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/imgs/d.jpg。如能显示图片,配置成功。

自动返回json格式数据

注解说明:
@RestController 相当于Controller 提供restful风格
@RequestMapping("login") 映射路径
@ResponseBody 响应体-自动返回json格式字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
public class UserController {
@RequestMapping("login")
@ResponseBody
public Map<String,Object> login(String username,String password){
Map<String,Object> map = new HashMap<String,Object>();
if("lxk".equals(username) && "123".equals(password)){
map.put(username,password);
}else {
map.put("success",1);
map.put("errMsg","");
}
return map;
}
}

http://localhost:8080/login?username=lxk&password=123
当运行时,我们访问该链接时浏览器打印如下:
{"lxk":"123"}

全局捕获异常

  • @ExceptionHandler 表示拦截异常
  • @ControllerAdvice
    controller 的一个辅助类,最常用的就是作为全局异常处理的切面类,可以指定扫描范围,
    约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用
  • @ResponseBody 进行 json 转换

示例:
在刚才的方法中,定义一个算术异常,int i=10/0;如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RestController
public class UserController {
@RequestMapping("login")
@ResponseBody
public Map<String,Object> login(String username,String password){
Map<String,Object> map = new HashMap<String,Object>();
int i=10/0;
if("lxk".equals(username) && "123".equals(password)){
map.put(username,password);
}else {
map.put("success",1);
map.put("errMsg","");
}
return map;
}
}

定义异常捕获类

1
2
3
4
5
6
7
8
9
10
11
12
@ControllerAdvice  //切面
public class GlobalException {
@RequestMapping("exceptionHander")
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public Map<String,Object> exceptionHander(){
Map<String,Object> map = new HashMap<String, Object>();
map.put("1","101");
map.put("errmsg","系统错误");
return map;
}
}

http://localhost:8080/login?username=lxk&password=123
当运行时,我们访问该链接时浏览器打印如下:

{"1":"101","errmsg":"系统错误"}

渲染web页面

模板引擎
在动态 HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。
Spring Boot提供了默认配置的模板引擎主要有以下几种:

  • Thymeleaf
  • FreeMarker
  • Velocity
  • Groovy
  • Mustache

Springboot+freemarker

Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性,具体可见后文:支持JSP的配置
当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates。当然也可以修改这个路径,具体如何修改,可在后续各模板引擎的配置属性中查询并修改。

既然说到FreeMarker,那我就说说FreeMaker的使用

Freemarker的使用

第一步:引入依赖包

pom.xml中的dependencies中加入以下依赖后,我们查看是否加入成功,选中pom.xml右键选择maven中的reimport

1
2
3
4
5
<!-- 引入freeMarker的依赖包. -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

第二步:写控制器

创建一个StudentController控制类,Student的模板类

1
2
3
4
5
6
7
public class Student {
private String name;
private String sex;
...
无参和有参构造
setter/getter方法
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Controller
@RequestMapping("stu")
public class StudentController {

@RequestMapping("/list")
public String list(Model model){
model.addAttribute("name","lxk");
model.addAttribute("age",30);
List<Student> stuList = new ArrayList<>();
stuList.add(new Student("lxk","男"));
stuList.add(new Student("ls","男"));
stuList.add(new Student("wangwu","男"));

model.addAttribute("stuList",stuList);

return "stu/list";
}
}
第三步:创建.ftl模板文件

在src/main/resources/创建一个templates文件夹,后缀为.ftl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
欢迎你:${name}
<table border="1">
<tr>
<td>姓名:</td>
<td>性别:</td>
</tr>
<#list stuList?sort_by("name")?reverse as stu>
<tr>
<td>${stu.name}</td>
<td>${stu.sex}</td>
</tr>
</#list>
</table>
</body>
</html>

运行项目成功后,访问http://localhost:8080/stu/list 会出现预期结果,关于freeMarker后续请查阅相关资料进行学习.

本文标题:【Spring】Springboot的正确开启方式

文章作者:LiuXiaoKun

发布时间:2019年04月26日 - 22:04

最后更新:2019年04月27日 - 22:04

原始链接:https://LiuZiQiao.github.io/2019/04/26/【Spring】Springboot的正确开启方式/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%