zoukankan      html  css  js  c++  java
  • 基于jdk自带httpserver开发的最小完整MVC框架

    基于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='/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="/jinjin.htm">静静</a>)
    </div>
    #footer()
    </body>
    </html>
    
    (五)运行 JdkApp.main()
    (六)DEMO源码

    源码:demo11.solon_jdk_http_mvc

  • 相关阅读:
    【Linux笔记】Linux目录结构
    《Effective C#》快速笔记(五)-
    《Effective C#》快速笔记(四)- 使用框架
    《Effective C#》快速笔记(三)- 使用 C# 表达设计
    《Effective C#》快速笔记(二)- .NET 资源托管
    《Effective C#》快速笔记(一)- C# 语言习惯
    Visual Studio 数据库架构比较
    C# 反射与dynamic最佳组合
    C# 调用WebApi
    基于微软开发平台构建和使用私有NuGet托管库
  • 原文地址:https://www.cnblogs.com/noear/p/12103742.html
Copyright © 2011-2022 走看看