JFinal+maven+freemarker入门教程

写在前面的话

前两天听说了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 source print ?
    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添加如下代码

     

    view source print ?
    01.
    02. jfinal
    03. class>com.jfinal.core.JFinalFilterclass>
    04.
    05. configClass
    06. com.demo.jfinal.config.DemoConfig
    07.
    08.
    09.
    10. jfinal
    11. /*
    12.

     

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

     

     

    view source print ?
    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附下

     

    view source print ?
    1. ##common_config.txt
    2. jdbcUrl = jdbc:mysql://127.0.0.1/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
    3. user = root

     

     

    view source print ?
    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 source print ?
    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 source print ?
    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>
8. 上一步中的layout是freemarker的宏定义,代码如下

 

 

view source print ?
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">
20.
21. class="main">
22. <#nested>
23.
24.
25.
26.
27.
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.
64.  
65. <#if ((totalPage - currentPage) >= 8)>
66.
69. if>
70.  
71. <#if (currentPage == totalPage)>
72. 下页
73. <#else>
75. if>
76.
77.

 

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

你可能感兴趣的:(java,jfinal,web,java)