试用SpringBoot创建WEB应用

简介:

最近试用了一下Spring Boot,发现用它创建WEB应用简直好爽啊,记录一下。


首先用Eclipse建一个maven工程,创建时选中“Create a simple proejct (skip archetype selection)”,建个简单工程就好了。


然后编辑pom.xml,引入相关的包,完整文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
< 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.test</ groupId >
   < artifactId >appboot</ artifactId >
   < version >0.0.1</ version >
   < name >appboot</ name >
   < dependencies >
     <!-- 引入WEB开发支持 -->
     < dependency >
       < groupId >org.springframework.boot</ groupId >
       < artifactId >spring-boot-starter-web</ artifactId >
       < version >1.4.1.RELEASE</ version >
     </ dependency >
     <!-- 引入FreeMarker支持 -->
     < dependency >
       < groupId >org.springframework.boot</ groupId >
       < artifactId >spring-boot-starter-freemarker</ artifactId >
       < version >1.4.1.RELEASE</ version >
     </ dependency >
     <!-- 引入重编译自动加载支持,这样在Eclipse中调试时有变更会自动重新加载 -->
     < dependency >
       < groupId >org.springframework.boot</ groupId >
       < artifactId >spring-boot-devtools</ artifactId >
       < version >1.4.1.RELEASE</ version >
       < optional >true</ optional >
     </ dependency >
     <!-- 引入fastjson,用于替换默认的json包 -->
     < dependency >
       < groupId >com.alibaba</ groupId >
       < artifactId >fastjson</ artifactId >
       < version >1.2.17</ version >
     </ dependency >
   </ dependencies >
   < build >
     < finalName >appboot</ finalName >
     < plugins >
       <!-- 引入maven打包支持 -->
       < plugin >
         < groupId >org.springframework.boot</ groupId >
         < artifactId >spring-boot-maven-plugin</ artifactId >
         < version >1.4.1.RELEASE</ version >
         < executions >
           < execution >
             < goals >
               < goal >repackage</ goal >
             </ goals >
           </ execution >
         </ executions >
       </ plugin >
     </ plugins >
   </ build >
</ project >


添加应用程序入口文件Application.java,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package  org.me;
 
import  org.springframework.boot.SpringApplication;
import  org.springframework.boot.autoconfigure.SpringBootApplication;
import  org.springframework.boot.autoconfigure.web.HttpMessageConverters;
import  org.springframework.context.annotation.Bean;
import  org.springframework.http.converter.HttpMessageConverter;
 
import  com.alibaba.fastjson.serializer.SerializerFeature;
import  com.alibaba.fastjson.support.config.FastJsonConfig;
import  com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
 
@SpringBootApplication
public  class  Application {
     /**
      * 用fastjson作为默认的json编码器
      * @return
      */
     @Bean
     public  HttpMessageConverters fastJsonHttpMessageConverters() {
         FastJsonHttpMessageConverter fastConverter =  new  FastJsonHttpMessageConverter();
         FastJsonConfig fastJsonConfig =  new  FastJsonConfig();
         fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue);
         fastConverter.setFastJsonConfig(fastJsonConfig);
         HttpMessageConverter<?> converter = fastConverter;
  
         return  new  HttpMessageConverters(converter);
     }
 
     /**
     * 应用程序入口
     * @param args
     */
     public  static  void  main(String[] args) {
         //用SpringApplication启动
         SpringApplication.run(Application. class , args);
     }
}


如果只用默认的json编码器,那么只有main方法就够了。然后来写一个控制器,比如叫HomeController:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package  org.me;
 
import  java.util.Date;
import  java.util.Map;
 
import  org.springframework.stereotype.Controller;
import  org.springframework.web.bind.annotation.RequestBody;
import  org.springframework.web.bind.annotation.RequestMapping;
import  org.springframework.web.bind.annotation.RequestMethod;
import  org.springframework.web.bind.annotation.ResponseBody;
 
/**
  * 定义一个控制器
  */
@Controller
public  class  HomeController {
     /**
     * 定义一个login方法,映射到/login上,返回视图为home/login.ftl
     */
     @RequestMapping ( "/login" )
     public  String login(Map<String, Object> model) {
         model.put( "time" new  Date());
         model.put( "message" "Hello, Spring Boot" );
         
         return  "home/login" ;
     }
     
     /**
     * 定义一个Json的调用
     */
     @RequestMapping (value =  "/checkLogin" , method = RequestMethod.POST)
     @ResponseBody
     public  JsonResult checkLogin( @RequestBody  LoginRequest request) {
         JsonResult result =  new  JsonResult();
         result.error =  2020 ;
         result.data = String.format( "%s : %s" , request.user, request.pass);
   
        return  result;
     }
}


和用SpringMVC时没有什么不同。SpringBoot一般不推荐JSP视图引擎,所以这里使用了freemarker作为视图引擎。login方法里指定了视图为home/login,因此在src/main/resources/templates/home下创建视图login.ftl:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
< html >
< head >
   < title >Login</ title >
   < meta  http-equiv = "Content-Type"  content = "text/html; charset=UTF-8"  />
   < link  rel = "stylesheet"  href = "css/core.css"  />
   < script  src = "js/jquery-3.1.1.min.js" ></ script >
   < script >
   $(function(){
       $("#login").click(function(){
         $.ajax({
           url: "checkLogin",
         type: "POST",
         contentType: "application/json",
         dataType: "json",
         data: JSON.stringify({user:"admin", pass:"123"}),
         success: function(data) {
             $("#out").text(JSON.stringify(data));
         }
       });
     });
   });
   </ script >
</ head >
< body >
   DateTime: ${time?time}< br >
   Message: ${message}< br />< br />
   < button  id = "login" >登录</ button >< br />< br />
   < div  id = "out" ></ div >
</ body >
</ html >


这个页面从控制器接收了time和message两个参数,用${}的形式显示在页面上。此外还包括了一个ajax调用,向后台请求checkLogin,并传入参数,显示返回值。


最后加个SpringBoot的配置文件,application.properties,放到src/main/resources下:

1
2
3
4
5
6
7
8
9
10
11
# APPLICATION SETTINGS (SpringApplication)
spring.main.web-environment=true
spring.main.show-banner=false
 
# EMBEDDED SERVER CONFIGURATION (ServerProperties) 
server.port=8080
 
# FREEMARKER (FreeMarkerAutoConfiguration)
spring.freemarker.cache=false
spring.freemarker.templateEncoding=UTF-8
spring.freemarker.suffix=.ftl


其实主要是server.port参数,我们的工程内置了tomcat,这个参数指定了tomcat的绑定端口。


完整的项目结构如下:

wKiom1gRkJaDM525AAA0DR-Ua5A151.png


默认情况下,视图放到resources/templates下,静态资源放到resources/static下。一切准备就绪,Ctrl+F11把工程跑起来吧,用浏览器访问 http://localhost:8080/login 就可以打开页面了。一但在Eclipse里修改了java文件,SpringBoot会自动重新加载,在开发调试时会很方便。


打包的时候,可以把整个项目的相关资源打成一个jar,这样用命令行就可以运行了。

mvn clean package

会在target下得到一个appboot.jar,这个jar里包含了用户代码的class文件、依赖的jar文件、视图文件、静态资源,会比较大,直接用命令行运行:

java -jar appboot.jar


一个完整的web应用就跑起来了,目标环境只要有JRE就够了,完全不用安装tomcat。虽然jar文件比较大,但是部署到远程环境的话可就方便多了。


至于性能,完全不用担心,本质是基于tomcat的,性能肯定不会差,拿ab测试一下:

ab -c 10 -n 100000 http://localhost:8080/login


结果如下,超过9000rps:

wKiom1gSqxXBZroBAAAuUbuqb7g120.png







     本文转自 BoyTNT 51CTO博客,原文链接:http://blog.51cto.com/boytnt/1866267,如需转载请自行联系原作者


相关文章
|
7天前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
25天前
|
Kubernetes Cloud Native Java
当 Quarkus 遇上 Spring Boot,谁才是现代云原生应用的终极之选?究竟哪款能助你的应用傲视群雄?
Quarkus 和 Spring Boot 均为构建现代云原生应用的热门框架,旨在简化开发流程并提升性能。Spring Boot 依托庞大的 Spring 生态系统,提供开箱即用的体验,适合快速搭建应用。Quarkus 由红帽发起,专为 GraalVM 和 HotSpot 设计,强调性能优化和资源消耗最小化,是云原生环境的理想选择。
26 3
|
2月前
|
Java Spring Apache
Spring Boot邂逅Apache Wicket:一次意想不到的完美邂逅,竟让Web开发变得如此简单?
【8月更文挑战第31天】Apache Wicket与Spring Boot的集成提供了近乎无缝的开发体验。Wicket以其简洁的API和强大的组件化设计著称,而Spring Boot则以开箱即用的便捷性赢得开发者青睐。本文将指导你如何在Spring Boot项目中引入Wicket,通过简单的步骤完成集成配置。首先,创建一个新的Spring Boot项目并在`pom.xml`中添加Wicket相关依赖。
64 0
|
2月前
|
Java Spring 开发者
Java Web开发新潮流:Vaadin与Spring Boot强强联手,打造高效便捷的应用体验!
【8月更文挑战第31天】《Vaadin与Spring Boot集成:最佳实践指南》介绍了如何结合Vaadin和Spring Boot的优势进行高效Java Web开发。文章首先概述了集成的基本步骤,包括引入依赖和配置自动功能,然后通过示例展示了如何创建和使用Vaadin组件。相较于传统框架,这种集成方式简化了配置、提升了开发效率并便于部署。尽管可能存在性能和学习曲线方面的挑战,但合理的框架组合能显著提升应用开发的质量和速度。
39 0
|
2月前
|
Java 前端开发 Spring
技术融合新潮流!Vaadin携手Spring Boot、React、Angular,引领Web开发变革,你准备好了吗?
【8月更文挑战第31天】本文探讨了Vaadin与Spring Boot、React及Angular等主流技术栈的最佳融合实践。Vaadin作为现代Java Web框架,与其他技术栈结合能更好地满足复杂应用需求。文中通过示例代码展示了如何在Spring Boot项目中集成Vaadin,以及如何在Vaadin项目中使用React和Angular组件,充分发挥各技术栈的优势,提升开发效率和用户体验。开发者可根据具体需求选择合适的技术组合。
48 0
|
2月前
|
JSON Java API
解码Spring Boot与JSON的完美融合:提升你的Web开发效率,实战技巧大公开!
【8月更文挑战第29天】Spring Boot作为Java开发的轻量级框架,通过`jackson`库提供了强大的JSON处理功能,简化了Web服务和数据交互的实现。本文通过代码示例介绍如何在Spring Boot中进行JSON序列化和反序列化操作,并展示了处理复杂JSON数据及创建RESTful API的方法,帮助开发者提高效率和应用性能。
85 0
|
2月前
|
缓存 Java 数据库连接
Spring Boot 资源文件属性配置,紧跟技术热点,为你的应用注入灵动活力!
【8月更文挑战第29天】在Spring Boot开发中,资源文件属性配置至关重要,它让开发者能灵活定制应用行为而不改动代码,极大提升了可维护性和扩展性。Spring Boot支持多种配置文件类型,如`application.properties`和`application.yml`,分别位于项目的resources目录下。`.properties`文件采用键值对形式,而`yml`文件则具有更清晰的层次结构,适合复杂配置。此外,Spring Boot还支持占位符引用和其他外部来源的属性值,便于不同环境下覆盖默认配置。通过合理配置,应用能快速适应各种环境与需求变化。
36 0
|
2月前
|
消息中间件 Java Kafka
Spring Boot与模板引擎:整合Thymeleaf和FreeMarker,打造现代化Web应用
【8月更文挑战第29天】这段内容介绍了在分布式系统中起到异步通信与解耦作用的消息队列,并详细探讨了三种流行的消息队列产品:RabbitMQ、RocketMQ 和 Kafka。RabbitMQ 是一个基于 AMQP 协议的开源消息队列系统,支持多种消息模型,具有高可靠性及稳定性;RocketMQ 则是由阿里巴巴开源的高性能分布式消息队列,支持事务消息等多种特性;而 Kafka 是 LinkedIn 开源的分布式流处理平台,以其高吞吐量和良好的可扩展性著称。文中还提供了使用这三种消息队列产品的示例代码。
24 0
|
2月前
|
监控 Java API
Spring Boot中的异步革命:构建高性能的现代Web应用
【8月更文挑战第29天】Spring Boot 是一个简化 Spring 应用开发与部署的框架。异步任务处理通过后台线程执行耗时操作,提升用户体验和系统并发能力。要在 Spring Boot 中启用异步任务,需在配置类上添加 `@EnableAsync` 注解,并定义一个自定义的 `ThreadPoolTaskExecutor` 或使用默认线程池。通过 `@Async` 注解的方法将在异步线程中执行。异步任务适用于发送电子邮件、数据处理、外部 API 调用和定时任务等场景。最佳实践中应注意正确配置线程池、处理返回值和异常、以及监控任务状态,确保系统的稳定性和健壮性。
34 0
|
5月前
|
JSON IDE Java
创建一个简单的Spring Boot Web项目
创建一个简单的Spring Boot Web项目
146 1