您的位置:首页 > 编程语言 > Java开发

JFinal+maven+freemarker入门教程

2015-11-05 09:03 721 查看
次元立方下载编程数据库安全设计网页系统服务器组网嵌入式基础QQ






RSS


编程大巴

开发文档

文档推荐

资源下载

在线手册

Java前台后台数据传递、中文乱码




1 向前台传递数据;2 向后台传递数据;3 ajaxpost提...
详细
eclipse的jigloo插件可视化开发javaswing/SW
将java中Double类型的科学计数法转换为指定格
quartz动态更改执行时间
鉴于CXF框架的webservice学习 传递xml,json

今日排行

周排行

月排行

Spring MVC前台属性数据的传递和后台属...
Redis缓存系统(一)Java-Jedis操作Red...
eclipse的jigloo插件可视化开发javaswi...
Java前台后台数据传递、中文乱码解决方法
Swing中常用的JFrame和JDialog窗体用法...
javaspringmvc+mysql整合写的一个简单的...
Json字符串转换为java对象的各种实现方法
Java开源报表JasperReport、iReport4.5...
Java中JFrame的getContentPane()和setC...
springmvc+spring+mybatis+maven项目构建

最新文章

hadoop(十)hive安装与自定义函数
windows操作系统对于程序运行时堆栈的管...
python如何使用virtualenvwrapper切换不...
定时器与系统时间
浅析Redis实现lock互斥访问资源
cocos2dx获取网络时间(一)
WPF快速入门系列(6)WPF资源和样式
使用myeclipse建带注解的model实体类
C语言那点事如何从零学好C语言?
MATLAB图像处理 统计最大/最小/平均灰度

编程下载

Android UI效果实现 滑动模糊渐变效果实现
Android学习自定义Dialog
Xamarin.Android通知详解
Android动态改变布局
android实现emoji输入
Android Spinner AutoCompleteTextView
Android中Eclipse开发工具的安装和Andr...
c构造函数
Android开发学习 sharedpreference的使用
Android新浪微博客户端(七)ListView中...

热门专题





李华明iOS-Cocos2d游戏开发

本教程为 李华明 编著的iOS-Cocos2d游戏开发系列教程:教程涵盖关于i......
详细




Directx11 游戏编程入门教程

专题主要学习DirectX的初级编程入门学习,对Directx11的入门及初学者有......
详细




Javascript 面向对象编程

"面向对象的JavaScript"这一说法多少有些冗余,因为JavaScript 语言本......
详细

首页 >
编程大巴 >
编程语言 > Java > 正文

编程大巴
http://www.it165.net/pro

JFinal+maven+freemarker入门教程

作者:  发布日期:2014-12-29 21:33:32
我来说两句(0)



0

Tag标签:入门教程  

 

写在前面的话

前两天听说了JFinal,简介甚是牛擦,号称java框架终结者,也是醉了,言归正传,我们就不研究他的宣传语了。不过他这个框架确实有他所说的一些特性,一起看看。

 

官网

 
http://www.jfinal.com/
 

JFinal 极速开发

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。 在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)

 

JFinal有如下主要特点:

MVC架构,设计精巧,使用简单
遵循COC原则,零配置,无xml
独创Db + Record模式,灵活便利
ActiveRecord支持,使数据库开发极致快速
自动加载修改后的java文件,开发过程中无需重启web server
AOP支持,拦截器配置灵活,功能强大
Plugin体系结构,扩展性强
多视图支持,支持FreeMarker、JSP、Velocity
强大的Validator后端校验功能
功能齐全,拥有struts2的绝大部分功能
体积小仅248K,且无第三方依赖
 

:以上全部摘自官网,勿喷,该了解的还是要了解。

 

 

JFinal+maven部署

首先创建一个maven本地web工程,至于怎么创建在此就不再赘述,利用eclipse或者直接mvn命令创建pom.xml添加相关依赖

view sourceprint?

01.
<dependencies>

02.
<dependency>

03.
<groupId>junit</groupId>

04.
<artifactId>junit</artifactId>

05.
<version>
3.8
.
1
</version>

06.
<scope>test</scope>

07.
</dependency>

08.
<dependency>

09.
<groupId>com.jfinal</groupId>

10.
<artifactId>jetty-server</artifactId>

11.
<version>
8.1
.
8
</version>

12.
<scope>provided</scope>

13.
<exclusions>

14.
<exclusion>

15.
<artifactId>jetty-server</artifactId>

16.
<groupId>org.eclipse.jetty</groupId>

17.
</exclusion>

18.
</exclusions>

19.
</dependency>

20.
<dependency>

21.
<groupId>com.jfinal</groupId>

22.
<artifactId>jfinal</artifactId>

23.
<version>
1.9
</version>

24.
</dependency>

25.
<dependency>

26.
<groupId>c3p0</groupId>

27.
<artifactId>c3p0</artifactId>

28.
<version>
0.9
.
1.2
</version>

29.
</dependency>

30.
<dependency>

31.
<groupId>org.freemarker</groupId>

32.
<artifactId>freemarker</artifactId>

33.
<version>
2.3
.
20
</version>

34.
</dependency>

35.
<dependency>

36.
<groupId>log4j</groupId>

37.
<artifactId>log4j</artifactId>

38.
<version>
1.2
.
16
</version>

39.
</dependency>

40.
<dependency>

41.
<groupId>mysql</groupId>

42.
<artifactId>mysql-connector-java</artifactId>

43.
<version>
5.1
.
20
</version>

44.
</dependency>

45.
<dependency>

46.
<groupId>com.jfinal</groupId>

47.
<artifactId>cos</artifactId>

48.
<version>26Dec2008</version>

49.
</dependency>

50.
</dependencies>


 

3. web.xml添加如下代码

 

view sourceprint?

01.
<filter>

02.
<filter-name>jfinal</filter-name>

03.
<filter-
class
>com.jfinal.core.JFinalFilter</filter-
class
>

04.
<init-param>

05.
<param-name>configClass</param-name>

06.
<param-value>com.demo.jfinal.config.DemoConfig</param-value>

07.
</init-param>

08.
</filter>

09.
<filter-mapping>

10.
<filter-name>jfinal</filter-name>

11.
<url-pattern>/*</url-pattern>

12.
</filter-mapping>


 

4. 创建一个JFinal入口配置文件DemoConfig,需要继承JFinal的JFinalConfig类
 

 

view sourceprint?

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(
"pass<a
href="
http:
//www.it165.net/edu/ebg/" target="_blank" class="keylink">word</a>"));

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附下

 

view sourceprint?

1.
##common_config.txt

2.
jdbcUrl = jdbc:mysql:
//127.0.0.1/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull

3.
user = root

4.
pass<a href=
"http://www.it165.net/edu/ebg/"

target=
"_blank"
class
=
"keylink"
>word</a> = password


 

 

view sourceprint?

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 类
 

view sourceprint?

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

 

view sourceprint?

01.
<
@demo
.layout>

02.
<h3>JFinal Demo 项目首页</h3>

03.
<div
class
=
"table_box"
>

04.
<p>欢迎来到 JFinal极速开发世界!</p>

05.
 
06.
<br><br><br>

07.
 
08.
本Demo采用FreeMarker 作为视图文件,您还可以使用Jsp、Velocity或自定义类型视图。

09.
点击<a href=
"${base?if_exists}/blog"
><b>此处</b></a>开始试用Demo。

10.
 
11.
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>

12.
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>

13.
</div>

14.
</
@demo
.layout>


8. 上一步中的layout是freemarker的宏定义,代码如下
 

 

view sourceprint?

01.
<#assign staticCssPath=
"${base}/static/css/"
/>

02.
<#assign staticImgPath=
"${base}/static/img/"
/>

03.
<#macro layout>

04.
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>

05.
<html xml:lang=
"zh-CN"

xmlns=
"http://www.w3.org/1999/xhtml"

lang=
"zh-CN"
>

06.
<head>

07.
<meta http-equiv=
"content-type"

content=
"text/html; charset=UTF-8"

/>

08.
<link href=
"${staticCssPath}manage.css"

media=
"screen"
rel=
"stylesheet"
type=
"text/css"

/>

09.
</head>

10.
<body>

11.
<div
class
=
"manage_container"
>

12.
<div
class
=
"manage_head"
>

13.
<div
class
=
"manage_logo"
><a href=
"http://www.jfinal.com"
>JFinal
web framework</a></div>

14.
<div id=
"nav"
>

15.
<ul>

16.
<li><a href=
"${base?if_exists}/"
><b>首页</b></a></li>

17.
<li><a href=
"${base?if_exists}/blog"
><b>Blog管理</b></a></li>

18.
</ul>

19.
</div>

20.
</div>

21.
<div
class
=
"main"
>

22.
<#nested>

23.
</div>

24.
</div>

25.
</body>

26.
</html>

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.
<div
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
>

48.
<a href=
"${actionUrl}#{currentPage - 1}${urlParas!}"

class
=
"prev_page"
>上页</a>

49.
</#
if
>

50.
 
51.
<#
if

(currentPage >
8
)>

52.
<a href=
"${actionUrl}#{1}${urlParas!}"
>#{
1
}</a>

53.
<a href=
"${actionUrl}#{2}${urlParas!}"
>#{
2
}</a>

54.

55.
</#
if
>

56.
 
57.
<#list startPage..endPage as i>

58.
<#
if

currentPage == i>

59.
#{i}

60.
<#
else
>

61.
<a href=
"${actionUrl}#{i}${urlParas!}"
>#{i}</a>

62.
</#
if
>

63.
</#list>

64.
 
65.
<#
if

((totalPage - currentPage) >=
8
)>

66.

67.
<a href=
"${actionUrl}#{totalPage - 1}${urlParas!}"
>#{totalPage
-
1
}</a>

68.
<a href=
"${actionUrl}#{totalPage}${urlParas!}"
>#{totalPage}</a>

69.
</#
if
>

70.
 
71.
<#
if

(currentPage ==totalPage)>

72.
下页

73.
<#
else
>

74.
<a href=
"${actionUrl}#{currentPage + 1}${urlParas!}"

class
=
"next_page"

rel=
"next"
>下页</a>

75.
</#
if
>

76.
</div>

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

延伸阅读:

1、SpringMVC入门教程及其原理讲解和实例代码下载
2、RMI入门教程
3、SpringMVC注解配置结合Hibernate的入门教程及其代码实例
4、Mina入门教程(二)Spring4 集成Mina
5、PentahoReportDesigner入门教程(二)
6、TestNG 入门教程
7、GoogleGuava入门教程

返回到首页

返回到编程大巴




Win32



OpenGL



ASP.NET MVC



cocos2d-x



WCF



Linq



Android



QT



MFC



JQuery

About IT165 -广告服务 -隐私声明
-版权申明 -免责条款 -网站地图
-网友投稿 -联系方式

本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java