jfinal是基于java语言的web+orm框架,具有许多优点。手册下载地址:http://www.jfinal.com/man
maven坐标:
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>1.5</version>
</dependency>
web.xml:
<!-- jfinal-filter -->
<filter>
<filter-name>jfinal_filter</filter-name>
<filter-class>com.jfinal.core.JFinalFilter</filter-class>
<init-param>
<param-name>configClass</param-name>
<param-value>com.xxx.Config</param-value><!--继承自JFinalConfig的自定义的Config类-->
</init-param>
</filter>
<filter-mapping>
<filter-name>jfinal_filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Config类:
其中,ActiveReceord 中定义了 addMapping(String tableName, Class<? extends Model> modelClass>)方法,该方法建立了数据库表名到 Model 的映射关系
public class Config extends JFinalConfig {
//此方法用来配置JFinal的常量值
@Override
public void configConstant(Constants constants) {
// 开发者模式,正式部署时关闭
constants.setDevMode(true);
constants.setBaseViewPath("/WEB-INF/freemarker");
// 设置常用错误页面
constants.setError500View("/WEB-INF/freemarker/errorPage/500.ftl");
Configuration freeMarkerConfig = FreeMarkerRender.getConfiguration();
try {
// 将contentPath设置为freemarker共享变量 ctx:项目根目录
freeMarkerConfig.setSharedVariable("ctx", JFinal.me()
.getServletContext().getContextPath());
} catch (TemplateModelException e) {
throw new IllegalStateException(e);
}
}
//用来配置JFinal的Handler
@Override
public void configHandler(Handlers handlers) {
}
//用来配置JFinal的Interceptor
@Override
public void configInterceptor(Interceptors interceptors) {
interceptors.add(new SessionInViewInterceptor(true));
interceptors.add(new LoginInterceptor());//自定义登陆拦截器
}
//用来配置JFinal的Plugin,C3P0数据库连接池插件,ActiveRecordPlugin数据库访问插件
@Override
public void configPlugin(Plugins plugins) {
// 加载数据库和连接池相关的配置文件
// 使用c3p0插件
Properties properties = loadPropertyFile("config" + File.separator + "c3p0.properties");
C3p0Plugin c3p0Plugin = new C3p0Plugin(properties);
plugins.add(c3p0Plugin);
ActiveRecordPlugin aPlugin = new ActiveRecordPlugin(c3p0Plugin);
aPlugin.setDialect(new MysqlDialect());
plugins.add(aPlugin);
aPlugin.addMapping("user", User.class);
aPlugin.addMapping("project", Project.class);
}
//配置JFinal访问路由
@Override
public void configRoute(Routes routes) {
routes.add("/login", LoginController.class, "/login");
routes.add("/user", UserController.class, "/user");
routes.add("/project", ProjectController.class, "/project");
}
}
接下来,LoginController部分代码:
render渲染不同的类型的视图返回到客户端,此处视图类型为Freemarker。
可以在Config类的configConstant类中设置视图类型 :constants.setViewType(ViewType.FREE_MARKER);
public class LoginController extends Controller {
@ClearInterceptor(ClearLayer.ALL)
@ActionKey("/") //使用了@ActionKey("/"),actionKey由原来的‘/login/index’变为了‘/login’
public void index() {
render("index.ftl");
}
最后,发布项目,访问:http://localhost/项目名称/login 将默认访问控制器的index方法,返回index.ftl页面。
访问http://localhost/项目名称/login/login 将访问控制器中的login方法。
待续。。。