Spring Boot

今天来学习下spring boot。参考的是spring 官网的文档:https://spring.io/guides/gs/serving-web-content/。闲话少说,按照提示一步步走起!css

What you’ll build(先给咱们展现一下咱们要作个什么玩意)

You’ll build an application that has a static home page, and also will accept HTTP GET requests at:(一个有静态首页,能够接受http的get请求)html

http://localhost:8080/greeting

and respond with a web page displaying HTML. The body of the HTML contains a greeting:(返回一个展现页面,以下)java

"Hello, World!"

You can customize the greeting with an optional name parameter in the query string:(也能够定制一个非必填的参数)git

http://localhost:8080/greeting?name=User

The name parameter value overrides the default value of "World" and is reflected in the response:(定制参数覆盖了默认值,获得的展现页面以下)github

"Hello, User!"

What you’ll need(须要准备什么环境)

  • About 15 minutes(15分钟,我有)web

  • A favorite text editor or IDE(习惯使用IDEA)spring

  • JDK 1.8 or laterexpress

  • Gradle 4+ or Maven 3.2+(习惯使用maven)apache

  • You can also import the code straight into your IDE:api

  • How to complete this guide

    Like most Spring Getting Started guides, you can start from scratch and complete each step, or you can bypass basic setup steps that are already familiar to you. Either way, you end up with working code.

    To start from scratch, move on to Build with Gradle.

    To skip the basics, do the following:(我选这种)

  • Download and unzip the source repository for this guide, or clone it using Git:(下载代码,两种方式,一种是直接从官网下载压缩文件,一种是直接从 github复制一个到本地,我选github) git clone https://github.com/spring-guides/gs-serving-web-content.git

  • 而后使用IDEA引入gs-serving-web-content\initial

  •  file/new/project from existing sources

  • 完成后目录结构以下:

  • 骨架有了就开始填充血肉:

  • Create a web controller(先建立一个controller)

    In Spring’s approach to building web sites, HTTP requests are handled by a controller. You can easily identify these requests by the @Controller annotation. In the following example, the GreetingController handles GET requests for /greeting by returning the name of a View, in this case, "greeting". A View is responsible for rendering the HTML content(想要用spring来建立一个网站,http请求须要经过controller来处理。使用注解@Controller就能够轻松定义请求的入口。下面代码就是一个很好的例子,GreetingController 负责处理请求/greeting,而且返回一个页面greeting):

  • src/main/java/hello/GreetingController.java

    package hello;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @Controller
    public class GreetingController {
    
        @GetMapping("/greeting")
        public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
            model.addAttribute("name", name);
            return "greeting";
        }
    
    }

    This controller is concise and simple, but there’s plenty going on. Let’s break it down step by step.

    The @GetMapping annotation ensures that HTTP GET requests to /greeting are mapped to the greeting() method(@GetMapping 注解确保/greeting请求被影射到了greeting()方法).

    @RequestParam binds the value of the query String parameter name into the name parameter of the greeting() method. This query String parameter is not required; if it is absent in the request, the defaultValue of "World" is used. The value of the name parameter is added to a Model object, ultimately making it accessible to the view template.(@RequestParam 注解把请求中的参数绑定到了方法中的参数。方法体比较简单,就是给model注入一个属性:name,这样在前台能够拿到这个属性) 

  • The implementation of the method body relies on a view technology, in this case Thymeleaf, to perform server-side rendering of the HTML. Thymeleaf parses the greeting.html template below and evaluates the th:text expression to render the value of the ${name} parameter that was set in the controller(前台拿到后台设置的参数是使用了thymeleaf这个前台框架,thymeleaf帮咱们解析greeting.html,而且把后台设置的name属性赋值到表达式th:text 的 ${name} ).

    src/main/resources/templates/greeting.html

    <!DOCTYPE HTML>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Getting Started: Serving Web Content</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <p th:text="'Hello, ' + ${name} + '!'" />
    </body>
    </html>

     

  • Make the application executable(跑起来)

    Although it is possible to package this service as a traditional WAR file for deployment to an external application server, the simpler approach demonstrated below creates a standalone application. You package everything in a single, executable JAR file, driven by a good old Java main() method. Along the way, you use Spring’s support for embedding the Tomcat servlet container as the HTTP runtime, instead of deploying to an external instance(虽然能够打个war,而后放到外部容器中启动,可是还有一个更简单的方法。由于spring提供了一个嵌入的tomcat,因此打一个jar,入口是一个main()也能行).

    src/main/java/hello/Application.java

    package hello;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }

    @SpringBootApplication is a convenience annotation that adds all of the following:(全家桶)

  • @Configuration tags the class as a source of bean definitions for the application context.

  • @EnableAutoConfiguration tells Spring Boot to start adding beans based on classpath settings, other beans, and various property settings.

  • Normally you would add @EnableWebMvc for a Spring MVC app, but Spring Boot adds it automatically when it sees spring-webmvc on the classpath. This flags the application as a web application and activates key behaviors such as setting up a DispatcherServlet.

  • @ComponentScan tells Spring to look for other components, configurations, and services in the hello package, allowing it to find the controllers.

  • Summary(总结一下)

    Congratulations! You have just developed a web page using Spring.

    The main() method uses Spring Boot’s SpringApplication.run() method to launch an application. Did you notice that there wasn’t a single line of XML? No web.xml file either. This web application is 100% pure Java and you didn’t have to deal with configuring any plumbing or infrastructure.(没有web.xml的web应用,是否是很神奇?使用spring boot建立的应用是一个纯java应用,不用管各类烦人的配置,这就是约定大约配置的魅力。)

    Build an executable JAR(构建一个可执行的JAR)

    You can run the application from the command line with Gradle or Maven. Or you can build a single executable JAR file that contains all the necessary dependencies, classes, and resources, and run that. This makes it easy to ship, version, and deploy the service as an application throughout the development lifecycle, across different environments, and so forth.(我用maven)

    If you are using Maven, you can run the application using ./mvnw spring-boot:run. (命令行启动)

  • Or you can build the JAR file with ./mvnw clean package. Then you can run the JAR file:(或者现打包,而后运行jar)

    java -jar target/gs-serving-web-content-0.1.0.jar
      The procedure above will create a runnable JAR. You can also opt to build a classic WAR fileinstead.

    Logging output is displayed. The app should be up and running within a few seconds.

    Test the App(测试下)

    Now that the web site is running, visit http://localhost:8080/greeting, where you see:(无参数访问,返回默认值)

    "Hello, World!"

    Provide a name query string parameter with http://localhost:8080/greeting?name=User. Notice how the message changes from "Hello, World!" to "Hello, User!":(有参数访问,返回请求的参数)

    "Hello, User!"

    This change demonstrates that the @RequestParam arrangement in GreetingController is working as expected. The name parameter has been given a default value of "World", but can always be explicitly overridden through the query string.

  • Add a Home Page(加一个首页)

    Static resources, like HTML or JavaScript or CSS, can easily be served from your Spring Boot application just be dropping them into the right place in the source code. By default Spring Boot serves static content from resources in the classpath at "/static" (or "/public"). The index.html resource is special because it is used as a "welcome page" if it exists, which means it will be served up as the root resource, i.e. at http://localhost:8080/ in our example. So create this file:(静态资源,好比html、js、css直接扔到约定位置/static,就能够生效。根页面的名字也有约定-index.html,咱们在resources目录下建一个static文件夹,而后在建立index.html 以下)

    src/main/resources/static/index.html

    <!DOCTYPE HTML>
    <html>
    <head>
        <title>Getting Started: Serving Web Content</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <p>Get your greeting <a href="/greeting">here</a></p>
    </body>
    </html>

    and when you restart the app you will see the HTML at http://localhost:8080/.

  • Summary

    Congratulations! You have just developed a web page using Spring.

我也来总结下,建议一步一步跟随官网指导来作,使用gs-serving-web-content\initial,一点点填充,最后跑起来。若是遇到问题的话,对照gs-serving-web-content\complete看看,这个是完整版。

相关文章
相关标签/搜索