為什么使用JFinal
前段時間聽說了JFinal框架粗恢,據(jù)說適合快速開發(fā)薇正,恰好接到了外包項目片酝,決定用JFinal試一下怎么樣,于是就有了這篇挖腰。雕沿。。
官方網(wǎng)站
看一下官網(wǎng)上的宣傳
JFinal 是基于 Java 語言的極速 WEB + ORM 框架猴仑,其核心設計目標是開發(fā)迅速审轮、代碼量少、學習簡單辽俗、功能強大疾渣、輕量級、易擴展崖飘、Restful榴捡。在擁有Java語言所有優(yōu)勢的同時再擁有ruby、python朱浴、php等動態(tài)語言的開發(fā)效率吊圾!為您節(jié)約更多時間达椰,去陪戀人、家人和朋友 :)
JFinal有如下主要特點:
- MVC架構(gòu)街夭,設計精巧砰碴,使用簡單
- 遵循COC原則躏筏,零配置板丽,無xml
- 獨創(chuàng)Db + Record模式,靈活便利
- ActiveRecord支持趁尼,使數(shù)據(jù)庫開發(fā)極致快速
- 自動加載修改后的java文件埃碱,開發(fā)過程中無需重啟web server
- AOP支持,攔截器配置靈活酥泞,功能強大
- Plugin體系結(jié)構(gòu)砚殿,擴展性強
- 多視圖支持,支持FreeMarker芝囤、JSP似炎、Velocity
- 強大的Validator后端校驗功能
- 功能齊全,擁有struts2的絕大部分功能
- 體積小僅632K悯姊,且無第三方依賴
看起來很厲害的樣子
引入maven依賴
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-server -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.4.9.v20180320</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>8.1.8</version>
<!-- 此處的 scope 值為 compile 僅為支持 IDEA 下啟動項目 打 war 包時需要改成 provided羡藐,以免將一些無用的
jar 打進去 -->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>cos</artifactId>
<version>2017.5</version>
</dependency>
在web.xml中配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://java.sun.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>com.o2o.common.O2OConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
可以看到,配置了filter為com.jfinal.core.JFinalFilter,配置入口類文件com.o2o.common.O2OConfig
創(chuàng)建入口類悯许,繼承JFinalConfig
public class O2OConfig extends JFinalConfig {
/**
* 配置常量
*/
public void configConstant(Constants me) {
// 加載少量必要配置仆嗦,隨后可用PropKit.get(...)獲取值
PropKit.use("application.properties");
me.setDevMode(PropKit.getBoolean("devMode", false));//開發(fā)模式設置
}
/**
* 配置路由
*/
public void configRoute(Routes me) {
me.add("/", IndexController.class, "/WEB-INF/view/index");//第一個參數(shù)是訪問的路徑,第二個參數(shù)配置Controller先壕,第三個參數(shù)是視圖的路徑
me.add("/navigation", NavigationController.class,"/WEB-INF/view/navigation");
me.add("/manager", ManagerController.class,"/WEB-INF/view/manager");
me.add("/role", RoleController.class,"/WEB-INF/view/role");/
}
public void configEngine(Engine me) {
me.addSharedFunction("/WEB-INF/view/common/_layout.html");
me.addSharedFunction("/WEB-INF/view/common/_paginate.html");
}
/**
* 配置插件
*/
public void configPlugin(Plugins me) {
// 配置 druid 數(shù)據(jù)庫連接池插件
DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password"));
me.add(druidPlugin);
// ehcache插件
EhCachePlugin ehCachePlugin = new EhCachePlugin();
me.add(ehCachePlugin);
// 配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
arp.setShowSql(false);
arp.setDevMode(true);
// 所有映射在 MappingKit 中自動化搞定
_MappingKit.mapping(arp);
me.add(arp);
}
public static DruidPlugin createDruidPlugin() {
return new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
}
/**
* 配置全局攔截器
*/
public void configInterceptor(Interceptors me) {
me.add(new LoginInterceptor());
}
}
其他的配置文件
- application.properties
jdbcUrl = 自己寫
user = 自己寫
password = 自己寫
devMode = false
- log4j.properties(省略)
- ehcache.xml(省略)