本帖最后由 上海分校-小影 于 2018-4-3 18:01 编辑
摘要
JFinal 是国产的、基于 Java 语言的极速 WEB MVC + ORM 框架,由 Handler、Interceptor、Controller、Render、Plugin 五大部分组成。其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。
在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!
JFinal架构原理图
JFinal架构以Action为参照,Handler处在扩展的外围,Interceptor处在更贴近Action的范围,Controller承载Action处在扩展的中心,Render处于Action后端,Plugin处于Action右侧。
JFinal有如下主要特点:
它是国产的MVC架构,设计精巧,使用简单;
惯例优于配置原则,支持零配置,无XML;
独创Db + Record模式,灵活便利;
ActiveRecord支持,使数据库开发极致快速;
极简、高性能Template Engine,十分钟内掌握基本用法;
自动加载修改后的java文件,开发过程中无需重启web server;
AOP支持,拦截器配置灵活,功能强大;
Plugin体系结构,扩展性强;
多视图支持,支持FreeMarker、JSP、Velocity;
强大的Validator后端校验功能;
功能齐全,拥有struts2绝大部分核心;
体积小仅538K;
开发原理
简单总结为:零配置、代码量少、开发体验连续、无第三方依赖、概念最少化。
快速上手
- 第一步:创建项目
以最常用的Eclipse为例,推荐使用Eclipse IDE for Java EE Developers版本。
以此创建工程,缺少web.xml文件,需要选择项目右键执行JavaEE Tools-->Generate Deployment Descriptor Stub:
- 第二步:导入maven的坐标
[AppleScript] 纯文本查看 复制代码 <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jetty-server</artifactId>
<version>8.1.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>cos</artifactId>
<version>26Dec2008</version>
</dependency>
</dependencies>
这里如果不使用maven导入jar包,需要将jfinal-xxx.jar与jetty-server-8.1.8.jar拷至项目WEB-INF\lib下。
jetty-server-8.1.8.jar是发布使用的运行环境,jfinal默认使用jetty服务器。
- 第三步:创建类MyConfig.java
创建包cn.itcast.jfinal.common,创建类MyConfig.java,继承JFinalConfig
[AppleScript] 纯文本查看 复制代码 public class MyConfig extends JFinalConfig{
@Override
public void configConstant(Constants arg0) {
}
@Override
public void configEngine(Engine arg0) {
}
@Override
public void configHandler(Handlers arg0) {
}
@Override
public void configInterceptor(Interceptors arg0) {
}
@Override
public void configPlugin(Plugins arg0) {
}
@Override
public void configRoute(Routes routes) {
routes.add("/",IndexController.class);
}
/**
* 运行此main方法可以启动项目,此main方法可以放置在任意的class类定义中
*
* 使用本方法启动过一次以后,会在开发工具的debug、run、config中自动生成一条启动配置
*/
public static void main(String[] args) {
/**
* 特别注意:Eclipse之下建议的启动方式
*/
JFinal.start("src/main/webapp", 8080, "/", 5);
}
}
main方法表示的是:在创建Java Application启动项时,其中src/main/webapp 8080 / 5参数,用来指定web项目的根目录。
- 第四步:在web.xml中添加
<filter>
<filter-name>jfinal</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>cn.itcast.jfinal.common.MyConfig</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意: MyConfig.java 文件所在的包以及自身名必须与web.xml中的param-value标签内的配置相一致。
- 第五步:定义控制器
创建包:cn.itcast.jfinal.controller,创建类IndexController.java,继承Controller
[AppleScript] 纯文本查看 复制代码 public class IndexController extends Controller{
public void index(){
setAttr("msg","传智播客.黑马程序员");
renderTemplate("index.html");
}
}
setAttr表示设置变量msg。
renderTemplate表示jfinal默认的模板引擎,用来跳转index.html。
- 第六步:定义index.html
[AppleScript] 纯文本查看 复制代码 <html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
你好! #(msg)
</body>
</html>
- 第七步:运行MyConfig.java的main方法,启动jetty服务,在浏览器中输入:http://localhost:8080/index
|