Spring Boot 系列 —— Hello World

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lewis_007/article/details/50901049

在这个章节,先来一个Hello World的Web应用,用以对Spring Boot做一个初步的了解。

我打算使用Maven和Eclipse开始我们的Hello World。

准备

Spring Boot当前最新版本为1.3.3.RELEASE,按照官方文档指引,首先确保安装了JDK 1.6+、Maven 3.2+。

以Windows为例,在命令行输入命令,如下:

C:\Users\lewis>java -version
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
C:\Users\lewis>mvn --v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: D:\Apps\DevpApp\Apache\apache-maven-3.3.9
Java version: 1.8.0_74, vendor: Oracle Corporation
Java home: D:\Apps\DevpApp\Java\jdk1.8.0_74\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"

创建Maven Project

首先通过Eclipse创建一个Maven Project,其pom文件如下:

<?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>

    <groupId>org.learn.springboot</groupId>
    <artifactId>gs-spring-boot</artifactId>
    <version>0.1.0</version>

</project>

添加spring-boot-starter-parent

Spring Boot提供了一系列starter POMs,这个在前一篇文章有介绍。其中spring-boot-starter-parent是一个特殊的starter,它提供了很多有用的Maven默认设置,重要的是它还包括一个dependency-management。

在pom文件中加入如下代码:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
    </parent>

添加依赖

既然是Web应用,那么为我们的项目添加spring-boot-starter-web依赖。

在pom文件中加入如下代码:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

编写代码

为完成Hello World的Web应用,我们需要一个Java文件。

在src/main/java目录下,创建一个类SampleController,代码如下:

package org.learn.springboot.gs;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}

运行

到这里,所有工作就完成了,剩下就是运行看效果了。

在Eclipse中启动你的SampleController类,控制台会输出信息:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.3.3.RELEASE)

2016-03-15 22:58:41.200  INFO 2636 --- [           main] o.learn.springboot.gs.SampleController   : Starting SampleController on DESKTOP-RSSEC8O with PID 2636 (E:\work\project\learn-spring-boot\gs-spring-boot\target\classes started by lewis in E:\work\project\learn-spring-boot\gs-spring-boot)
2016-03-15 22:58:41.216  INFO 2636 --- [           main] o.learn.springboot.gs.SampleController   : No active profile set, falling back to default profiles: default
2016-03-15 22:58:41.341  INFO 2636 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@df27fae: startup date [Tue Mar 15 22:58:41 CST 2016]; root of context hierarchy
2016-03-15 22:58:42.403  INFO 2636 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2016-03-15 22:58:43.636  INFO 2636 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-03-15 22:58:43.677  INFO 2636 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-03-15 22:58:43.677  INFO 2636 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.32
2016-03-15 22:58:43.896  INFO 2636 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2016-03-15 22:58:43.896  INFO 2636 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2586 ms
2016-03-15 22:58:44.318  INFO 2636 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2016-03-15 22:58:44.318  INFO 2636 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-03-15 22:58:44.318  INFO 2636 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-03-15 22:58:44.318  INFO 2636 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2016-03-15 22:58:44.318  INFO 2636 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'requestContextFilter' to: [/*]
2016-03-15 22:58:44.728  INFO 2636 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@df27fae: startup date [Tue Mar 15 22:58:41 CST 2016]; root of context hierarchy
2016-03-15 22:58:44.838  INFO 2636 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String org.learn.springboot.gs.SampleController.home()
2016-03-15 22:58:44.854  INFO 2636 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2016-03-15 22:58:44.854  INFO 2636 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2016-03-15 22:58:44.947  INFO 2636 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-15 22:58:44.947  INFO 2636 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-15 22:58:45.026  INFO 2636 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-03-15 22:58:45.244  INFO 2636 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2016-03-15 22:58:45.401  INFO 2636 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-03-15 22:58:45.416  INFO 2636 --- [           main] o.learn.springboot.gs.SampleController   : Started SampleController in 5.17 seconds (JVM running for 6.246)

在浏览器中打开localhost:8080,页面会带给你惊喜:

Hello World!

创建可执行的jar包

再一次惊喜,把这些变成一个可执行的jar包,并且发布生产环境可独立运行。

在pom文件中加入如下代码:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

然后,在命令行执行mvn package

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building gs-spring-boot 0.1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- ------
[INFO] 
[INFO] --- maven-jar-plugin:2.5:jar (default-jar) @ gs-spring-boot ---
[INFO] Building jar: E:\work\project\learn-spring-boot\gs-spring-boot\target\gs-spring-boot-0.1.0.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.3.3.RELEASE:repackage (default) @ gs-spring-boot ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

在工程的target目录下,你会看到gs-spring-boot-0.1.0.jar,大概12.8M,因为这个jar包包含了所有的依赖lib。

通过压缩软件或者在命令行输入命令java tvf gs-spring-boot-0.1.0.jar,你可以进一步研究下这个jar包的内部结构。

在命令行,进入target目录,输入命令java -jar,如下:

E:\work\project\learn-spring-boot\gs-spring-boot\target>java -jar gs-spring-boot-0.1.0.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v1.3.3.RELEASE)

2016-03-15 23:20:47.934  INFO 5252 --- [           main] o.learn.springboot.gs.SampleController   : Starting SampleController v0.1.0 on DESKTOP-RSSEC8O with PID 5252 (E:\work\project\learn-spring-boot\gs-spring-boot\target\gs-spring-boot-0.1.0.jar started by lewis in E:\work\project\learn-spring-boot\gs-spring-boot\target)
2016-03-15 23:20:47.934  INFO 5252 --- [           main] o.learn.springboot.gs.SampleController   : No active profile set, falling back to default profiles: default
2016-03-15 23:20:47.996  INFO 5252 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@29159081: startup date [Tue Mar 15 23:20:47 CST 2016]; root of context hierarchy
......
2016-03-15 23:20:52.082  INFO 5252 --- [           main] o.learn.springboot.gs.SampleController   : Started SampleController in 4.679 seconds (JVM running for 5.326)

在浏览器中打开localhost:8080,页面会再一次带给你惊喜。

猜你喜欢

转载自blog.csdn.net/lewis_007/article/details/50901049