# afweb **Repository Path**: long-zhangming/afweb ## Basic Information - **Project Name**: afweb - **Description**: 一个web应用通用框架。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-10-23 - **Last Updated**: 2022-02-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # afweb ### 介绍 一个web应用通用框架。 ### 软件架构 软件架构说明 ### 安装教程 #### 1. 导入源码及依赖jar包 导入本源码(或jar包)到一个普通Web项目中,并导入相关依赖jar包。 ![](https://images.gitee.com/uploads/images/2020/1023/185717_608648f5_8091514.png "屏幕截图.png") ①、af.web包是本项目的源码。 ②、WebRoot/WWB-INF/lib下面中,各jar包作用 commons-fileupload-1.3.1.jar、commons-io-2.4.jar(文件上传处理jar包)、 dom4j-1.6.1.jar(XML格式处理jar包)、json-org.jar(JSON格式处理jar包)、 Fremarker-2.3.28.jar(模板引擎支持,Framarker) #### 2. 在src目录下添加配置文件af-service.xml ![](https://images.gitee.com/uploads/images/2020/1023/190721_cc1fcb69_8091514.png "屏幕截图.png") af-service.xml的内容: ``` ``` #### 3.配置框架类的启动 在web.xml文件中添加配置项, 找到web.xml文件,在WebRoot/WEB-INF目录下面 ![](https://images.gitee.com/uploads/images/2020/1023/191507_4352ea80_8091514.png "屏幕截图.png") 添加上配置 ``` AfGenericService af.web.service.AfGenericService 1 AfGenericService *.api AfUploadService af.web.fileupload.AfUploadService 1 AfUploadService *.up ``` 准备工作完成。。。 ### 使用说明 #### 一. RESTful风格接口 要实现RESTful风格的接口,步骤如下 ##### 1、新建一个类HelloControllerApi,此类继承自AfRestfulApi,要实现接口的。 ![](https://images.gitee.com/uploads/images/2020/1023/193314_2cc94b59_8091514.png "屏幕截图.png") HelloControllerApi内部如下; ``` package my.controller; import org.json.JSONObject; import af.web.restful.AfRestfulApi; public class HelloControllerApi extends AfRestfulApi { // 业务处理逻辑 @Override public Object execute(JSONObject jreq) throws Exception { return null; } } ``` #### 2、在af-service.xml文件中添加接口跟类的对应关系 ``` ``` #### 3、使用 ##### 总览 ``` package my.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.json.JSONObject; import af.web.restful.AfRestfulApi; public class HelloControllerApi extends AfRestfulApi { /*** * 前端输入:http://127.0.0.1:8080/app/HelloController.api * 框架截获请求,并得到有效值:HelloController * 再根据af-service.xml中的配置,通过反射创建,就能把请求放到这个类里面来处理 * */ @Override public Object execute(JSONObject jreq) throws Exception { // 如果需要这两个参数可从其父类直接获取 HttpServletRequest request = httpReq; HttpServletResponse response = httpResp; // 可以返回null、int、long、boolean、String、double、POJO类或者JSONOBject/JSONArray return null; } } ``` ##### 请求 接收请求演示 ``` package my.controller; import org.json.JSONObject; import af.web.restful.AfRestfulApi; public class StudentAPI extends AfRestfulApi { @Override public Object execute(JSONObject jreq) throws Exception { /*** * 这里只演示了前端通过GET方式来传值,我们的取出方式。 * 但是,我们的框架已经把所有的值都处理好了放在了jreq中,无论是GET方式头部的值,还是POST方式正文的值, * 都可以通过jreq取得。 */ /*** * 前端请求URL:http://127.0.0.1:8080/app/HelloController.api?id=5&title=loveyou */ int id = jreq.getInt("id"); String title = jreq.getString("title"); // 把拿到的值处理,增删改查数据库等等 /////////////////// return null; } } ``` ##### 应答 应答演示 ``` package my.controller; import org.json.JSONObject; import af.web.restful.AfRestfulApi; public class HelloControllerApi extends AfRestfulApi { @Override public Object execute(JSONObject jreq) throws Exception { /*** * 框架会默认构造一个JSON格式的字符串返回给前端,默认带三个参数reason(错误原因)、error(错误码)、data(此方法的返回值转换成JSON格式) * { "reason":"OK", "error":0, "data":{ } } * * 框架会把此方法的返回值转成成JSON格式并放在data中,一同返回给前端 */ // 可以返回null、int、long、boolean、String、double、POJO类或者JSONOBject/JSONArray return null; } } ``` #### 二. 文件上传接口 1、新建一个类,继承自AfUploadHandler.java,并重写里面的方法。 2、在af-service.xml配置文件中添加文件上传映射配置 ``` ``` 3、具体使用 ``` package my.controller; import java.io.File; import org.json.JSONObject; import af.web.AfFormData; import af.web.fileupload.AfUploadHandler; import af.web.fileupload.AfUploadUtils; public class HelloUpdate extends AfUploadHandler { String tmpFileName; /** * 指定一个上传的临时目录,把前端上传的文件放在哪个目录下,指定一个目录 */ @Override public File getTmpDir() { // 在WetRoot目录下创建一个upload文件夹来存放临时文件 String path = httpReq.getServletContext().getRealPath("/upload"); return new File(path); } /** * 指定一个文件来存放前端上传的文件 * * tmpDir:指定的临时目录 * * realName:前端上传的文件的名字 */ @Override public File getTmpFile(File tmpDir, String realName) { // 取得文件后缀名,如xxx.txt,就得到.txt String suffix = AfUploadUtils.fileSuffix(realName); // 生成UUID String uuid = AfUploadUtils.createUUID(); this.tmpFileName = uuid + suffix; return new File(tmpDir, tmpFileName); } /*** * 在文件上传完成后,会调用这个方法做最后的处理。 * 通俗来说就是,文件已经上传完成并保存了,接下来怎么处理。 * 比如移动到其他位置,或者把信息保存到数据库等等 * * size:文件大小 * formData:表单文本的封装 * */ @Override public Object complete(long size, AfFormData formData) { // 文件访问路径 String storePath = "/upload/" + tmpFileName; String contextPath = httpReq.getServletContext().getContextPath(); String url = contextPath + storePath; // 把文件路径返回给前端 JSONObject result = new JSONObject(); result.put("storePath", storePath); result.put("url", url); return result; } } ``` #### 三. MVC接口 1、新建一个类,继承自AfSimpleMVC,并重写其方法 2、添加注解@WebServlet("xxx") ``` package my.controller; import java.util.Map; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import af.web.freemarker.AfSimpleMVC; @WebServlet("xxx") public class HelloMVC extends AfSimpleMVC { @Override protected String execute(HttpServletRequest req, HttpServletResponse resp, Map model) throws Exception { // 返回模板地址 // 对应hello.html return "hello"; } } ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) 7. 学java,来http://afanihao.cn/