github 地址:传送门
前两天写了几个注解和处理器的 Dmoe,然后发现可以写一个小框架。感觉 Springmvc 比较合适,之前也看过部分源码,然后就动手搞了一个。
代码没有抽取,设计也是一塌糊涂(比较菜,不会设计),代码不优雅。
实现了几个核心功能:注解式声明控制类,简单的数据绑定,返回 jsosn,支持使用 model 传递数据,Resultf 风格的跳转和重定向(准备添加文件上传功能)。
如果有志之士可以 fork 一份 添加功能,修复 bug。这里谢过了!
原理
1,首先初始化的时候扫描指定的包,然后扫描类上的注解,生成一个 map。把注解上的值为 key,Java 类的全定限名为 value。
2,扫描方法上面的映射,维护映射 map,把 mapping 注解的值为 key,执行的方法为 value。初始化完成!
3,然后根据核心 servlet 去分发请求,然后解析返回字符串,进行跳转或者是重定向。
具体的思路就是这样
如果有志之士可以 fork 一份 添加功能,修复 bug.
留个邮箱,用于交流 [email protected] !不是广告!!!
打包好了 download ,可以引入到项目使用啦~
用到的 jar 包:bcel-6.0.jar commons-beanutils.jar json-20170516.jar
日志组件: logback
那么怎么使用呢?
首先在 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