基于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 引用
<parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>1.0.9</version>
<relativePath />
</parent> <dependencies>
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.boot.jdkhttp</artifactId>
</dependency>
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.serialization.snack3</artifactId>
</dependency>
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.view.enjoy</artifactId>
</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

基于jdk自带httpserver开发的最小完整MVC框架的更多相关文章

  1. ***PHP基于H5的微信支付开发详解(CI框架)

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...

  2. 开发自己的PHP MVC框架(一)

    这个教程能够使大家掌握用mvc模式开发php应用的基本概念.此教程分为三个部分.如今这篇是第一部分. 如今市面上有非常多流行的框架供大家使用.可是我们也能够自己动手开发一个mvc框架.採用mvc模式能 ...

  3. ASP.NET MVC框架开发系列课程 (webcast视频下载)

    课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...

  4. 分享一实战性开源MVC框架<Linux、Windows跨平台开发so easy>

    一.引子   开源地址 https://github.com/564064202/Moon.Mvc 欢迎加入开发 .NET Core微软还在发力,但作为商用还有一段距离,很多开发库尚不能用于.NET ...

  5. 使用JDK自带的visualvm进行性能监测和调优

    使用JDK自带的visualvm进行性能监测和调优   1.关于VisualVm工具  VisualVM 提供在 Java 虚拟机 (Java Virutal Machine, JVM) 上运行的 J ...

  6. 基于Activiti的流程应用开发平台JSAAS-WF V5.3

    第1章 产品概述及体系架构 1.1.概述 红迅JSAAS-WF工作流平台V5是广州红迅软件有限公司面向合作伙伴以及有IT运维团队中大型企业提供新一代的流程管理产品,它基于流行的JAVA开源技术上构建, ...

  7. JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)

    前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也 ...

  8. JDK自带的日志Logging

    OK,现在我们来研究下JDK自带的日志Logger. 从jdk1.4起,JDK开始自带一套日志系统.JDK Logger最大的优点就是不需要任何类库的支持,只要有Java的运行环境就可以使用. 相对于 ...

  9. [转]JDK自带工具之问题排查场景示例

    最近看到了大量关于java性能调优.故障排查的文章,自己也写了一篇Java调优经验谈.接着此篇文章,其实一直打算写写一些常用调优工具以及它们的惯常用法的.后来在http://java-performa ...

  10. 011 - JDK自带的性能监控工具

      一.概要: jps -l 查看现有的java进程 jps -l 显示所有正在运行的java进程id   jstack 查看Java线程      jstack -l pid; 做thread du ...

随机推荐

  1. fastjson反序列化Map对象为null?其实它只是一个地址,试试Map深拷贝

    今天遇到一个小问题,我用fastjson,把一个map对象转为实体类对象返回给前端的时候,map对象里面的一个属性既然为null. 由于前端需求,我们需要返回一个json里面,有两个属性是一样的(都是 ...

  2. 服务器没有开放3306端口 远程访问MySQL数据库方法

    一.前言 ​ 当装有MySQL的服务器为了防止数据库被黑,提高安全性,把3306端口禁止掉,禁止对外访问,我之前写过一篇是借助跳板机的SSH隧道来访问实现安全,这种情况依然需要开放3306端口和使用一 ...

  3. CSS必学:你需要知道的盒子模型的秘密

    作者:WangMin 格言:努力做好自己喜欢的每一件事 作为前端开发来说,要掌握的CSS基础一定很多,那么CSS中盒子模型肯定是必考必问必掌握的前端知识点,因为它是CSS基础中非常重要的内容,接下来我 ...

  4. 该如何选择ClickHouse的表引擎

    该如何选择ClickHouse的表引擎 本文将介绍ClickHouse中一个非常重要的概念-表引擎(table engine).如果对MySQL熟悉的话,或许你应该听说过InnoDB和MyISAM存储 ...

  5. Redis系列之常见数据类型应用场景

    目录 String 简单介绍 常见命令 应用场景 Hash 简单介绍 常见命令 应用场景 List 简单介绍 常见命令 应用场景 Set 简单介绍 常见命令 应用场景 Sorted Set(Zset) ...

  6. Dom 的理解和操作

    dom 文本对象模型 12种节点类型 一.node类型  js中所有节点类型都继承自node类型 每个节点都有一个nodeType属性,表明节点类型:判断节点类型,if(somenode.nodeTy ...

  7. Android RTL 语言适配

    RTL 语言,即 right to left language,也就是右对齐的语言,与一般语言按照左对齐的方式不同,需要进行特别适配. AndroidManifest.xml 文件中,增加 andro ...

  8. .NET周刊【11月第2期 2023-11-12】

    国内文章 一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp https://www.cnblogs.com/Can-daydayup/p/17818557.html ...

  9. C语言有一分数序列: 2/1, 3 / 2,5/3,8/5,1 3/8,2 1/13... 求出这个数列得前20项之与。

    #include <stdio.h> void main() { int x, n = 20; double a = 2, b = 1, sws = 0; for (n; n >= ...

  10. 🎉开发者的福音:TinyVue 组件库文档大优化!类型更详细,描述更清晰!

    你好,我是 Kagol. 前言 从今年2月份开源以来,有不少朋友给我们 TinyVue 组件库提了文档优化的建议,这些建议都非常中肯,我们也在持续对文档进行优化,并且从中总结出了大家对于文档优化的一些 ...