JFinal入门笔记(10分钟入门)

本文详细介绍如何使用JFinal框架搭建Web应用程序,包括环境配置、数据库连接、控制器编写等内容。

夜深了,我把自己学JFinal的过程分享一下,及遇到的坑(代码全部贴出来了)

JFinal 是基于Java 语言的极速 web 开发框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python等动态语言的开发效率。

JFinal 项目开发始于2011年初,作者詹波(James Zhan)曾任搜格信息技术有限公司Java架构师,北京信息管理科学研究所CTO,现任微格网际(北京)科技有限公司联合创始人、网校网CTO。项目开源于2012年3月18日,采用对商业应用友好的Apache Licence 2.0协议。开源以来深受广大开发者欢迎,目前采用JFinal框架开发的用户群迅速壮大,同时不乏一些已经上线的商业化互联网项目。JFinal在中国最大的开源社区备受瞩目,自开源以来一直是热门项目。



==============用maven+idea+jsp创建第一个JFinal项目==============

1.创建maven项目(目录结构如下图)



2.修改pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.demo</groupId>
    <artifactId>JFinal</artifactId>
    <version>1.0-SNAPSHOT</version>
<dependencies>
    <!--jfinal start-->
    <dependency>
        <groupId>com.jfinal</groupId>
        <artifactId>jfinal</artifactId>
        <version>2.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.el/el-api -->
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>el-api</artifactId>
        <version>2.2</version>
    </dependency>


    <dependency>
        <groupId>com.jfinal</groupId>
        <artifactId>jetty-server</artifactId>
        <version>8.1.8</version>
    </dependency>
    <!--jfinal end-->

    <!-- JSTL标签类 -->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <dependency>
        <groupId>it.sauronsoftware.cron4j</groupId>
        <artifactId>cron4j</artifactId>
        <version>2.2.5</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>3.8.1</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
</dependencies>

</project>
    <!-- https://mvnrepository.com/artifact/org.eclipse.jetty/jetty-jsp -->
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-jsp</artifactId>
        <version>9.2.10.v20150310</version>
    </dependency>

3.在webapp/WEB-INF下创建web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <display-name>Archetype Created Web Application</display-name>
    <filter>
        <filter-name>jfinal</filter-name>
        <filter-class>com.jfinal.core.JFinalFilter</filter-class>
        <init-param>
            <param-name>configClass</param-name>
            <param-value>com.demo.config.WebConfig</param-value>//对应自己的config文件
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>jfinal</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

4.在resource下创建jdbc.properties文件

#jdbc mysql
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/jpress?userUnicode=true&characterEncoding=UTF-8
user=root
password=123456

initialSize=1
minIdle=1
maxActivee=20

5.创建数据库jpress,并创建news表

CREATE TABLE `news` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `title` varchar(225) DEFAULT NULL COMMENT '标题',
  `content` varchar(225) DEFAULT NULL COMMENT '内容',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


配置文件都弄好了,开始编写java文件了

controller
dao
service
config

dao:

package com.demo.dao;
import com.jfinal.plugin.activerecord.Model;
public class News extends Model<News> {
}

Service:

package com.demo.service;

import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;

public class NewsService {
    public void add(String title){
        Record news = new Record().set("title",title);
        Db.save("news",news);
    }
}
Controller:
package com.demo.controller;

import com.demo.service.NewsService;
import com.jfinal.core.Controller;

public class NewsController extends Controller {
    private NewsService newsService = new NewsService();

    public void index(){
        test();
        renderJsp("index.jsp");
    }

    public void test(){
        System.out.println("进入...");
        newsService.add("测试值");
        System.out.println("执行成功...");
    }
}
package com.demo.controller;

import com.jfinal.core.Controller;

public class IndexController extends Controller {
    public void index(){
        //renderJsp("index.jsp");
        renderText("Hello Maven JFinal");
    }
}

Webconfig:(Constant/Route/Plugin/Interceptor/Handler)

package com.demo.config;

import com.demo.controller.IndexController;
import com.demo.controller.NewsController;
import com.demo.dao.News;
import com.jfinal.config.*;
import com.jfinal.core.JFinal;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;

public class WebConfig extends JFinalConfig {
    public void configConstant(Constants constants) {
        //设置编码格式
        constants.setEncoding("UTF-8");
        //设置为开发模式(如果为fals,jfinal会缓存页面,导致开发时修改页面后不能立即呈现)
        constants.setDevMode(true);
        //jfinal支持很多类型的页面,这里设置为jsp,FreeMarker也支持)
        constants.setViewType(ViewType.JSP);
        constants.setBaseViewPath("/WEB-INF/webpage");
    }

    public void configRoute(Routes routes) {
        //统一设置映射访问路径  类似于spring mvc的@RequestMapping
        routes.add("/", IndexController.class);
        routes.add("/news", NewsController.class);
    }

    public void configPlugin(Plugins plugins) {
        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);

    }

    public void configInterceptor(Interceptors interceptors) {

    }

    public void configHandler(Handlers handlers) {

    }
    public static void main(String[] args) {
        // eclipse 下的启动方式
//        JFinal.start("src/main/java/config", 8080, "/");
JFinal.start("src/main/webapp", 8080, "/",5);
        // IDEA 下的启动方式
        // JFinal.start("src/main/webapp", 80, "/");
    }

}

启动:

编写一个main函数:

 public static void main(String[] args) {
        // IDEA 下的启动方式
        JFinal.start("src/main/webapp", 80, "/");
    }

到这就搞定了,然后我们可以在此基础上添加新的血液。。。。一起加油吧。

注意这里的web服务器是jeety。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值