JFinal+maven+freemarker入门教程
2015-11-05 09:03
721 查看
次元立方下载编程数据库安全设计网页系统服务器组网嵌入式基础QQ
RSS
1 向前台传递数据;2 向后台传递数据;3 ajaxpost提...
详细
eclipse的jigloo插件可视化开发javaswing/SW
将java中Double类型的科学计数法转换为指定格
quartz动态更改执行时间
鉴于CXF框架的webservice学习 传递xml,json
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项目构建
windows操作系统对于程序运行时堆栈的管...
python如何使用virtualenvwrapper切换不...
定时器与系统时间
浅析Redis实现lock互斥访问资源
cocos2dx获取网络时间(一)
WPF快速入门系列(6)WPF资源和样式
使用myeclipse建带注解的model实体类
C语言那点事如何从零学好C语言?
MATLAB图像处理 统计最大/最小/平均灰度
Android学习自定义Dialog
Xamarin.Android通知详解
Android动态改变布局
android实现emoji输入
Android Spinner AutoCompleteTextView
Android中Eclipse开发工具的安装和Andr...
c构造函数
Android开发学习 sharedpreference的使用
Android新浪微博客户端(七)ListView中...
详细
详细
详细
首页 >
编程大巴 >
编程语言 > Java > 正文
编程大巴
http://www.it165.net/pro
我来说两句(0)
0
Tag标签:入门教程
http://www.jfinal.com/
遵循COC原则,零配置,无xml
独创Db + Record模式,灵活便利
ActiveRecord支持,使数据库开发极致快速
自动加载修改后的java文件,开发过程中无需重启web server
AOP支持,拦截器配置灵活,功能强大
Plugin体系结构,扩展性强
多视图支持,支持FreeMarker、JSP、Velocity
强大的Validator后端校验功能
功能齐全,拥有struts2的绝大部分功能
体积小仅248K,且无第三方依赖
注:以上全部摘自官网,勿喷,该了解的还是要了解。
view sourceprint?
3. web.xml添加如下代码
view sourceprint?
4. 创建一个JFinal入口配置文件DemoConfig,需要继承JFinal的JFinalConfig类
view sourceprint?
5. 上一步中为JFinal的主要入口类,我们必须创建它,并进行相应的配置改动,其中的common_config.txt,freemarker.properties附下
view sourceprint?
view sourceprint?
6. 创建第一个controller,需要继承JFinal的controller 类
view sourceprint?
7. 创建index.ftl
view sourceprint?
8. 上一步中的layout是freemarker的宏定义,代码如下
view sourceprint?
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
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 -广告服务 -隐私声明
-版权申明 -免责条款 -网站地图
-网友投稿 -联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统