前两天写了几个注解和处理器的 Dmoe,然后发现可以写一个小框架。感觉 Springmvc 比较合适,之前也看过部分源码,然后就动手搞了一个。
代码没有抽取,设计也是一塌糊涂(比较菜,不会设计),代码不优雅。
实现了几个核心功能:注解式声明控制类,简单的数据绑定,返回 jsosn,支持使用 model 传递数据,Resultf 风格的跳转和重定向(准备添加文件上传功能)。
如果有志之士可以 fork 一份 添加功能,修复 bug。这里谢过了!
1,首先初始化的时候扫描指定的包,然后扫描类上的注解,生成一个 map。把注解上的值为 key,Java 类的全定限名为 value。
2,扫描方法上面的映射,维护映射 map,把 mapping 注解的值为 key,执行的方法为 value。初始化完成!
3,然后根据核心 servlet 去分发请求,然后解析返回字符串,进行跳转或者是重定向。
具体的思路就是这样
如果有志之士可以 fork 一份 添加功能,修复 bug.
留个邮箱,用于交流 gexyuzz@gmail.com !不是广告!!!
首先在 action 类添加 @Action 注解,在方法添加 @Mapping 注解.
@Action("/index")
public class Controller {
@Mapping(value="/hello",RequestType=Type.get)
public String sayHello(Model model){
model.setParameter("root", "Hello");
return "welcome";
}
}
它会跳转到 /WEB-INF/jsp 下的 welcome.jsp(这里我写死的,前缀 /WEB-INF/jsp.后缀.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${root }
</body>
</html>
然后在项目的 web.xml 文件添加核心 servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>main</servlet-name>
<servlet-class>cn.xiuyu.servlet.MainServlet</servlet-class>
<!-- 设置最先启动保证初始化 -->
<load-on-startup>1</load-on-startup>
<init-param>
<!-- 自定扫描的包 -->
<param-name>package</param-name>
<param-value>cn.xiuyu</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>main</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
然后访问地址: http:localhost:8080/${项目名}/index/hello
更新一下,感谢评论同学提的意见,确实有几个错别字,demo
,json
,Result
。
添加了文件上传(目前仅支持单文件),上传过程可以通过接受json来获取上传状态。
github添加了 框架使用说明。
![]() |
1
misaka19000 2017-06-19 19:15:57 +08:00
赞一个👍
|
![]() |
2
0915240 2017-06-19 19:34:25 +08:00
赞一个。
以前准备撸一个 netty http router 的,不知道 url 地址匹配是怎么处理的,看了下 springmvc 中用的 antPattern,,还有有些 go web framwork 用的树结构,然后就弃了。 |
3
Sharuru 2017-06-19 19:34:43 +08:00 via Android
看到的只有满眼错别字...
|
![]() |
5
redtea 2017-06-19 21:20:16 +08:00
造轮子
|
![]() |
7
chenuu 2017-06-20 07:39:46 +08:00 via Android ![]() @0915240 你可以参考下 GitHub 上我项目,bay1ts/bay。netty 撸的。有你需要的。我参考了 spark 和 be E go,spring MVC。设计不是很好
|
8
leaybc 2017-06-20 09:36:42 +08:00 ![]() 所以... 你的 Dmoe ? jsosn ? Resultf ? 是啥玩意....
|
![]() |
9
wyntergreg 2017-06-20 11:47:04 +08:00
@leaybc 手动喷血
|
![]() |
10
gexyuzz OP @wyntergreg 小事小事。认真分析了一下原因,可能是输入法暂时性失忆。
|