夜深了,我把自己学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。。。