基于jdk自带httpserver开发的最小完整MVC框架

410kb级的完整MVC:solon(83k) + jdkhttp(27k) + enjoy(227k) + snack3(73k)

DEMO启动时间:0.1s

solon 是一个插件框架,提供MVC,IOC,AOP,注解,插件机制。

jdkhttp 基于jdk8自带com.sun.net.httpserver封装而成,有完整的http功能。

snack3 提供json和序列化支持,也足够小。

enjoy 很难再找到比它更小的模板引擎了,还快得让人想哭。

(一)新建一个 maven 空项目

(二)添加 maven 引用

org.noear

solon-parent

1.0.9

org.noear

solon.boot.jdkhttp

org.noear

solon.serialization.snack3

org.noear

solon.view.enjoy

(三)添加文件

java/webapp/controller/HelloworldController.java

java/webapp/controller/HomeController.java

java/webapp/model/UserModel.java

java/webapp/widget/FooterTag.java

java/webapp/JdkApp.java

resources/static/jinjin.htm

resources/WEB-INF/view/helloworld.shtm

//不用配置

补充说明:

//资源路径说明(不用配置)

resources/application.properties(或 application.yml) 为应用配置文件

resources/static/ 为静态文件根目标

resources/WEB-INF/view/ 为视图文件根目标(支持多视图共存)

//模板调试模式(或加热加载模式):

启动参数添加:-deubg=1

(四)代码

webapp/JdkApp.java

public class JdkApp {

public static void main(String[] args) {

XApp.start(JdkApp.class, args);

}

}

webapp/widget/FooterTag.java

@XBean("view:footer")

public class FooterTag extends Directive {

@Override

public void exec(Env env, Scope scope, Writer writer) {

StringBuffer sb = new StringBuffer();

sb.append("");

sb.append("我是自定义标签,FooterTag");

sb.append("");

try {

writer.write(sb.toString());

}catch (Exception ex){

ex.printStackTrace();

}

}

}

webapp/model/UserModel.java

@Data

public class UserModel {

private long id;

private String name;

private int sex;

private String label;

}

webapp/controller/HomeController.java

@XController

public class HomeController {

@XMapping(value = "/", produces = "text/html;charset=utf-8")

public String home(){

return "/helloworld";

}

}

webapp/controller/HelloworldController.java

@XController

public class HelloworldController {

@XMapping("/helloworld")

public Object helloworld(){

UserModel m = new UserModel();

m.setId(10);

m.setName("刘之西东");

m.setSex(1);

ModelAndView vm = new ModelAndView("helloworld.shtm");

vm.put("title","demo");

vm.put("message","hello world!");

vm.put("m",m);

return vm;

}

}

resources/WEB-INF/view/helloworld.shtm

#(title)

#(m.name) : #(message) (我想静静)

#footer()

(五)运行 JdkApp.main()

(六)DEMO源码

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐