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

摘要:
<org.noear<版本>/版本>&书信电报;args);FooterTag“);sb.append(”<privateStringlabel;charset=utf-8“)publicStringhome(){return“<
基于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 引用
<dependencies>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>solon.boot.jdkhttp</artifactId>
        <version>1.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>solon.serialization.snack3</artifactId>
        <version>1.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>solon.view.enjoy</artifactId>
        <version>1.0.4</version>
    </dependency>
</dependencies>
(三)添加文件
  • 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("<footer>");
        sb.append("我是自定义标签,FooterTag");
        sb.append("</footer>");

        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 "<a href='http://t.zoukankan.com/helloworld'>/helloworld</a>";
    }
}
  • 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
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>#(title)</title>
</head>
<body>
<div>
    #(m.name) : #(message) (我想<a href="http://t.zoukankan.com/jinjin.htm">静静</a>)
</div>
#footer()
</body>
</html>
(五)运行 JdkApp.main()
(六)DEMO源码

源码:demo11.solon_jdk_http_mvc

免责声明:文章转载自《基于jdk自带httpserver开发的最小完整MVC框架》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇chrome浏览器解决 跨域调试问题MyEclipse快捷键大全下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WebView JS与RN进行通讯

RN0.37终于官方增加了WebView与React Native的通讯,之前一真使用的是第三方控件React-Native-WebView-Bridge,但不是知道怎么回事这个第三方控件喊了很长时间最终却是另一作者提交了该功能的官方版本。言归正转,由于Web的需求丰富多样所以如果不能实现WebView里的JS与RN的通讯的话,就显得特别不方便,下面代码示...

Android实现简单的检测手机自由落体关闭屏幕

实现功能如下:在背景运行app,检测到自由落体状态时,熄灭屏幕,可重复测试。 1. 检测自由落体动作  需要使用到加速度感应器 TYPE_ACCELEROMETER SensorManager mSensorManager; private float mLastX; private float mLastY; private float mLastZ;...

List.Select按字符串选择属性

不知道大家有没有遇到这样的情况:List使用Lambda表达式的时候,想要选择项的某个属性列。 例如,选择编号ID: 1 var idList=list.Select(o=>o.ID).ToList(); 又,想要选择名称: 1 var nameList=list.Select(o=>o.Name).ToList(); 可否将其抽象呢?下面是我...

WPF 绑定之静态与非静态属性更改

 源码下载地址:https://github.com/lizhiqiang0204/Static-and-non-static-property-changes 程序集整体结构如下  MainWindow.xaml布局如下 <Grid> <Grid.RowDefinitions> <R...

使用eclipse将maven项目部署tomcat, 以及如何实现热部署

在以前,我每次部署项目的时候都是关闭tomcat并开启tomcat,完成代码的编译并部署到tomcat上,现在想想,感觉当时怎么不去了解去如何部署到tomcat有几种方式,elispe 创建的web项目部署到tomcat的原理。若是了解了,估计很多时间都不会停留在关闭和开启tomcat上吧,当然这里也是说说而已。 目前,我是想把maven项目web工程部署...

css实现平行四边形、菱形图片效果

一、平行四边形 1. 使用两个元素实现 html <a class="button"> <div>click me</div> </a> css .button{ margin: 50px; display: inline-block; background: #404ED3; trans...