前两天听说了JFinal,简介甚是牛擦,号称java框架终结者,也是醉了,言归正传,我们就不研究他的宣传语了。不过他这个框架确实有他所说的一些特性,一起看看。
http://www.jfinal.com/
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。 在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)
注:以上全部摘自官网,勿喷,该了解的还是要了解。
01.
02.
03.
junit
04.
junit
05.
3.8
.
1
06.
test
07.
08.
09.
com.jfinal
10.
jetty-server
11.
8.1
.
8
12.
provided
13.
14.
15.
jetty-server
16.
org.eclipse.jetty
17.
18.
19.
20.
21.
com.jfinal
22.
jfinal
23.
1.9
24.
25.
26.
c3p0
27.
c3p0
28.
0.9
.
1.2
29.
30.
31.
org.freemarker
32.
freemarker
33.
2.3
.
20
34.
35.
36.
log4j
37.
log4j
38.
1.2
.
16
39.
40.
41.
mysql
42.
mysql-connector-java
43.
5.1
.
20
44.
45.
46.
com.jfinal
47.
cos
48.
26Dec2008
49.
50.
3. web.xml添加如下代码
01.
02.
jfinal
03.
class
>com.jfinal.core.JFinalFilter
class
>
04.
05.
configClass
06.
com.demo.jfinal.config.DemoConfig
07.
08.
09.
10.
jfinal
11.
/*
12.
4. 创建一个JFinal入口配置文件DemoConfig,需要继承JFinal的JFinalConfig类
01.
package
com.demo.jfinal.config;
02.
03.
import
java.util.Properties;
04.
05.
import
com.demo.jfinal.controller.BlogController;
06.
import
com.demo.jfinal.controller.HelloController;
07.
import
com.demo.jfinal.model.Blog;
08.
import
com.jfinal.config.Constants;
09.
import
com.jfinal.config.Handlers;
10.
import
com.jfinal.config.Interceptors;
11.
import
com.jfinal.config.JFinalConfig;
12.
import
com.jfinal.config.Plugins;
13.
import
com.jfinal.config.Routes;
14.
import
com.jfinal.core.JFinal;
15.
import
com.jfinal.ext.handler.ContextPathHandler;
16.
import
com.jfinal.plugin.activerecord.ActiveRecordPlugin;
17.
import
com.jfinal.plugin.c3p0.C3p0Plugin;
18.
import
com.jfinal.render.FreeMarkerRender;
19.
import
com.jfinal.render.ViewType;
20.
21.
/**
22.
* @author jack.song
23.
* @time 2014年12月26日
24.
*/
25.
public
class
DemoConfig
extends
JFinalConfig{
26.
27.
@Override
28.
public
void
configConstant(Constants arg0) {
29.
arg0.setDevMode(
true
);
//开发模式设置
30.
arg0.setBaseViewPath(
"template"
);
//页面模板根路径
31.
arg0.setFreeMarkerViewExtension(
".ftl"
);
//freemarker 模板后缀名
32.
}
33.
34.
@Override
35.
public
void
configHandler(Handlers arg0) {
36.
arg0.add(
new
ContextPathHandler(
"base"
));
//添加项目contextPath,以便在页面直接获取该值 ${base?if_exists}
37.
}
38.
39.
@Override
40.
public
void
configInterceptor(Interceptors arg0) {
41.
// TODO Auto-generated method stub
42.
43.
}
44.
45.
@Override
46.
public
void
configPlugin(Plugins me) {
47.
loadPropertyFile(
"common_config.txt"
);
//添加相关插件,读取配置文件
48.
C3p0Plugin c3p0Plugin =
new
C3p0Plugin(getProperty(
"jdbcUrl"
),
49.
getProperty(
"user"
), getProperty(
"passhttp:
//www.it165.net/edu/ebg/" target="_blank" class="keylink">word"));
50.
me.add(c3p0Plugin);
51.
ActiveRecordPlugin arp =
new
ActiveRecordPlugin(c3p0Plugin);
52.
me.add(arp);
53.
arp.addMapping(
"blog"
, Blog.
class
);
//添加相关model配置
54.
}
55.
56.
@Override
57.
public
void
configRoute(Routes arg0) {
58.
arg0.add(
"/"
, HelloController.
class
);
//添加项目路由,类似于struts的action 配置文件,此处配置controller名,action名称对应方法名
59.
arg0.add(
"/blog"
, BlogController.
class
);
60.
}
61.
62.
public
void
afterJFinalStart() {
63.
Properties p = loadPropertyFile(
"freemarker.properties"
);
//由于我们用到freemarker,所以在此进行freemarker配置文件的装载
64.
FreeMarkerRender.setProperties(p);
65.
}
66.
/**
67.
* 建议使用 JFinal 手册推荐的方式启动项目
68.
* 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
69.
*/
70.
public
static
void
main(String[] args) {
71.
JFinal.start(
"src/main/webapp"
,
80
,
"/"
,
5
);
//启动配置项
72.
}
73.
}
5. 上一步中为JFinal的主要入口类,我们必须创建它,并进行相应的配置改动,其中的common_config.txt,freemarker.properties附下
1.
##common_config.txt
2.
jdbcUrl = jdbc:mysql:
//127.0.0.1/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
3.
user = root
4.
pass"http://www.it165.net/edu/ebg/"
target=
"_blank"
class
=
"keylink"
>word
= password
01.
#freemarker.properties
02.
default_encoding=utf-
8
03.
#
for
production environment
04.
template_exception_handler=ignore
05.
06.
#
for
testing
07.
#template_exception_handler=DEBUG
08.
09.
template_update_delay=
5
10.
auto_import=/macros/demo.ftl as demo
11.
12.
13.
locale=no_NO
14.
datetime_format=yyyy-MM-dd HH:mm:ss
15.
date_format=yyyy-MM-dd
16.
number_format=#.##
6. 创建第一个controller,需要继承JFinal的controller 类
01.
package
com.demo.jfinal.controller;
02.
03.
import
com.jfinal.core.Controller;
04.
05.
/**
06.
* @author jack.song
07.
* @time 2014年12月26日
08.
*/
09.
public
class
HelloController
extends
Controller {
10.
11.
public
void
index(){
12.
render(
"/index.ftl"
);
13.
}
14.
}
7. 创建index.ftl
01.
<
@demo
.layout>
02.
JFinal Demo 项目首页
03.
class
=
"table_box"
>
04.
欢迎来到 JFinal极速开发世界!
05.
06.
07.
08.
本Demo采用FreeMarker 作为视图文件,您还可以使用Jsp、Velocity或自定义类型视图。
09.
点击"${base?if_exists}/blog"
>此处
开始试用Demo。
10.
11.
12.
13.
14.
@demo
.layout>
01.
<#assign staticCssPath=
"${base}/static/css/"
/>
02.
<#assign staticImgPath=
"${base}/static/img/"
/>
03.
<#macro layout>
04.
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
05.
"zh-CN"
xmlns=
"http://www.w3.org/1999/xhtml"
lang=
"zh-CN"
>
06.
07.
"content-type"
content=
"text/html; charset=UTF-8"
/>
08.
"${staticCssPath}manage.css"
media=
"screen"
rel=
"stylesheet"
type=
"text/css"
/>
09.
10.
11.
class
=
"manage_container"
>
12.
class
=
"manage_head"
>
13.
14.
"nav"
>
15.
18.
19.
20.
21.
class
=
"main"
>
22.
<#nested>
23.
24.
25.
26.
27.
#macro>
28.
29.
<#macro paginate currentPage totalPage actionUrl urlParas=
""
>
30.
<#
if
(totalPage <=
0
) || (currentPage > totalPage)><#
return
>#
if
>
31.
<#local startPage = currentPage -
4
>
32.
<#
if
(startPage <
1
)><#local startPage =
1
>#
if
>
33.
34.
<#local endPage = currentPage +
4
>
35.
<#
if
(endPage > totalPage)><#local endPage = totalPage>#
if
>
36.
37.
class
=
"pagination"
>
38.
<#
if
(currentPage <=
8
)>
39.
<#local startPage =
1
>
40.
#
if
>
41.
<#
if
((totalPage - currentPage) <
8
)>
42.
<#local endPage = totalPage>
43.
#
if
>
44.
45.
<#
if
(currentPage ==
1
)>
46.
上页
47.
<#
else
>
49.
#
if
>
50.
51.
<#
if
(currentPage >
8
)>
54.
…
55.
#
if
>
56.
57.
<#list startPage..endPage as i>
58.
<#
if
currentPage == i>
59.
#{i}
60.
<#
else
>
62.
#
if
>
63.
#list>
64.
65.
<#
if
((totalPage - currentPage) >=
8
)>
66.
…
69.
#
if
>
70.
71.
<#
if
(currentPage == totalPage)>
72.
下页
73.
<#
else
>
75.
#
if
>
76.
77.
#macro>
9. 启动
eclipse用run as 配置Main class为com.jfinal.core.JFinal
或者直接jetty配置启动如下图
上述就是一些简单的部署启动步骤,由于是入门级,所以比较简单,一些代码也为直接放出,但是在此给出整个demo的代码,大家可以下载直接浏览
demo实例下载地址:TestJFinal.rar
总结:初步感觉JFinal确实比较快速,易学,以及一站化(前端+ORM),但是有比较大的侵入性,比如必须继承之类的
出处http://blog.csdn.net/abudexiatian/article/details/42234617