zoukankan      html  css  js  c++  java
  • 基于AIO架构smarthttp开发的完整MVC框架

    基于AIO架构smarthttp开发的完整MVC框架

    写了篇《基于jdk自带httpserver开发的最小完整MVC框架》,就再写篇AIO的MVC

    DEMO启动时间:0.1s(应该算少的吧?)

    smart-http 是一款比较简易的 http服务器,其通信内核采用了smart-socket最新版v1.4.6。但想提供友好的WEB服务,需要很多别的功能。

    通过与solon框架的融合,便可以友好的提供MVC和AOP服务:

    • solon 是一个框架的壳,实现了MVC,IOC,AOP,注解,插件等等机制。把这个壳套在smart-http上,便可以为其提供mvc等能力。
    • smarthttp 是对smart-http的适配,使其能套上solon这个壳;同时还可以享用solon的其它插件带来的能力,如session,json等。
    • snack3 提供json和序列化支持,也足够小;已适配为solon的序列化框架之一。
    • enjoy 很难再找到比它更小的模板引擎了,还快得让人想哭。
    (一)新建一个 maven 空项目
    (二)添加 maven 引用
    <dependencies>
        <!-- 基于 smart-http 封装的 solon.boot -->
        <dependency>
            <groupId>org.noear</groupId>
            <artifactId>solon.boot.smarthttp</artifactId>
            <version>1.0.4</version>
        </dependency>
        <!-- 一个小巧的JSON框架 -->
        <dependency>
            <groupId>org.noear</groupId>
            <artifactId>solon.serialization.snack3</artifactId>
            <version>1.0.4</version>
        </dependency>
        <!-- enjoy模板引擎 -->
        <dependency>
            <groupId>org.noear</groupId>
            <artifactId>solon.view.enjoy</artifactId>
            <version>1.0.4</version>
        </dependency>
        <!-- 静态文件支持 -->
        <dependency>
            <groupId>org.noear</groupId>
            <artifactId>solon.extend.staticfiles</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/AioApp.java
    • resources/static/jinjin.htm
    • resources/WEB-INF/view/helloworld.shtm (shtm,被适配为enjoy默认的后缀名)
    • //不用配置

    补充说明:

    //资源路径说明(不用配置)
    resources/application.properties(或 application.yml) 为应用配置文件
    resources/static/ 为静态文件根目标
    resources/WEB-INF/view/ 为视图文件根目标(支持多视图共存)
    
    //模板调试模式(或加热加载模式):
    启动参数添加:-deubg=1
    
    (四)代码
    • webapp/AioApp.java
    public class AioApp {
        public static void main(String[] args) {
            XApp.start(AioApp.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>
    
    (五)运行 AioApp.main()
    (六)DEMO源码

    源码:demo12.solon_aio_http_mvc

  • 相关阅读:
    JPEG图像压缩算法流程详解
    JPEG标准推荐的亮度、色度DC、AC Huffman编码表
    17软工- 第0次个人作业
    CNN炼丹瞎记录 mobilenet & se-resnet
    huggingface Bert的encode方法
    Failed to execute goal org.scala-tools:maven-scala-plugin:2.15.2:compile (compile) on project databus: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 1(Exit value: 1)
    QT5实现消灭星星源码
    Hibernate介绍与简单使用示例代码
    Redis数据库介绍
    Failed to convert property value of type 'java.util.LinkedHashMap' to required type 'com.sun.javafx.collections.MappingChange$Map' for property
  • 原文地址:https://www.cnblogs.com/noear/p/12104572.html
Copyright © 2011-2022 走看看