基于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 引用
<parent>
<groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId>
<version>1.9.1</version>
</parent>
<dependencies>
<!-- 基于 smart-http 封装的 solon.boot -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.boot.smarthttp</artifactId>
</dependency>
<!-- 一个小巧的JSON框架 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.serialization.snack3</artifactId>
</dependency>
<!-- enjoy模板引擎 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.view.enjoy</artifactId>
</dependency>
<!-- 静态文件支持 -->
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.web.staticfiles</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/AioApp.java
- resources/static/jinjin.htm
- resources/WEB-INF/view/helloworld.shtm (shtm,被适配为enjoy默认的后缀名)
- //不用配置
补充说明:
//资源路径说明(不用配置)
resources/app.properties(或 app.yml) 为应用配置文件
resources/static/ 为静态文件根目标
resources/WEB-INF/view/ 为视图文件根目标(支持多视图共存)
//模板调试模式(或加热加载模式):
启动参数添加:-deubg=1
(四)代码
- webapp/AioApp.java
public class AioApp {
public static void main(String[] args) {
App.start(AioApp.class, args);
}
}
- webapp/widget/FooterTag.java
@Component("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
@Controller
public class HomeController {
@Produces("text/html;charset=utf-8")
@Mapping("/")
public String home(){
return "<a href='/helloworld'>/helloworld</a>";
}
}
- webapp/controller/HelloworldController.java
@Controller
public class HelloworldController {
@Mapping("/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()
- 浏览器打开:http://localhost:8080/
- 浏览器输出:/helloworld
(六)DEMO源码
基于AIO架构smarthttp开发的完整MVC框架的更多相关文章
- 开发自己PHP MVC框架(一)
本教程翻译自John Squibb 的Build a PHP MVC Framework in an Hour,但有所改动,原文地址:http://johnsquibb.com/tutorials 这 ...
- 【Qt编程】基于Qt的词典开发系列<一>--词典框架设计及成品展示
去年暑假的时候,作为学习Qt的实战,我写了一个名为<我爱查词典>的词典软件.后来由于导师项目及上课等原因,时间不足,所以该软件的部分功能欠缺,性能有待改善.这学期重新拿出来看时,又有很多东 ...
- Java Servlet开发的轻量级MVC框架最佳实践
在Servlet开发的工程实践中,为了减少过多的业务Servlet编写,会采用构建公共Servlet的方式,通过反射来搭建轻量级的MVC框架,从而加快应用开发. 关于Servlet开发的基础知识,请看 ...
- web开发中的MVC框架与django框架的MTV模式
1.MVC 有一种程序设计模式叫MVC,核心思想:分层,解耦,分离了 数据处理 和 界面显示 的代码,使得一方代码修改了不会影响到另外一方,提高了程序的可扩展性和可维护性. MVC的全拼为Model- ...
- linux上配置bochs,搭建基于X86架构操作系统的开发环境
学习操作系统最好的方法就是自己编写新的操作系统,或者修改已有的操作系统.但是如果在真机上完成这个过程,调试会成为一个很大的问题.利用虚拟机来完成,可以使调试过程变得简单,而且能节约很多开关机的时间. ...
- fast-framework – 基于 JDK 8 实现的 Java Web MVC 框架
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! fast-framework 轻量级 Java Web 框架 – https://github. ...
- 基于NetCore+SqlSugar+Layui开发出来的开源框架项目FytSoaCms问题处理
最近刚好在学习NetCore框架所以就在网上搜索了一下相关的开源框架项目,正好在Github上找到了一个不错的开源框架所以推荐给大家看看哈哈哈. 1:项目相关技术 运行NetCore SDK版本为2. ...
- 从MVC框架看MVC架构的设计(转)
尽管MVC早已不是什么新鲜话题了,但是从近些年一些优秀MVC框架的设计上,我们还是会发现MVC在架构设计上的一些新亮点.本文将对传统MVC架构中的一些弊病进行解读,了解一些优秀MVC框架是如何化解这些 ...
- Portlet MVC框架
Portlet MVC框架 16.1. 介绍 Spring不仅支持传统(基于Servlet)的Web开发,也支持JSR-168 Portlet开发. Portlet MVC框架尽可能多地采用Web ...
- ASP.NET 之 MVC框架及搭建
一.MVC简介 MVC:Model-View-Controller(模型-视图-控制器),MVC是一种软件开发架构模式. 1.模型(Model) 模型对象是实现应用程序数据域逻辑的应用程序部件. 通常 ...
随机推荐
- C++11 列表初始化都做了什么?
类的成员变量的初始化细节 首先,来看两个问题: 类的构造函数中,成员变量的列表初始化是如何实现的? 为什么列表初始化效率上优于在构造函数中为成员变量赋值? (后文中,将 "在构造函数中为成员 ...
- [Python急救站课程]获取星期字符串
如何获取星期字符串 weekstr = "星期一星期二星期三星期四星期五星期六星期日" weekid = eval(input("请输入星期数字(1~7):") ...
- 神经网络基础篇:Python 中的广播(Broadcasting in Python)
Python 中的广播 这是一个不同食物(每100g)中不同营养成分的卡路里含量表格,表格为3行4列,列表示不同的食物种类,从左至右依次为苹果,牛肉,鸡蛋,土豆.行表示不同的营养成分,从上到下依次为碳 ...
- kali Linux安装pyenv
前言 pyenvpyenv 可让你轻松地在多个 Python 版本之间切换,是一个非常不错的python版本管理工具 安装步骤 安装依赖 apt-get install -y make build-e ...
- JavaScript高级程序设计笔记08 对象、类与面向对象编程
对象.类与面向对象编程 对象 一组属性的无序集合 属性 类型 数据属性 value.writable 访问器属性 getter.setter至少有一 定义 .操作符:默认可配置.可枚举.可写(数据属性 ...
- 开源推荐,灵活多变功能强大的CMDB
一个完善的基础资源数据库是我们构建运维自动化上层应用的基础,所以构建CMDB系统成了有想法在DevOps运维自动化领域有所发展的企业离不开的重要一环,但受制于每家企业不同的内外部环境.资源配置以及管理 ...
- MODBUS转PROFINET网关TS-180 网关连接西门子 PLC 和工业称重仪表
随着科技的高速发展,工业自动化行业对日益多样的称重需求越来越高,上海某公司在国内的一个 工业自动化项目中,监控中心系统需要远程实时采集工业称重仪表测量的各种称重参数.该系统使用的是 西门子 S7-30 ...
- day01预习-基本语法
typora-copy-images-to: media 基本语法 JavaScript的历史: 在95年以前,就有很多上网的用户了,当时的带宽只有28.8kb/s,用户要进行表单的验证时,点击提 ...
- 如何给el-table中某一列加指定内容和点击事件
背景: 小颖最近在写项目时遇到了要给 element-ui 中的 el-table 在 v-for el-table-column 标签时给某列加内容和点击事件,项目忙完了想着总结一下,下面一起 ...
- 深入了解HMAC加密技术:原理、应用与实践
一.引言 在网络安全领域,消息认证码(MAC)是一种重要的技术手段.Hash-based Message Authentication Code(HMAC)作为其中的一种,凭借其简单.高效.安全的特性 ...