如何開發一個java開源框架-----Jvn框架之實現自動生成在線文檔(第七講)

一 、css

前言:博主正在教你們如何開發一個javaEE框架,我把框架命名爲Jvn,博客裏有完整的開發視頻,每一篇博文都是一個知識點;html

關於框架的介紹和學習,能夠從我博客第一講開始看起,博客首頁:http://www.cnblogs.com/everxs/java

本次內容視頻以及源碼下載地址:http://pan.baidu.com/s/1o6MJnFcjquery

 

2、bootstrap

本次博客講的內容框架

場景:如今是APP時代,APP很熱門,並且跟後臺交互跑的都是HTTP協議,因此講到這裏,對於這裏面的交互。jsp

安卓工程師(客戶端),在調用後臺接口的時候,須要一個文檔,二後臺工程師(這裏用JAVA),要去維護這份文檔,或者學習

說手寫這份文檔,工做量跟維護量是很是大的。因此提出了一個想法,在線文檔可否自動生成了。測試

解決思路ui

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>
相關文章
相關標籤/搜索