服务端程序本质上也只是个Java程序,它接收客户端的输入,然后将计算处理后的返回值返回给客户端。下面我们就以这个思路开始Java后端之旅吧。

引用Spring Boot库

处理HTTP请求之类的事情,我们需要库的帮助。所以第一步我们就把Spring Boot引入进来。
不需要任何工具,我们使用maven来管理库依赖,这样我们只要写一个pom.xml就好了。我们先写一个最简的pom.xml。主要是定义groupId,比如是我司,还有artifactId,就是应用的具体名字:

<?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>cn.alios.system.service.prefix</groupId><artifactId>Prefix</artifactId><version>1.0.0-SNAPSHOT</version></project>

添加父引用

类似于类的继承,我们不是从头开发,而是继承Spring Boot Starter框架。添加parent的内容如下:

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

2.1.2是本文写作时,Spring Boot的最新版本。

增加依赖

为了自动下载库,我们将需要的几个库添加到pom.xml中的依赖项中。这样maven就可以帮我们从仓库中下载最新的库代码。
我们需要AOP和Web两个包,用全名是spring-boot-starter-aop和spring-boot-starter-web:

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

引用插件

Spring Boot还提供了插件,我们也将其引用进来:

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

主函数

库引用完了,我们就写一个主程序吧。按照惯例,我们将其保存在src/main/java目录下:

package cn.alios.system.service.prefix;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@SpringBootApplication
@RequestMapping("/")
public class Prefix {@RequestMapping("/")@ResponseBodypublic String home(){return "Hello, Java Web World!";}public static void main(String[] args) throws Exception{SpringApplication.run(Prefix.class,args);}
}

编译

下面我们用mvn package命令来编译生成可运行的jar包:

mvn package

输出类似于下面这样:

[INFO] Scanning for projects...
[INFO]
[INFO] ---------------< cn.alios.system.service.prefix:Prefix >----------------
[INFO] Building Prefix 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ Prefix ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ Prefix ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/ziyingliuziying/working/gitlab/Prefix/target/classes
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ Prefix ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/ziyingliuziying/working/gitlab/Prefix/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ Prefix ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ Prefix ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:3.1.1:jar (default-jar) @ Prefix ---
[INFO] Building jar: /Users/ziyingliuziying/working/gitlab/Prefix/target/Prefix-1.0.0-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.1.2.RELEASE:repackage (repackage) @ Prefix ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.462 s
[INFO] Finished at: 2019-01-31T16:53:48+08:00
[INFO] ------------------------------------------------------------------------

最后生成的包是target/Prefix-1.0.0-SNAPSHOT.jar。

运行

调用java -jar target/Prefix-1.0.0-SNAPSHOT.jar命令,运行这个Java程序,输出如下:

.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v2.1.2.RELEASE)2019-01-31 16:59:43.144  INFO 95879 --- [           main] cn.alios.system.service.prefix.Prefix    : Starting Prefix v1.0.0-SNAPSHOT on ziyingliuziyingdeMacBook-Pro.local with PID 95879 (/Users/ziyingliuziying/working/gitlab/Prefix/target/Prefix-1.0.0-SNAPSHOT.jar started by ziyingliuziying in /Users/ziyingliuziying/working/gitlab/Prefix)
2019-01-31 16:59:43.148  INFO 95879 --- [           main] cn.alios.system.service.prefix.Prefix    : No active profile set, falling back to default profiles: default
2019-01-31 16:59:44.289  INFO 95879 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2019-01-31 16:59:44.325  INFO 95879 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-01-31 16:59:44.325  INFO 95879 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.14]
2019-01-31 16:59:44.347  INFO 95879 --- [           main] o.a.catalina.core.AprLifecycleListener   : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/ziyingliuziying/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]
2019-01-31 16:59:44.435  INFO 95879 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-01-31 16:59:44.435  INFO 95879 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1234 ms
2019-01-31 16:59:44.665  INFO 95879 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-01-31 16:59:44.886  INFO 95879 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-01-31 16:59:44.889  INFO 95879 --- [           main] cn.alios.system.service.prefix.Prefix    : Started Prefix in 2.161 seconds (JVM running for 2.561)

我们可以看到,启动了一个9.0.14版本的Apache Tomcat服务器,在8080端口上监听。

我们打开浏览器,访问http://127.0.0.1:8080/,可以看到『Hello, Java Web World!』这个字符串被显示出来。

再写一个Controller

在主函数里面可以处理请求,那么再其它类里面该如何做呢?我们通过写@Controller注解,加上@RequestMapping来指定路径,就可以了。
我们来写个例子:

package cn.alios.system.service.prefix.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/test")
public class TestController {@RequestMapping("/")@ResponseBodypublic String test(){return "Test Controller!";}
}

还是mvn package,然后java -jar java -jar target/Prefix-1.0.0-SNAPSHOT.jar。
在浏览器里试下http://127.0.0.1:8080/test/,显示:『Test Controller!』
大功告成!现在整个从接收输入到显示输出的通道已经打通,是不是很easy?

原文链接
本文为云栖社区原创内容,未经允许不得转载。

全民学后端快餐教程(1) - 只不过是写个Java程序相关推荐

  1. Tensorflow快餐教程(12) - 用机器写莎士比亚的戏剧

    高层框架:TFLearn和Keras 上一节我们学习了Tensorflow的高层API封装,可以通过简单的几步就生成一个DNN分类器来解决MNIST手写识别问题. 尽管Tensorflow也在不断推进 ...

  2. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧

    写Java程序是要按照步骤来的,这样才能写好一个java程序,那么接下来,我们就来给大家讲解一下写一个java程序的步骤是什么? (1)创建Java项目:"FileàNewàProjectà ...

  3. java廖雪峰_廖雪峰Java教程学习笔记(一)——Java程序基础

    (一)Java程序基本结构 Java是面向对象的语言,一个程序的基本单位就是class.在class内部,可定义若干方法. 类名要求: 类名必须以英文字母开头,后接字母,数字和下划线的组合 习惯以大写 ...

  4. 写给 Java 程序员的前端 Promise 教程

    文章目录 1. 为什么需要 Promise 2. Promise 3. then 3.1 正常 return 3.2 抛出异常 3.3 返回 Promise 4. catch 5. finally 6 ...

  5. python抽奖教程_利用Python写一个抽奖程序,解密游戏内抽奖的秘密|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 分析需求 我们先整理下思路,目标是什么?目标是要写一个抽奖程序,那么抽奖程序的核心是什么?当然是如何判断一 ...

  6. 专项支出用款申请单:全民学Excel第六季

    专项支出用款申请书,顾名思义,就是当我们向上级申请某一项支出时需要用到的文书,简单的说就是一个表格啦.至于这个表格中到底需要哪些内容,或者说这个表格是怎么做出来的, Excel 可以帮我们解决这样两个 ...

  7. 开源美容美发行业小程序源码系统 完整前端+后端+部署教程

    分享一款开源的美容美发行业小程序源码系统,单店多店可以自由切换,实现一键在线预约,含完整前端+后端+部署教程,上手so easy! 小程序页面功能截图展示: 本套系统采用PHP+MySQL组合开发,系 ...

  8. 强哥带你零基础学java-03运行第一个java程序

    java是什么,java是一种编程语言的名字,在生活中,我们知道的有汉语,英语.运用汉语语法,我们可以写一篇文章.同样的道理,用java的语法,我们就可以写程序了. 那么现在的问题是,要如何来写呢?现 ...

  9. python语言入门教程-菜鸟学Python入门教程大盘点|7个多月的心血总结

    原标题:菜鸟学Python入门教程大盘点|7个多月的心血总结 阅读本文大概需要5分钟 菜鸟学python已经写了70几篇,入门的教程已经快写完了,我把入门的文章整理了一下,下面是入门篇的一些总结,也是 ...

最新文章

  1. MongoDB数据库的下载与Python交互
  2. 6、删除视图(DORP VIEW)
  3. mac mysql ip访问不了_解决mysql中只能通过localhost访问不能通过ip访问的问题
  4. oracle什么时候需要commit
  5. Boost:标记的的bimap双图测试程序
  6. CSS+DIV-CSS滤镜的应用
  7. nuxt.js的核心代码_Nuxt.js中的通用应用程序代码结构
  8. 在计算机网络中发送电子邮件遵循的协议是,一、计算机网络刷题
  9. c++ list sort
  10. python virtualenv 坑_Python 虛擬環境 | Mac/Linux下如何避坑安裝配置Virtualenv
  11. 面向机器学习的特征工程 六、降维:用 PCA 压缩数据集
  12. NumPy 统计方法
  13. 普通摄像头的数据输出格式YUV与mjpeg之间联系、DCT离散余弦变换去噪跟压缩(待补充)
  14. NPAPI:JS的Number,在接口中可能是int32,也可能是double
  15. 解决:qrc文件中删除资源文件后编译失败
  16. WPF实现选项卡效果(1)——使用AvalonDock
  17. 一种基于SoC和阿里云的智能家居系统设计方案_家电研究报告
  18. H5小游戏《看你有多色》扩展(辅助、眼力)
  19. 2_竞赛无人机基础飞行控制函数——零基础学习竞赛无人机搭积木式编程
  20. 微信公众号文章采集的一些基础概念

热门文章

  1. 最少交换次数python_leetcode第200周赛第三题leetcode1536. 排布二进制网格的最少交换次数...
  2. pythondistutils安装_python – 与distutils / pip一起安装Bash完成
  3. ghelper失效_Ghelper账号+网易云音乐领黑胶会员35天
  4. 创建前缀一样的文件_SpringBoot:配置文件属性读取
  5. 使用yum命令安装mysql_Linux Centos 下使用yum 命令安装mysql实现步骤
  6. java面试加分_不只是给面试加分 -- Java WeakReference的理解与使用
  7. gridview不显示bit_色彩要求高?这款27寸2K +10.7亿色的显示器工作娱乐都适合
  8. headerIP php_PHP curl伪造IP地址和header信息代码实例
  9. 恭喜!已获8个院士的他,又新当选德国院士!
  10. 算法当道!为什么人类和人工智能越来越像?