首页
技术知识库
Task工作计划
网站简介
DON框架
后台管理
#DON框架介绍 ##目标 >1. 实现零配置 1. 尽量少的第三方包 1. 快速开发 ##特点 >1. 无需配置请求url映射,自动根据url映射到对应的类和方法上 1. 根据请求类方法的返回值不同,自动输出不同类型值 1. 只依赖很少的第三方包,当前只依赖 javassist.jar 包 ## 开发DON的源由 ## >以前当个人开发一些小型的网站或公司中小规模的web项目时,要求就是要快.短时间内做完项目.每次开发前,总要去寻找和比较一些web开发框架.最熟悉不过的就是struts2和springMVC了.springMVC是不错的,可还是感觉配置较为繁琐.对于小项目来说,它还是大了.所以就想要有一个通用的快速开发框架.要开发web时,只要把jar包一放,不用配置就能去直接写业务逻辑了,这也就是开发DON的源由. # DON 使用说明 # ## DON能解决的问题 ## >1. 无需任何配置,按照标准的web项目组织结构生成目录,加入jar包,可直接去写业务逻辑. 1. 无需配置url和控制器的映射,通过固定url格式自动映射到类的方法上 1. 控制器使用POJO类,无侵入性,可方便做单无测试 ## DON的限制 ## >1. 项目的结构必须是标准组织结构 2. 开发中IDE中的class生成目录必须指定为 `/WEB-INF/classes/` 3. 动态页面必须为JSP,并放置于目录 `/WEB-INF/jsp/ ` 6. url固定后缀名,即 `.dhtml` 7. 控制器类名要以固定后缀结尾 8. 页面必须以 UTF-8 编码 9. 同一个类中不能有同名方法,即不支持重载 ## web项目的组织结构 ## >标准的web组织结构 ``` WebContent +---WEB-INF +---/classes/ +---/lib/ +---/jsp/ +---web.xml ``` ## URL请求格式说明 ## ``` http://上下文路径/类名前缀/方法名.dhtml http://testWeb/Index/main.dhtml http://Index/main.dhtml ``` >- DON只对以 .dhtml 结尾的请求路径进行解析处理 - 上下文路径是看项目在容器中的部署情况,核心在于 `Index/main.dhtml ` - index 指定了将会去查找 `IndexController.java` 类 - main 指定了会去执行 IndexController.java 中的 main(Map map); 方法 - 对于 .dhtml 请求,如果格式不对会抛出异常 如: `http://testWeb/xxx/Index/main.dhtml` 会抛异常 ## 控制器类 ## >- 普通pojo类,其类名要以 `Controller` 结尾 - 类名不可重复,即在不同包中不能有相同名称的控制器. ## 控制器方法说明 ## >- 方法名不能有相同的多个,即不可重载 - 方法的参数不固定,请求的参数值会自动根据参数名注入到方法的参数中 - 除请求参数外,可注入类型为HttpServletRequest,HttpServletResponse,HttpSession,Map类型参数,request主要用于登录会话处理和下载流处理。map参数中包含了请求的所有参数 - 方法参数可注入pojo bean,根据bean的set/get方法注入参数 - 方法参数注入Map的类型,除了包含了请求参数外,向map中存值也就相当于调用request.setAttribute(k,v) - 方法的返回值不固定 - 方法不能为 `static` - 必须为 `public` - 示例: `public String main(long id,Map map)`; - 方法体中取参数时可直接对map进行操作 ``` long _id = (Long)map.get(id); ``` ## 控制器方法返回值 ## >- 根据返回值类型,对页面进行不同的渲染 - String字符串,如果有特殊前缀则进行特殊处理. `redirect:` 跳转请求 `string:` 直接输出字符串到页面中.否则渲染在/WEB-INF/jsp/目录中相应路径的jsp页面.示例: ``` return "redirect:/Index/main.dhtml"; // 跳转到http://Index/main.dhtml return "string:hello"; // 直接在页面中输出hello return "admin/hello"; // 渲染 /WEB-INF/jsp/admin/hello.jsp ``` - 非字符串对象类型,返回json数据,自动转换 ``` // 有User类,并有name和age属性 return new User("张三",12); // 返回 {"name":"张三","age":12} ``` ## 上传文件功能 ## >- 页面中form类型设置 `enctype="multipart/form-data"` - 属性的value不能为中文,后台将以`iso8859-1`格式接收文件 - 单个上传文件内容不能大于10M - 直接在参数中取属性名,value类型为 `File` ``` File logoFile = (File)map.get("logoP"); String remark = (String)map.get("fileRemarkP"); saveFile(logoFile,remark); ``` ## 服务层使用建议 ## >- DON 框架并没有过多的涉及到服务层 - 如果项目不大且已经确定了数据存储方式,一般都可以去除数据层,直接在服务层进行数据处理,这样可以更快的进行项目开发. - 如果对后期数据存储不确定,可能会换数据处理的实现,则要进行数据层的分离,分离时还要考虑服务层的事务整体性. ## 数据层使用建议 ## >- DON 框架中对于数据性不过多涉及,建议使用windfy-util项目中的 `JpaUtil` 的工具类. - 对于数据操作建议使用JPA,JPA是J2EE的数据处理标准,且操作起来也很方便 - JPA实现建议使用 `eclipselink`,一个jar包即可 - 将 `persistence.xml` 放置于 `/WEB-INF/classes/META-INF/persistence.xml` - 内容,可适当的修改,使用derby可谓是最方便的了,加入derby.jar包,复制以下内容,直接使用 ```
org.eclipse.persistence.jpa.PersistenceProvider
false
``` - 操作`JpaUtil`时,建议使用 `doWithTransation` 方法 ``` public TestBean findTestBean(final String name) { return JpaUtil.doWithTransation(new JpaUtilBiz() { @Override public TestBean process(EntityManager em) { String jql = "select o from TestBean o where o.name = :name"; TestBean bean = em.createQuery(jql) .setParameter("name","test") .getSingleResult(); return bean; } }); } ``` #项目地址 [DON源码地址(开源中国)](http://git.oschina.net/windfly/DON)
返回