如何开发一个java开源框架-----Jvn框架之实现自动生成在线文档(第七讲)

一 、

前言:博主正在教大家如何开发一个javaEE框架,我把框架命名为Jvn,博客里有完整的开发视频,每一篇博文都是一个知识点;

关于框架的介绍和学习,可以从我博客第一讲开始看起,博客首页:http://www.cnblogs.com/everxs/

本次内容视频以及源码下载地址:http://pan.baidu.com/s/1o6MJnFc

二、

本次博客讲的内容

场景:现在是APP时代,APP很热门,而且跟后台交互跑的都是HTTP协议,所以讲到这里,对于这里面的交互。

安卓工程师(客户端),在调用后台接口的时候,需要一个文档,二后台工程师(这里用JAVA),要去维护这份文档,或者

说手写这份文档,工作量跟维护量是非常大的。所以提出了一个想法,在线文档能否自动生成了。

解决思路:

1,在我们的Controller上面加一个注解@OnlineController同时指定被注解Controller的用途  memo="用户管理控制器",该COntroller的URL

2,在我们具体的Action,也就是我们Controller里面的方法里面加一个@OnlineMethod注解,同时指定 method="访问方式(GET或者POST)",memo="方法描述",

param="调用该接口需要的参数比如:name=XXX&age=XXX",该接口的URL

3,把这些信息保存进我们的List里面,启动框架的时候设进一个List.

4,使用者可以定义一个Controller获取该list在页面显示出来

本次视频跟源码的下载地址:http://pan.baidu.com/s/1o6MJnFc

建议看视频,因为我在视频里讲得很详细。

Ps:视频跟代码都会持续更新,希望大家喜欢,多多支持。

QQ:245223343  永远的八哥

下面是一些代码:

OnlineController:

/**|
 * 在线文档Controller注解
 * @author Administrator
 *
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface OnlineController {

	String memo();
}

OnlineMethod:

/**
 * 在线文档的方法注解
 * @author Administrator
 *
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface OnlineMethod {

	String memo();
	String param();
	String method();
}

Online实体类:

public class Online {

	private String url;
	private String memo;
	private String method;
	private String param;
	private int type;
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getMemo() {
		return memo;
	}
	public void setMemo(String memo) {
		this.memo = memo;
	}
	public String getMethod() {
		return method;
	}
	public void setMethod(String method) {
		this.method = method;
	}
	public String getParam() {
		return param;
	}
	public void setParam(String param) {
		this.param = param;
	}
	public int getType() {
		return type;
	}
	public void setType(int type) {
		this.type = type;
	}

}

OnlineDoc 操作类:

public class OnlineDoc {

	/**
	 * 加载有注解的Controller
	 */
	public static List<Online> loadClass(Map<String,Class> map){
		List<Online> onlineList = new ArrayList<Online>();
		System.out.println("map :"+map.size());
		for(String nameSpace :map.keySet()){

			Class clazz = map.get(nameSpace);
			OnlineController onlineController = (OnlineController) clazz.getAnnotation(OnlineController.class);
			if(onlineController!=null){
				System.out.println("进来");
				Online online = new Online();
				online.setType(1);
				online.setMemo(onlineController.memo());
				online.setUrl(nameSpace);
				onlineList.add(online);
				Method[] methods = clazz.getMethods();
				for(Method method :methods){
					OnlineMethod onlineMethod = method.getAnnotation(OnlineMethod.class);
					if(onlineMethod!=null){
						Online o = new Online();
						o.setMemo(onlineMethod.memo());
						o.setMethod(onlineMethod.method());
						o.setParam(onlineMethod.param());
						o.setType(2);
						o.setUrl(nameSpace+"/"+method.getName());
						onlineList.add(o);
					}
				}
			}

		}

		System.out.println("执行完 有多少个:"+onlineList.size());

		return onlineList;
	}
}

最后是配置在线文档:

public class OnlineDocController extends JvnController{

	public void index(){
		List<Online> onlineList = JvnConfig.CONSTANT.getOnlineList();
		System.out.println("size :" +onlineList.size());
		getRequest().setAttribute("onlineList", onlineList);
		render("/WEB-INF/views/online/index.jsp");
	}
}

测试Controller:

@OnlineController(memo = "订单管理控制器")
public class OrderController extends JvnController{
	@OnlineMethod(memo = "增加订单", method = "GET", param = "订单id   orderId")
	public void add(){

	}

	@OnlineMethod(memo = "删除订单", method = "GET", param = "订单id   orderId")
	public void delete(){

	}

}

在线文档的jsp:

<%@page import="com.jvn.doc.online.Online"%>
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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">
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css">

<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script>

<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="http://cdn.bootcss.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
</head>

<body>

<h1>在线生成文档</h1>
<div style="width: 70%;margin: 0,auto;">
<table class="table">
  <tr><th>访问的url</th><th>描述</th><th>参数/说明</th><th>访问方式</th></tr>

  <c:forEach var="online" items="${onlineList}">
   <tr>
  <td>http://www.baidu.com/jvn${online.url}</td>
  <td>${online.memo}</td>
  <td>${online.param}</td>
  <td>${online.method}</td>
  </c:forEach>
  </tr>
</table>
</div>
</body>

</html>

  

时间: 2024-10-21 02:02:21

如何开发一个java开源框架-----Jvn框架之实现自动生成在线文档(第七讲)的相关文章

如何开发一个java开源框架-----Jvn框架之实现文件的上传以及方法封装(第六讲)八哥实力讲解

前言 一 . 博主正在教大家如何开发一个javaEE框架(Jvn框架),博客里有完整的开发视频,每一篇博文都是一个知识点,帮助大家理解框架: 博客首页:http://www.cnblogs.com/everxs/ 本次内容视频以及源码下载地址:http://pan.baidu.com/s/1pJsoGDd 1,为什么要使用java的框架,以及框架能带来什么好处.  2,帮助你们理解框架的原理. 3,框架是如何实现的.                                        

如何开发一个java开源框架-----Jvn框架之实现用注解代替配置文件

本次博客讲的内容: 场景:在我们使用很多框架的时候,慢慢会发现写配置文件很烦,比如写一个小小的功能都要写几个配置文件. 对于这一类问题,所以很多框架都出现了注解这一功能,那到底如何用注解代替配置文件呢? 今天我们要做的是,扫描Class后找到我们所有Controller类,接下来我们就来讨论一下这个问题. 解决思路: 首先我们回想一下Spring的做法,Spring在使用注解的使用,必须在配置文件(这里指的是主配置文件)里面写上一句ScanClass的话, 这句话代表的是启动扫描,然后会让你告诉

Spring集成Swagger,Java自动生成Api文档

Swagger官网:http://swagger.io GitHub地址:https://github.com/swagger-api 官方注解文档:http://docs.swagger.io/swagger-core/apidocs/index.html Swagger-UI地址:https://github.com/swagger-api/swagger-ui swagger最终效果图 好,开始说Spring怎么配置Swagger了 1.pom.xml引入需要的jar包 <!-- 构建Re

4,如何开发一个java开源框架-----Jvn框架之实现浏览器传参后台转成Bean

前言:博主正在教大家框架原理跟如何实现一个J2ee框架,大家如果想看的可以从 第一篇博文看起 所有的视频都是连续的. 上节课说到了找出一个Bean的方法,这节课主要讲浏览器传递的参数在后台如何生成Bean 1,先把浏览器传过来的参数放进map里面 key-->value2,遍历map,找出key,从而拼凑出setXXX.3,找出需要转的Bean的所有set方法跟simpleName4,通过反射机制,invoke()设置值进去.5,生成一个想要的对象 视频以及对应的源码地址: http://pan

【通信】Netty JBOSS提供的一个java开源框架

Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序dsf. 也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发. “快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题.N

Python Django框架实现商城项目源码加设计文档和注释

Python Django框架实现商城项目源码加设计文档和注释 链接:https://pan.baidu.com/s/1yN2iBgx3zmpTkoY8u1LWRg 提取码:lfsx 非常完整的django项目源码,分享给撸友们,不管是学习还是深造,都是可以学习借鉴的!! 原文地址:https://www.cnblogs.com/zyxlovesjy/p/12115491.html

利用Java动态生成 PDF 文档

利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那么目前最佳的解决方案,你可能会想到 iText ,对没错... iText+(Velocity / Freemarker)可以实现.不过据我熟悉,iText本身提供的HTML解析器还是不够强大,许多HTML标签和属性无法识别,更悲催的是简单的CSS它不认识,排版调整样式会让你头大的.不要失望,接下来

Java中生成帮助文档

如何在Java中使用注释 在编写程序时,经常需要添加一些注释,用以描述某段代码的作用. 一般来说,对于一份规范的程序源代码而言,注释应该占到源代码的 1/3 以上.因此,注释是程序源代码的重要组成部分,一定要加以重视哦! Java 中注释有三种类型:单行注释.多行注释.文档注释 运行结果:?Hello Imooc! 看:被注释的代码块在程序运行时是不会被执行的~~ 我们可以通过?javadoc?命令从文档注释中提取内容,生成程序的 API 帮助文档. 打开首页,查看下生成的 API 文档 PS:

Java Web项目中使用Freemarker生成Word文档

Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像Freemarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他的方案要更为简单. 下面举一个简单的例子,比如在Web页面中填写个人简历,然后点击保存下载到本地,效果图如下所示. 打开下