# DON **Repository Path**: windfly/DON ## Basic Information - **Project Name**: DON - **Description**: java 小型web项目快速开发框架,实现无配置,直接关注业务开发.主要解决请求分发解析 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2014-04-07 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #DON框架介绍 ##目标 >1. 启动零配置快速进入开发 1. 开发时,请求controller路由零配置 1. 配合windfly.jar工具包快速开发 1. 最终实现加入jar包即可快速开发 ##主要特点 >1. 无需配置请求url映射,自动根据url映射到对应的类和方法上 1. 根据请求类方法的返回值不同,自动输出不同类型值 1. 内置常用工具类集合,方便实现常用功能 ## 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. 同一个类中不能有同名的controller方法,即不支持重载 10. JDK1.8+ ## web项目的组织结构 ## >标准的web组织结构 ``` WebContent +---WEB-INF +---/classes/ +---/lib/ +---/jsp/ +---web.xml ``` # DON 使用说明 # [如何写controller](使用说明/如何写controller.md) ## 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); ``` - 方法二 > 直接在参数中取属性名,value类型为 `String`,框架会自动保存文件到resources/upload/ 文件夹下,传入文件相对路径。注意,这种方式只能使用String 接收,不能使用Map接收 ``` public String upload(String filePath){ savePath(filePath); return "string:success"; } ``` ## 服务层使用建议 ## >- DON 框架并没有过多的涉及到服务层 - 如果项目不大且已经确定了数据存储方式,一般都可以去除数据层,直接在服务层进行数据处理,这样可以更快的进行项目开发.配合windfly-util.jar包中的AR方式进行JPA快速开发 - 如果对后期数据存储不确定,可能会换数据处理的实现,则要进行数据层的分离,分离时还要考虑服务层的事务整体性. ## 数据层使用建议 ## >- DON 框架中对于数据性不过多涉及,建议使用windfy-util项目中的 `util使用JpaEntityBase类` 的工具类. - 对于数据操作建议使用JPA - JPA实现建议使用 `eclipselink`,一个jar包即可 - 将 `persistence.xml` 放置于 `/WEB-INF/classes/META-INF/persistence.xml` - 内容,可适当的修改,使用derby可谓是最方便的了,加入derby.jar包,复制以下内容,直接使用 ``` org.eclipse.persistence.jpa.PersistenceProvider false ``` - 操作实体类时,实体类继承JpaEntityBase类,可方便使用继承的方法 ``` class UserEntity extends JpaEntityBase UserEntity user = new UserEntity(); user.setName("jone"); user.save(); user.setName("jake"); user.update(); user.delete(); // 查询分页 user.setPageCondition("name like :name",MapUtil.toMap("name","%j%"),1,10); PageBarUtil users = user.searchPageBarUtil(); ``` ## 版本更新 ## todo > 启动加入版本号 ## trunk ## v1.3.1 > 参数注入时,Date类型的增加自动解析格式: yyyy-MM-dd HH:mm:ss,yyyy-MM-dd,yyyy-MM-dd HH:mm,yyyy-MM,yyyy,HH:mm:ss,HH:mm ## v1.3 > 分离util包,加入windfly-util.jar包 > beanutil中toFiledsString方法更改private > public > JsonResult code为0时,字段变动 msg > data > IE11的application/json问题处理 > 增加 WeiXinUtil 工具类 > fix bug: ie edge 上传文件,文件名全路径错误 > 上传文件增加url全路径前缀配置 > 修改,上传文件后缀名配置为空时,文件后缀名不限制 > 增加微信退款方法 > fix bug:修复post方法获取字符串中丢失换行符问题 ## v1.2 > 整合windfly-util代码 > 去除log4j代码 > controller参数中增加自有TypeMap参数 > 请求参数名相同,参数值转为List > 增加上传文件大小限制,在don.config文件中配置 > 增加application/json头信息请求处理 > 上传参数是文件时,参数值根据接收参数类型自动自动转换,Stirng类型转换成访问地址 > BeanUtil增加辅助方法 > fileutil增加上传文件默认处理方法 > JpaEntityBase fix bug:使用update静态方法时会处理所有数据 > JsonUtil fix bug:部分类属性无权访问 > NumberByteUtil 增加辅助方法 > 增加MessageException类 ## v1.1.0.5 > fix bug:增加请求头是application/json的内容处理 > controller请求参数增加TypeMap类型 > fix bug:上传文件多了两个字节 > fix bug:DBUtil部分方法连接未关闭 > 去除slf4j包依赖 > 将util类分为windfly-util项目包 > ## v1.0.2.1 > fix bug:上传文件流行中不是Content-Disposition时抛异常 > fix bug:上传文件名为空时异常 > > ## v1.0.0.0