zoukankan      html  css  js  c++  java
  • SpringBoot入门学习记录(一)

        最近,SpringBoot、SpringCloud、Dubbo等框架非常流行,作为Coder里的一名小学生,借着改革开放的东风,自然也是需要学习学习的,于是将学习经历记录于此,以备日后查看。

      官网:https://start.spring.io/

      可以在官网直接下载demo项目导入到开发工具中,在官网下载只能选择JDK8和JDK11(似乎2.0以上已经不支持1.7了),如果从官网下载项目而本地环境JDK版本是1.7,需要指定prom.xml里的版本,也可自行构建maven项目,因为初次学习,此处自行新建maven项目配置SpringBoot框架。

    项目目录如下:

    一、目录结构

    如上图所示,Spring Boot的基础结构共三个文件:

    l src/main/java  程序开发以及主程序入口

    l src/main/resources  模板、js、css、图片、配置等静态文件

    l src/test/java  测试程序

    而在src/main/java 目录 ,主要程序结构是

    ----------com.hyblogs

        -----Application.java

        -----controller

          -----------HyBlogsController.java

         ------mode

            -----------User.java

         ------service

            -----------GetUserService.java

        ------dao

       ------utils

              ------constant

            

    Application.java 程序作为入口,所在的位置是在controller、model、service包的同一级,同一级,同一级,重要的事情说三遍。

    ①、Application.java 墙裂建议放到根目录下面,主要用于做一些框架配置

    ②、model目录主要用于实体

    ③、service 层主要是业务类代码

    ④、controller 负责页面访问控制

    ⑤、dao用于数据访问

    ⑥、constant用于存放常量

    ⑦、utils用于存放常用工具

     这个目录结构让我想起世界上最好的语言PHP,真的好像ThinkPHP里的路由,有木有?既然是maven构建的项目,自然少不了porm.xml文件了。现将内容贴出,再来分析。

    <?xml version="1.0" encoding="UTF-8"?>
    <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/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <!--   
            spring-boot-starter-parent是Spring Boot的核心启动器,
            包含了自动配置、日志和YAML等大量默认的配置,大大简化了我们的开发。
            引入之后相关的starter引入就不需要添加maven 里jar包的 version配置,
               spring boot会自动选择最合适的版本进行添加。
       -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
       
        <!--项目的基本描述信息-->
        <groupId>com.hyblogs</groupId>
        <artifactId>SpringBooT</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>SpringBoot_1</name>
        <description>Hyblogs Spring Boot 1</description>
        
        <!--指定当前的jdk版本和字符编码,开发、编译jdk版本要一致  -->
        <properties>
            <java.version>1.7</java.version>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        
        <dependencies>
            <!--Springboot核心,通过starter来启动 核心模块,包括自动配置支持、日志和YAML -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <!-- 添加测试模块 ,包括JUnit、Hamcrest、Mockito-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            
            <!--包含了Spring Boot预定义的一些Web开发的常用依赖包如: spring-webmvc,Tomcat等 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
             </dependency>
             <!-- 热部署,修改代码后不需要手动重启tomcat -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>springloaded</artifactId>
                <version>1.2.7.RELEASE</version><!--$NO-MVN-MAN-VER$-->
            </dependency>
            <!-- 应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <version>1.5.4.RELEASE</version><!--$NO-MVN-MAN-VER$-->
                </dependency>         
            </dependencies>
        
        <build>
            <plugins>
                <!--在Maven中提供Spring Boot支持,允许打包可执行jar或war和运行应用程序  -->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    建议将maven的远程仓库改为阿里云,第一次下载jar包的速度会快很多,下载完jar包,新建目录,SpringBoot的基本结构就完成了。

    二、入口程序Application.java

      执行Application中的main()方法,启动SpringBoot程序。

      @SpringBootApplication:表明这个是SpringBoot的入口文件,这是SpringBoot的启动程序。

      @RunWith(SpringRunner.class)  @RunWith是指定运行器,而(SpringRunner.class)是Spring的运行器,指定用Spring容器的方式来运行。

     1 package com.hyblogs;
     2 
     3 import org.junit.runner.RunWith;
     4 import org.springframework.boot.SpringApplication;
     5 import org.springframework.boot.autoconfigure.SpringBootApplication;
     6 import org.springframework.test.context.junit4.SpringRunner;
     7 
     8 @SpringBootApplication
     9 @RunWith(SpringRunner.class)
    10 public class Application {
    11 
    12     public static void main(String[] args) {
    13         SpringApplication.run(Application.class, args);
    14     }
    15 
    16 }

     三、Controller层

      在com.hyblogs.controller包下创建HyBlogsController.java

      此处说一下这两个Controller的区别

      @RestController:表明此控制器内的方法的返回值会以json格式显示,返回的内容就是return 里的内容

      @Controller:表明此控制器的的返回值会映射一个页面,浏览器会转到return里的页面中。如果要返回json,不跳转到返回的页面中,需要在方法上添加@ResponseBody。

      @RequestMapping():指定请求的路径

     1 package com.hyblogs.controller;
     2 
     3 import org.springframework.web.bind.annotation.RequestMapping;
     4 import org.springframework.web.bind.annotation.RestController;
     5 
     6 import com.hyblogs.model.User;
     7 
     8 @RestController
     9 public class HyBlogsController {
    10         @RequestMapping("/hello")
    11         public String index() {
    12             return "Hello World";
    13         }
    14         @RequestMapping("/hyblogs")
    15         public String  hi() {
    16             return "hyblogs 666";
    17         }18     }

    由于还没有编写jsp和html页面,就先使用@RestController来体验一把SpringBoot的威力,直接运行入口文件Application.java。

    根本没有部署程序到Tomcat,Tomcat已经成功加载程序并运行了。在浏览器地址栏输入:http://127.0.0.1:8080/hello

    结果出来的,真的方便,不用部署,不用配置xml,不用启动Tomcat,有了SpringBoot简直美滋滋。既然配置了@RestController控制器,自然也要体验一把json的效果。

    在com.hyblogs.model包下新建一个User.java

     1 package com.hyblogs.model;
     2 
     3 public class User {
     4     private String userName;
     5     private String passWord;
     6     public String getUserName() {
     7         return userName;
     8     }
     9     public void setUserName(String userName) {
    10         this.userName = userName;
    11     }
    12     public String getPassWord() {
    13         return passWord;
    14     }
    15     public void setPassWord(String passWord) {
    16         this.passWord = passWord;
    17     }
    18 }

    HyBlogsController.java中添加

     1 package com.hyblogs.controller;
     2 
     3 import org.springframework.web.bind.annotation.RequestMapping;
     4 import org.springframework.web.bind.annotation.RestController;
     5 
     6 import com.hyblogs.model.User;
     7 
     8 @RestController
     9 public class HyBlogsController {
    10         @RequestMapping("/hello")
    11         public String index() {
    12             return "Hello World";
    13         }
    14         @RequestMapping("/hyblogs")
    15         public String  hi() {
    16             return "hyblogs 666";
    17         }
    18         @RequestMapping("/getUser")
    19         public User getUser() {
    20             User user=new User();
    21             user.setUserName("小明你还记得我吗");
    22             user.setPassWord("7890");
    23             return user;
    24         }
    25     }

            将对象属性转为json数据,在保存的那一刻,控制台显示Tomcat自动restart。在地址栏输入:http://127.0.0.1:8080/getUser

     SpringBoot配置JSP

      体验了@RestController的效果,再来看看@Controller,使用@Controller返回一个jsp页面。在Spring MVC里面也可以很方便的将JSP与一个View关联起来,返回一个字符串,就能对应上jsp页面。但是SpringBoot官方不推荐使用JSP,推荐使用模板Thymeleaf,对jsp的使用不太友好,所以这一点拿出来单独纪录,坑有几个,踩上就是404,得花时间调试一会。先来分析一下SpringBoot的资源目录:

        

    在resource目录中新建了config、static、templates三个文件。

      config里存放的各种配置文件,注意:如果在config里有一个配置文件,在resource目录下也有一个配置文件,那么会以config下的为准,会覆盖掉外层的配置;

      static里有css,js,images的目录,这无需多言,而HTML作为静态文件,也是放在这里的,通过地址栏可以直接访问到的;

        templates 里主要放动态文件,Thymeleaf模板文件就在这里。

    既然如此,就需要给jsp安排地方了,在resources同级目录,新建一个webapp目录,在webapp里新建一个WEB-INF目录,WEB-INF中建一个jsp目录,把jsp文件放在这里。

    MyJsp.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP </title>
      </head>
      <body>
        测试jsp的页面内容</br>
      <hr>
      不建议使用jsp
      </body>
    </html>

    现在创建一个Controller,并返回指向MyJsp.jsp的页面(使用@Controller注解,而非RestController注解,返回的地址写webapp地址的全路径):

    TestController.java

    package com.hyblogs.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    @Controller
    public class TestController {   
        @RequestMapping("/testControl")
        public String testControl(){
            System.out.println("!!!!!");
            return "/WEB-INF/jsp/MyJsp.jsp";
        }
        
    }

    运行发现出现404:

    原因是还没配置jsp的支持,于是在pom.xml中添加jsp的jar包支持:

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
    </dependency>
    
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <!-- tomcat的支持.-->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>

    配置后,再次运行:

    此时已经成功运行处jsp页面了,当然也可以使用配置文件,配置Controller返回的前缀和后缀,这样就可以省去每次写jsp路径和".jsp"。

    打开src.main.resources.config中的application.properties

    添加2行

    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp

    prefix是前缀,后面跟webapp后的每一层目录,suffix是后缀,后面跟.jsp

    配置完前缀和后缀,在Controller里返回就不用带上目录和文件后追了,直接返回文件名字的字符串就可以,改成如下:

    package com.hyblogs.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    @Controller
    public class TestController {
        @RequestMapping("/testControl")
        public String testControl(){
            System.out.println("!!!!!");
            return "MyJsp";
        }
        
    }

    运行:

     总结几点:

      1、SpringBoot的目录按照MVC的思想进行分离,但需要注意Application.Java这个入口文件的位置。

      2、如果需要返回JSP页面,①配置文件后面不能有空格、tab等字符,②路径要对应,③pom.xml里不能同时存在jsp和Thymeleaf,默认会在templates中找模板文件;

        3、使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面若返回json等内容到页面,则需要加@ResponseBody注解,而                @RestController相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就                不能返回jsp,html页面,视图解析器无法解析jsp,html页面。

        4、SpringBoot不推荐使用JSP,Thymeleaf模板确实是比JSP效率高,对前后端的分离做的更好,推荐使用。

     Thymeleaf模板内容较多,且到下文分解---------------------------------------------------------------------------

  • 相关阅读:
    linux之sed用法【转载】
    关于Cookie和Session【转载】
    Oracle分页查询与RowNum
    fstream的用法
    Java:Date、Calendar、Timestamp的区别、相互转换与使用【转载】
    DatabaseMetaData的用法【转载】
    关于SQL的Group By
    【转载】B树、B-树、B+树、B*树都是什么
    Spring的MVC控制器返回ModelMap时,会跳转到什么页面?
    关于jsp中超链接的相对路径
  • 原文地址:https://www.cnblogs.com/hyblogs/p/10490248.html
Copyright © 2011-2022 走看看