Spring Boot学习笔记
上一篇Maven学习笔记里完成了对maven的初步认识与环境配置后,接着探索Maven+Spring Boot搭建Web项目环境。
以下备忘录主要记录,在探索springboot使用方法的过程中遇到的重要问题。
零、 环境搭建
以eclipse为例:
1. 创建项目
导航栏空白处右键-〉new-〉maven project,勾选”create a simple project”,如下图:
2. 填写项目信息
红线处必填,完成后点击Finish。
3. 完善pom及application.properties
至此,项目结构如下图:
附上pom.xml内容以及application.properties内容:
POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ray</groupId>
<artifactId>test</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>sboot Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
</parent>
<dependencies>
<!-- junit支持 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- springboot的junit依赖注入支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- web支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jdbc支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- tomcat支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- mysql支持 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- jsp支持 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<scope>provided</scope>
</dependency>
<!-- jstl标签库 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- mybatis支持 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<finalName>sboot</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source><!-- 使用1.8版本的jdk编译 -->
<target>1.8</target>
<encoding>utf-8</encoding><!--编码使用UTF8-->
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties
server.port=9090
server.address=127.0.0.1
server.session.timeout=10
server.tomcat.uri-encoding=UTF-8
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/lisany
spring.datasource.username=root
spring.datasource.password=123456
一、 关于注解
@Service用于标注业务层组件
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件
@Component泛指组件。
这是网上对于这几个最常用的组件注解的解释,其实最关键的在于下面这种书写格式:
@Service(“UserService”)
这种书写格式使得此类的实例得以在spring框架里使用byName原则注册。
当spring框架遇到下面这种注解标注的字段时,就会使用依赖注入原则进行注入,不必写setter也可以:
@Resource(name="UserService")
private UserService us;
这种手动指定注入关系的用法又引伸出了“自动装配”的概念。
也就是不手动命名组件,需要注入的地方使用@Autowired注解。如下两图之间的关系:
spring boot会根据名字和类型自动完成注入操作。但是,需要特别特别注意的一点是,有些组件需要显式指示springboot去扫描才会被加载,如图2中的mybatis数据库映射组件。指示方法是@MapperScan(“被扫描的包路径”),如下图:
另外,图1中的注解@RequestMapping(“/user”),@RequestMapping(“/login”),是映射了对于“/user”,“/login”命名空间的http请求。
举例来说,对于客户端发起的对于”http://IP/user/login/“的请求,首先会交给负责”/user”请求的UserService来处理,spring找到UserService的实例后,发现负责处理”/user/login”请求的是doLogin方法,最后交给doLogin来处理。
二、 pom依赖的相关问题
项目报错,无法识别HttpServletRequest等类,需要在POM中手动添加servlet如下依赖:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
springboot对于junit单元测试的支持是spring-boot-starter-test,而不是spring-test,groupId是org.springframework.boot,而不是org.springframework。
单元测试支持添加如下依赖到POM文件中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
对于1.4以后的版本,junit单元测试类名前增加两个注解(如下),即可实现SpringBoot依赖注入。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Main.class)//Main是Springboot程序的启动类
@SpringBootTest注解的使用这个问题,折磨我很久,我用1.5版本的spring boot,网上的很多资料都是过时API,主要是英文水平不行惹的祸。
单元测试类截图:
三、 路径问题
这个问题比较棘手,因为不太方便通过调试手段解决,但还是解决了。需要在此特别记录一下。
项目结构如下图:
在spring boot的配置文件中指定jsp目录:
controller中返回页面名字后,jsp页面是可以访问的(需要添加POM的web支持)。如下图:
但是!CSS样式表,js,图片等静态资源文件,按照传统的路径存放方式,也就是说
在spring boot创建的web程序中,静态资源和JSP同级目录下存放,在JSP中使用相对路径进行访问,是访问不到的!
会出现光秃秃的页面,察看页面源码发现所有链接的静态资源都是404找不到!
正解:
方案一:spring boot默认静态资源路径在以下地址:
src/main/resources
|—-/static
|—-/public
|—-/resources
|—-/META-INF/resources
静态资源存放在以上目录,相当于普通web项目的WEB-INF目录下,可以使用相对路径访问静态资源。如下图:
当然还有以下方案,但是还没试:
方案2、通过application.properties配置spring.resources.static-locations=classpath:/img/ 指定自定义静态文件的目录位置,,多个使用逗号分隔,springboot自动失效
方案3、创建StaticController类继承WebMvcConfigurerAdapter 重写addResourceHandlers 指定静态访问资源目录
参考资料:
四、 mybatis及mysql配置
参考如下:
实际操作:
1. 添加spring boot的mysql支持到pom文件
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2. 添加spring boot的mybatis支持到pom
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
3. 添加数据库信息
添加数据库信息及mybatis用到的数据库表实体类所在包的路径。到spring boot的application.properties配置文件(我用properties比较习惯,也可以是yaml文件)。
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/lisany
spring.datasource.username=root
spring.datasource.password=123456
4. 添加数据库操作的映射
数据库操作的mapper,其中property指的是java实体类中字段的名字,column指的是该字段在数据库中对应的表的列名,javaType指的是该列的数据类型对应java语言中的什么数据类型,如下图:
至此,基本配置就完成了,可以使用run as Spring Boot App运行web程序了。
总结:遇到的主要问题大致都在这里了。想起来再补充吧。
上一篇: Spring Boot 学习笔记
下一篇: Tomcat 图片虚拟路径映射