RubyJSP 輕量級的Java 語言 MVC Web開發框架

Github地址:https://github.com/jiangliuer326442/rubyJSP

RubyJSP是什麼?

它是一個Java Web 基於MVC開發的一個輕量級框架,相對於SSH框架而言,更加簡單實用,初學者更容易上手。

開始旅程

WebContent\WEB-INF\config目錄是項目所有配置文件的存放目錄,其中路由配置文件爲url.txt,配置內容格式爲:default = Default:index,一行一個,default代表網站訪問的路徑爲default.jsp(或者網站根目錄/),對應的控制器爲 Default.java 文件的 index 函數。

src\webapp 是項目用戶源代碼存放的路徑,Default.java文件就在該目錄內。查看Default.java文件,代碼如下:

package webapp;
import java.io.IOException;
import org.json.JSONArray;
import com.ruby.framework.controller.ControllerBase;

public class Default extends ControllerBase {
	public void index() throws IOException{
		String result = _model.sqlite_model.executeQuery("select * from students");
		JSONArray array = new JSONArray(result);
		String student_name = "";
		if (array.length() >= 1) {
			student_name = array.getJSONObject(0).getString("name");
		}
		assign("student_name", student_name);
		display("index",1);
	}
}

所有用戶自定義的控制器類必須繼承ControllerBase基類,這樣,該控制器就能拿到ServletContext對象了(它是tomcat容器的上下文對象,你可能會用到它)。另外ControllerBase連接着模型和視圖,通過_model對象拿到數據庫模型實例。RubyJSP支持常用的數據庫模型,包括 Mysql、Sqlite、Redis、MongoDB、ElasticSearch。調用assign方法給即將加載的模型分配變量,調用display方法,加載對應的視圖。

在這裏 _model.sqlite_model 拿到了Sqlite模型的一個連接實例,你會問Sqlite數據庫的配置信息在哪裏呢?上面說過,WebContent\WEB-INF\config目錄是項目所有配置文件的存放目錄,所以這裏有一個sqlite.txt文件就是它的配置文件,內容如下:

enable = 1
file = test.db

所有數據庫配置文件都有一個enable = ?的配置項,代表是否啓用該數據庫,後面是數據庫的基本信息,file代表數據庫文件名稱爲 test.db,該文件在WebContent\WEB-INF\db目錄中。

sqlite_model 實例有兩個常用的方法 executeQuery 執行查詢語句,返回內容爲可轉化爲json數據的字符串,executeUpdate 執行除了查詢語句以外的任意sql語句。

項目的視圖文件存放目錄爲 WebContent\WEB-INF\view,默認情況下,視圖文件的擴展名爲html,可在tmpl.txt配置文件中修改。查看index.html文件,內容如下:

<h1>你好,<%= student_name %>!</h1>

student_name 需要和控制器中assign的變量名一致,<% 和 %>是模版分隔符,模版分隔符也可以在tmpl.txt中進行配置,傳給模版解析器表明裏面的內容是需要解析的,=代表是賦值語句。

模版解析器支持的模版操作除了= 代表賦值以外,還包括如下:

  • ** include**代表包含另外一個模板文件
  • ** if**代表邏輯判斷

原理剖析

框架的源代碼在src\com\ruby\framework包中,GlobalServlet.java是項目唯一的Servlet實例,Frame.java是項目唯一Sevlet監控實例。

Servlet實例生成時,Frame.java執行contextInitialized方法,主要工作爲創建模型和視圖的實例,同時,這也意味着,數據庫是在Servlet實例生成時保持長連接的,而並非每次請求時再去創建連接。Servlet實例銷燬時,調用contextDestroyed方法關閉數據庫連接。

GlobalServlet.java是項目唯一的Servlet實例,也是所有請求的統一入口,主要工作是根據url和路由配置文件,將請求攜帶數據轉發(通過java的反射機制)到相應控制器的class中。

是的,原理就是這麼簡單~

功能插件

除了上面介紹過,支持大量主流的數據庫之外,在目錄com\ruby\framework\function中,還支持如下網站開發常用的操作類庫:

  • email 郵件發送相關
  • file 文件管理相關
  • login 第三方登錄相關(QQ,微信,微博,釘釘)
  • message 短信發送相關(融聯雲通訊)
  • push 推送相關(及光推送)
  • upload 上傳相關(七牛雲存儲)
  • zip 文件壓縮解壓相關 其他等等
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章