通过开发一个小例子,完整的体现了Jsmart的各种主要特性,MVC架构,遵循COC配置原则,AOP和Plugin等。
一步一步学习和体会JFinal/Jsmart这款框架。
第一步:创建数据库表
第二步:创建Web工程,参见http://aiilive.blog.51cto.com/1925756/1254869文章;
第三步:创建工程目录结构如图3-1
关于工程目录结构图3-1说明:
com.broncho.jsmart.common工程的公共部分,存放配置文件和公共类
com.broncho.jsmart.controller 工程的Controller包,控制部分,属于MVC中的C部分;
com.broncho.jsmart.interceptor 放置拦截器类;
com.broncho.jsmart.model 工程中的Model,属于MVC中的M部分;
com.broncho.jsmart.service 业务处理类;
com.broncho.jsmart.validator 放置校验器类;
mapping-font.xml Controller中的Action转发依据,配置文件
WebRoot下error放在错误页面;
WebRoot下rs放置资源文件;
WebRoot下upload放置上传文件;
WebRoot下users放置Users模块的视图文件
工作内容:
配置信息;
用户登录;
查看所有用户;
删除用户;
上传文件;
下载文件
具体实现
1.配置文件:
◇ JdemoConfig.Properties,配置文件放置到common包下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
jdbcUrl=jdbc:mysql:
//localhost:3306/bbs?characterEncoding=utf-8&zeroDateTimeconvertToNull
user=root
password=xxx
driverClass=com.mysql.jdbc.Driver
#开发模式
devMode=
true
#是否显示SQL
showSql=
true
< /pre><p> ◇配置类,继承JsmartConfig类,重写相应的方法,其中关键的
3
个方法如下代码所示。</p><p><br></p><pre
class
=
"brush:java;toolbar:false;"
>
package
com.broncho.jsmart.common;
import
com.broncho.jsmart.interceptor.GlobalInterceptor;
import
com.broncho.jsmart.model.users.Users;
import
com.jsmart.config.Constants;
import
com.jsmart.config.Handlers;
import
com.jsmart.config.Interceptors;
import
com.jsmart.config.JSmartConfig;
import
com.jsmart.config.Plugins;
import
com.jsmart.config.Routes;
import
com.jsmart.ext.plugin.sqlinxml.SqlInXmlPlugin;
import
com.jsmart.ext.route.RouteCfg;
import
com.jsmart.plugin.activerecord.ActiveRecordPlugin;
import
com.jsmart.plugin.c3p0.C3p0Plugin;
import
com.jsmart.render.ViewType;
/**
* 使用Jsmart框架,配置全局信息
*
* @author Broncho
* @time 2013年7月17日 09:16:38
*/
public
class
JdemoConfig
extends
JSmartConfig {
@Override
public
void
configConstant(Constants me) {
loadPropertyFile(
"classes/com/broncho/jsmart/common/jdemoConfig.Properties"
);
me.setViewType(ViewType.JSP);
me.setDevMode(getPropertyToBoolean(
"devMode"
));
me.setEncoding(
"UTF-8"
);
me.setError404View(
"error/error404.jsp"
);
me.setError404View(
"error/error500.jsp"
);
}
@Override
public
void
configRoute(Routes me) {
/**
* 前台路由转发设置
*/
me.add(
new
RouteCfg(
"mapping-front.xml"
));
}
@Override
public
void
configPlugin(Plugins me) {
/**
* 配置数据源和数据库连接池插件
*/
C3p0Plugin c3p0 =
new
C3p0Plugin(getProperty(
"jdbcUrl"
),
getProperty(
"user"
), getProperty(
"password"
),
getProperty(
"driverClass"
));
me.add(c3p0);
/**
* 配置数据库表映射插件
*/
ActiveRecordPlugin arp =
new
ActiveRecordPlugin(c3p0);
arp.setShowSql(getPropertyToBoolean(
"showSql"
));
me.add(arp);
}
@Override
public
void
configInterceptor(Interceptors me) {
me.add(
new
GlobalInterceptor());
}
@Override
public
void
configHandler(Handlers me) {
// TODO Auto-generated method stub
}
}
|
1.路由转发,使用XML配置文件进行信息设置,配置信息如下代码
1
2
3
4
5
6
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
mappings
>
<!-- 用户功能 -->
<
map
ctlKey
=
"/users"
ctlClass
=
"com.broncho.jsmart.controller.users.UsersController"
viewpath
=
"/"
/>
</
mappings
>
|
2.插件配置,使用了C3P0数据库连接池,因此要依赖第三方jar包,下图是工程所依赖的jar截图:
红色线框标注是使用C3P0数据库连接池插件的依赖包
3.路由转发是根据2中的配置信息来进行的。
例如: 该链接是默认访问地址http://localhost:8080/Jdemo/index.jsp
访问Action的地址:http://localhost:8080/Jdemo/users/loginUsers
其中users是1中配置文件中ctlkey的值,loginUsers是ctlclass对于的Controller类的方法。
4.在项目中使用绝对路径。
JFinal的页面控制器有Controller类来完成,其中转发的工作则是路由转发的配置文件,该文件是整个控制流程的核心部分。
JFinal还可以使用注解的方式来进行路由转发路径的设置,这将使用JFinal的插件机制可以完成,在Jsmart中则使用了这一方式。
整个使用JFinal框架进行Web开发,将侧重Controller的路由转发,数据访问层可以使用ibatis等ORM框架,视图模版引擎FreeMarker,jsp, Rythm,beetl.
本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1255648,如需转载请自行联系原作者