• 基于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

  • 相关阅读:
    XSS
    XSS练习小游戏
    CTF中常见的编码
    BugkuCTF
    A、B、C、D和E类IP地址
    JDK和JRE的区别及配置
    SQL注入漏洞测试(HTTP头注入)
    MS17-010远程溢出漏洞(CVE-2017-0143)拿权限
    SQL注入——布尔型盲注注入攻击——手工注入篇——SQL手工注入漏洞测试(MySQL数据库)
    mysql增删改查
  • 原文地址:https://www.cnblogs.com/noear/p/12103742.html
Copyright © 2020-2023  润新知