mvn package
就可以打包一个 jar 文件java -jar XXX.jar
就可以启动网站,连静态资源都包含在内。其中:
如果想新建一个受 Maven 管理的 Java 项目,使用 IDEA 是最方便的。
如上图所示,填写必要的信息, Build system 选择 Maven 即可。
参考: github.com/ahui2016/monostich/.../pom.xml
在 IDEA 左边栏的目录树里可以看到有 pom.xml 文件。
pom.xml 文件是 Maven 的配置文件,基本上复制粘贴上面链接里的内容即可,但要注意:
<groupId>
修改为你自己的域名(确保不会与别人的域名相同)<artifactId>
修改为你的项目名称(即前面图片中的 MyProject)<mainClass>
修改为你的 package 名称和 class 名称
(例如:如果在前面新建 package 时填写了 com.example.myproject, 新建 class 时填写了 App, 那么现在就应该填写 com.example.myproject.App )在这一步,关键的是 index.html 和 index.js, 由于只是用于演示,文件内容非常简单,一看就懂。
这两个前端文件只实现了一个功能: 用 axios 与后端通信,获取一个 JSON, 再用 jquery 把该 JSON 的内容反映到 HTML 页面中。
App.java 文件的内容全文如下:
package cc.ai42.monostich;
import io.javalin.Javalin;
import io.javalin.http.staticfiles.Location;
import java.util.Map;
public class App {
public static void main(String[] args) {
@SuppressWarnings("resource")
Javalin app = Javalin.create(config -> {
config.addStaticFiles(staticFiles -> {
staticFiles.hostedPath = "/";
staticFiles.directory = "/public";
staticFiles.location = Location.CLASSPATH;
});
}).start(7070);
app.get("/api/hello", ctx -> {
var result = Map.of("hello", "world");
ctx.json(result);
});
}
}
axios.get('/api/hello')
与 这里的 app.get("/api/hello", ctx)
对应。代码已经全部写好,在终端进入项目的根目录(第一步创建的 MyProject 文件夹),执行命令 mvn package
, 然后执行命令 java -jar ./target/XXX.jar
即可启动网站。
其中 XXX.jar 的具体文件名可用命令 ls ./target
查看。
在上面的 App.java 文件里,这几句的作用是把前端静态文件打包进 jar 文件里:
staticFiles.hostedPath = "/";
staticFiles.directory = "/public";
staticFiles.location = Location.CLASSPATH;
但这样做,每次修改前端文件时,都需要执行 mvn package
重新打包。
因此,在开发阶段可以把这几行代码改为:
staticFiles.hostedPath = "/";
staticFiles.directory = "src/main/resources/public";
staticFiles.location = Location.EXTERNAL;
这样,每次修改前端文件,只需要在前端刷新页面即可看到最新变化。
从以上内容可以看出,后端用 pom.xml 添加依赖后,后端只需要一个 App.java 文件,前端两个文件 index.html, index.js, 内容都非常简短,就能实现一个前后端分离的网站,并且可打包成一个 jar 文件。
一个四个关键文件,以及目录结构,全部源码见这里: github.com/ahui2016/monostich/
Javalin网站框架介绍之二 - 数据库
https://geeknote.net/SuperMild/posts/1430
看到
get 'path' function
这样的路由我就会想到 https://sinatrarb.com/ 。不过 Ruby 缺一个简单的打包方式。