前两天听说了JFinal,简介甚是牛擦,号称java框架终结者,也是醉了,言归正传,我们就不研究他的宣传语了。不过他这个框架确实有他所说的一些特性,一起看看。
http://www.jfinal.com/
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。 在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)
注:以上全部摘自官网,勿喷,该了解的还是要了解。
junit
junit
3.8.1
test
com.jfinal
jetty-server
8.1.8
provided
jetty-server
org.eclipse.jetty
com.jfinal
jfinal
1.9
c3p0
c3p0
0.9.1.2
org.freemarker
freemarker
2.3.20
log4j
log4j
1.2.16
mysql
mysql-connector-java
5.1.20
com.jfinal
cos
26Dec2008
3. web.xml添加如下代码
jfinal
com.jfinal.core.JFinalFilter
configClass
com.demo.jfinal.config.DemoConfig
jfinal
/*
package com.demo.jfinal.config;
import java.util.Properties;
import com.demo.jfinal.controller.BlogController;
import com.demo.jfinal.controller.HelloController;
import com.demo.jfinal.model.Blog;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.ext.handler.ContextPathHandler;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.render.FreeMarkerRender;
import com.jfinal.render.ViewType;
/**
* @author jack.song
* @time 2014年12月26日
*/
public class DemoConfig extends JFinalConfig{
@Override
public void configConstant(Constants arg0) {
arg0.setDevMode(true);//开发模式设置
arg0.setBaseViewPath("template");//页面模板根路径
arg0.setFreeMarkerViewExtension(".ftl");//freemarker 模板后缀名
}
@Override
public void configHandler(Handlers arg0) {
arg0.add(new ContextPathHandler("base"));//添加项目contextPath,以便在页面直接获取该值 ${base?if_exists}
}
@Override
public void configInterceptor(Interceptors arg0) {
// TODO Auto-generated method stub
}
@Override
public void configPlugin(Plugins me) {
loadPropertyFile("common_config.txt");//添加相关插件,读取配置文件
C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"),
getProperty("user"), getProperty("password"));
me.add(c3p0Plugin);
ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
me.add(arp);
arp.addMapping("blog", Blog.class);//添加相关model配置
}
@Override
public void configRoute(Routes arg0) {
arg0.add("/", HelloController.class);//添加项目路由,类似于struts的action 配置文件,此处配置controller名,action名称对应方法名
arg0.add("/blog", BlogController.class);
}
public void afterJFinalStart() {
Properties p = loadPropertyFile("freemarker.properties");//由于我们用到freemarker,所以在此进行freemarker配置文件的装载
FreeMarkerRender.setProperties(p);
}
/**
* 建议使用 JFinal 手册推荐的方式启动项目
* 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
*/
public static void main(String[] args) {
JFinal.start("src/main/webapp", 80, "/", 5);//启动配置项
}
}
5. 上一步中为JFinal的主要入口类,我们必须创建它,并进行相应的配置改动,其中的common_config.txt,freemarker.properties附下
##common_config.txt
jdbcUrl = jdbc:mysql://127.0.0.1/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
user = root
password = password
#freemarker.properties
default_encoding=utf-8
#for production environment
template_exception_handler=ignore
#for testing
#template_exception_handler=DEBUG
template_update_delay=5
auto_import=/macros/demo.ftl as demo
locale=no_NO
datetime_format=yyyy-MM-dd HH:mm:ss
date_format=yyyy-MM-dd
number_format=#.##
package com.demo.jfinal.controller;
import com.jfinal.core.Controller;
/**
* @author jack.song
* @time 2014年12月26日
*/
public class HelloController extends Controller {
public void index(){
render("/index.ftl");
}
}
7. 创建index.ftl
<@demo.layout>
JFinal Demo 项目首页
@demo.layout>
8. 上一步中的layout是freemarker的宏定义,代码如下
<#assign staticCssPath="${base}/static/css/"/>
<#assign staticImgPath="${base}/static/img/"/>
<#macro layout>
<#nested>
#macro>
<#macro paginate currentPage totalPage actionUrl urlParas="">
<#if (totalPage <= 0) || (currentPage > totalPage)><#return>#if>
<#local startPage = currentPage - 4>
<#if (startPage < 1)><#local startPage = 1>#if>
<#local endPage = currentPage + 4>
<#if (endPage > totalPage)><#local endPage = totalPage>#if>
<#if (currentPage <= 8)>
<#local startPage = 1>
#if>
<#if ((totalPage - currentPage) < 8)>
<#local endPage = totalPage>
#if>
<#if (currentPage == 1)>
上页
<#else>
上页
#if>
<#if (currentPage > 8)>
#{1}
#{2}
…
#if>
<#list startPage..endPage as i>
<#if currentPage == i>
#{i}
<#else>
#{i}
#if>
#list>
<#if ((totalPage - currentPage) >= 8)>
…
#{totalPage - 1}
#{totalPage}
#if>
<#if (currentPage == totalPage)>
下页
<#else>
下页
#if>
#macro>
9. 启动
eclipse用run as 配置Main class为com.jfinal.core.JFinal
上述就是一些简单的部署启动步骤,由于是入门级,所以比较简单,一些代码也为直接放出,但是在此给出整个demo的代码,大家可以下载直接浏览
demo实例下载地址:TestJFinal.rar
总结:初步感觉JFinal确实比较快速,易学,以及一站化(前端+ORM),但是有比较大的侵入性,比如必须继承之类的
转载请注明出处http://blog.csdn.net/abudexiatian/article/details/42234617