前段时间有机会接触了下jfinal这个框架,感觉用来写一些小型的门户网站或者业务简单的功能性网站比较实用,上手简单,开发快。
首先介绍一下Jfinal,它是一个基于MVC模式的WEB+ORM框架。有以下特点:
1. MVC架构,设计精巧,使用简单
2. 遵循COC原则,零配置,无xml
3. 独创Db + Record模式,灵活便利
4 ActiveRecord支持,使数据库开发极致快速
5. 自动加载修改后的java文件,开发过程中无需重启web server
6 AOP支持,拦截器配置灵活,功能强大
7. Plugin体系结构,扩展性强
8. 多视图支持,支持FreeMarker、JSP、Velocity
9. 强大的Validator后端校验功能
10. 功能齐全,拥有struts2的绝大部分功能
11. 体积小仅248K,且无第三方依赖
好了,废话不多说,直接开干!
项目结构图
配置web.xml文件
1.新建一个maven项目(这个步骤不多说,附:pom.xml依赖)
- <dependencies>
- <!-- jfinal 核心包 -->
- <dependency>
- <groupId>com.jfinal</groupId>
- <artifactId>jfinal</artifactId>
- <version>2.2</version>
- </dependency>
- <dependency>
- <groupId>com.jfinal</groupId>
- <artifactId>cos</artifactId>
- <version>26Dec2008</version>
- </dependency>
- <!-- 阿里巴巴druid数据连接池-->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>1.0.15</version>
- </dependency>
- <!-- mysql驱动-->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>5.1.20</version>
- </dependency>
- <!-- 单元测试-->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- </dependency>
- <!-- servlet标准-->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <version>3.1.0</version>
- </dependency>
- </dependencies>
由此可见使用jfinal的依赖包并不多,核心只有两个
2.配置数据源参数(jdbc.properties )
- #jdbc mysql
- driverClass=com.mysql.jdbc.Driver
- #我的数据库表叫test,根据自己实际情况修改
- jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
- user=root
- password=root
- initialSize=1
- minIdle=1
- maxActivee=20
3.实体层(不需要写字段映射,只要继承Model)
- package com.jfinal.dao;
- import com.jfinal.plugin.activerecord.Model;
- /**
- * 实体层
- *
- * @author lpf
- */
- public class News extends Model<News>{
- }
- package com.jfinal.config;
- import com.jfinal.controller.IndexController;
- import com.jfinal.controller.NewsController;
- import com.jfinal.dao.News;
- import com.jfinal.kit.PropKit;
- import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
- import com.jfinal.plugin.druid.DruidPlugin;
- import com.jfinal.render.ViewType;
- /**
- * jfinal配置文件
- *
- * @author lpf
- */
- public class WebConfig extends JFinalConfig{
- @Override
- public void configConstant(Constants constants) {
- //设置编码格式
- constants.setEncoding("UTF-8");
- //设置为开发模式(如果为fals,jfinal会缓存页面,导致开发时修改页面后不能立即呈现)
- constants.setDevMode(true);
- //jfinal支持很多类型的页面,这里设置为jsp,FreeMarker也支持)
- constants.setViewType(ViewType.JSP);
- }
- @Override
- public void configRoute(Routes routes) {
- //统一设置映射访问路径 类似于spring mvc的@RequestMapping
- routes.add("/", IndexController.class);
- routes.add("/news", NewsController.class);
- }
- @Override
- public void configPlugin(Plugins plugins) {
- //这里启用Jfinal插件 读取jdbc配置
- PropKit.use("jdbc.properties");
- final String URL =PropKit.get("jdbcUrl");
- final String USERNAME = PropKit.get("user");
- final String PASSWORD =PropKit.get("password");
- final Integer INITIALSIZE = PropKit.getInt("initialSize");
- final Integer MIDIDLE = PropKit.getInt("minIdle");
- final Integer MAXACTIVEE = PropKit.getInt("maxActivee");
- DruidPlugin druidPlugin = new DruidPlugin(URL,USERNAME,PASSWORD);
- druidPlugin.set(INITIALSIZE,MIDIDLE,MAXACTIVEE);
- druidPlugin.setFilters("stat,wall");
- plugins.add(druidPlugin);
- //实体映射
- ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
- activeRecordPlugin.addMapping("news","id", News.class);
- plugins.add(activeRecordPlugin);
- }
- @Override
- public void configInterceptor(Interceptors me) {
- // TODO Auto-generated method stub
- }
- @Override
- public void configHandler(Handlers me) {
- // TODO Auto-generated method stub
- }
- }
- package com.jfinal.service;
- import com.jfinal.plugin.activerecord.Db;
- import com.jfinal.plugin.activerecord.Record;
- public class NewsService {
- public void add(String newstitle){
- Record news = new Record().set("newstitle", newstitle);
- Db.save("news", news);
- }
- }
新闻控制层
- package com.jfinal.controller;
- import com.jfinal.core.Controller;
- import com.jfinal.service.NewsService;
- public class NewsController extends Controller{
- private NewsService newsService = new NewsService();
- public void index(){
- <span style="white-space:pre"> </span>test();
- <span style="white-space:pre"> </span>renderJsp("/news/news.jsp");<span style="white-space:pre"> </span>
- }
- public void test(){
- System.out.println("进入...");
- newsService.add("测试值");
- System.out.println("执行成功...");
- }
- }
- package com.jfinal.controller;
- import com.jfinal.core.Controller;
- /**
- * jfinal默认调用方法
- *
- * @author lpf
- */
- public class IndexController extends Controller{
- public void index(){
- renderJsp("index.jsp");
- }
- }