欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot学习笔记

程序员文章站 2022-07-10 18:10:52
...

上一篇Maven学习笔记里完成了对maven的初步认识与环境配置后,接着探索Maven+Spring Boot搭建Web项目环境。

以下备忘录主要记录,在探索springboot使用方法的过程中遇到的重要问题。

零、 环境搭建

以eclipse为例:

1. 创建项目

导航栏空白处右键-〉new-〉maven project,勾选”create a simple project”,如下图:

Spring Boot学习笔记

2. 填写项目信息

红线处必填,完成后点击Finish。

Spring Boot学习笔记

3. 完善pom及application.properties

至此,项目结构如下图:

Spring Boot学习笔记

附上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学习笔记

Spring Boot学习笔记

spring boot会根据名字和类型自动完成注入操作。但是,需要特别特别注意的一点是,有些组件需要显式指示springboot去扫描才会被加载,如图2中的mybatis数据库映射组件。指示方法是@MapperScan(“被扫描的包路径”),如下图:

Spring Boot学习笔记

另外,图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学习笔记

三、 路径问题

这个问题比较棘手,因为不太方便通过调试手段解决,但还是解决了。需要在此特别记录一下。

项目结构如下图:

Spring Boot学习笔记

在spring boot的配置文件中指定jsp目录:

Spring Boot学习笔记

controller中返回页面名字后,jsp页面是可以访问的(需要添加POM的web支持)。如下图:

Spring Boot学习笔记

但是!CSS样式表,js,图片等静态资源文件,按照传统的路径存放方式,也就是说

在spring boot创建的web程序中,静态资源和JSP同级目录下存放,在JSP中使用相对路径进行访问,是访问不到的!

会出现光秃秃的页面,察看页面源码发现所有链接的静态资源都是404找不到!

正解:
方案一:spring boot默认静态资源路径在以下地址:

src/main/resources
|—-/static
|—-/public
|—-/resources
|—-/META-INF/resources

静态资源存放在以上目录,相当于普通web项目的WEB-INF目录下,可以使用相对路径访问静态资源。如下图:

Spring Boot学习笔记

当然还有以下方案,但是还没试:

方案2、通过application.properties配置spring.resources.static-locations=classpath:/img/ 指定自定义静态文件的目录位置,,多个使用逗号分隔,springboot自动失效

方案3、创建StaticController类继承WebMvcConfigurerAdapter 重写addResourceHandlers 指定静态访问资源目录

Spring Boot学习笔记

参考资料:

http://www.jb51.net/article/118326.htm

四、 mybatis及mysql配置

参考如下:

http://blog.csdn.net/gebitan505/article/details/54929287

实际操作:

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

Spring Boot学习笔记

4. 添加数据库操作的映射

数据库操作的mapper,其中property指的是java实体类中字段的名字,column指的是该字段在数据库中对应的表的列名,javaType指的是该列的数据类型对应java语言中的什么数据类型,如下图:

Spring Boot学习笔记

至此,基本配置就完成了,可以使用run as Spring Boot App运行web程序了。

总结:遇到的主要问题大致都在这里了。想起来再补充吧。

相关标签: spring-boot