一:结构
com.mr
- web/controller(负责页面访问控制)
- service(负责业务逻辑)
- domain(负责实体与数据访问)
- comm/common(建议放置公共的类,如全局的配置文件、工具类等。)
注:官方建议,所有包结构应与Application类同级,否则会扫描不到其他包,需要在Application类上添加@ComponentScan(“包”)注解
mian/resources
static(目录存放 Web 访问的静态资源,如 JS、CSS、图片等。)
templates(目录存放页面模板。)
application.properties(项目的配置信息)
banner.txt(可选,里面的内容可以替换项目启动时springboot的图画,http://patorjk.com/software/taag)
二:pom.xml中依赖的jar
//支持web模块
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
//项目核心模块,包括自动配置支持,日志和YAML
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
//springboot 启动项目插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
三:启动方式:
1. spring-boot 中内嵌的tomcat
2. pom.xml 中依赖的插件
四:application.properties 配置 (第一种)
- 修改访问项目的端口(tomcat端口号)
server.port=8082 (端口号) - 修改访问项目的路径
server.servlet.context-path=/xf(自定义项目名) - 修改编码
server.tomcat.uri-encoding=UTF-8(编码格式) - session 失效时间
server.servlet.session.timeout=30(时间) - 自定义配置
@Value对应application.properties配置文件里的自定义配置
输出结果
五:数据验证
@NotEmpty(message = "用户名不能为空")
private String name;
@Length(max = 16,min = 6,message = "密码长度在6-16位")
private String psw;
@Min(value = 17,message = "年龄过小")
@Max(value = 30,message = "年龄过大")
private Integer age;
//@Valid代表的是要验证的是User这个实体类
@RequestMapping("save")
public String save(@Valid User user, BindingResult result){
System.out.println(user);
if(result.hasErrors()){//验证有错误
List<ObjectError> errors = result.getAllErrors(); //获取一个错误的集合
for (ObjectError error : errors) {
// 循环错误信息 并打印在控制台 (foreach循环在idea中快捷键 iter)
System.out.println(error.getDefaultMessage());
}
}
return "ok";
}
前台页面访问路径:
后台控制台输出结果:
将不符合结果的信息输出
六:springboot junit4 单选测试(ApplicationTests)
/**
* SpringBoot1.4版本之前用的是SpringJUnit4ClassRunner.class
*/
@RunWith(SpringRunner.class)
/**
* SpringBoot1.4版本之前用的是@SpringApplicationConfiguration(classes = Application.class)
*/
@SpringBootTest
@WebAppConfiguration//测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的
public class ApplicationTests {
@Test
public void contextLoads() {
}
private MockMvc mvc = null;
@Before
public void before(){
mvc = MockMvcBuilders.standaloneSetup(new TestController()).build();
}
@Test
public void test() throws Exception {
/**
* 1、mockMvc.perform执行一个请求。
* 2、MockMvcRequestBuilders.get("XXX")构造一个请求。
* 3、ResultActions.param添加请求传值
* 4、ResultActions.accept(MediaType.TEXT_HTML_VALUE))设置返回类型
* 5、ResultActions.andExpect添加执行完成后的断言。
* 6、ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情
* 比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
* 5、ResultActions.andReturn表示执行完成后返回相应的结果。
*/
mvc.perform(MockMvcRequestBuilders.get("/save?name=xbb&age=11&psw=123").accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn();
}
}
输出结果
配置文件的另一种写法
在SpringBoot中还有另一种替代application.properties的配置文件application.yml
这两种配置文件的主要区别是写法不同,如下图:
application.properties
application.yml
SpringBoot官方推荐使用application.yml配置文件,yml文件的好处,天然的树状结构,层次感强,一目了然,而且少写了代码。使用的时候需要注意一些细节的地方:
原有的key,例如spring.datasource.username,按“.”分割,都变成树状的配置,key后面的冒号,后面一定要跟一个空格。