第二章 JFinalConfig
第二章说的是Jfinal整体项目的配置—-JFinalConfig,项目所有的全局配置都在这里啦,总体内容见下图:
本章主要的目的是让大家了解这些配置的作用,接下来一一介绍这些配置的作用。
- configConstant(Constants me)
- configRoute(Routes me)
- configEngine(Engine me)
- configPlugin(Plugins me)
- configInterceptor(Interceptors me)
- configHandler(Handlers me)
- afterJFinalStart()
- beforeJFinalStop()
- Properties loadPropertyFile(File file, String encoding)
- PropKit
1. configConstant配置JFinal常量值
Constants配置类,用于配置JFinal的系统常量值
- 开发模式(devMode,默认 false)
- 上传路径(baseUploadPath,默认 upload)
- 下载路径(baseDownloadPath,默认 download)
- 系统编码(encoding,默认 UTF-8)
- URL参数分隔符(urlParaSeparator,默认 - )
- 视图类型(viewType,默认 JFINAL_TEMPLATE)
- 视图后缀名(viewExtension,默认 .html)
- 最大上传值 (maxPostSize,默认 10M)
- 视图更新频率(freeMarkerTemplateUpdateDelay,默认 3600s,非开发模式可用)
在开发模式下,JFinal 会对每次请求输出报告,输出每次请求的 URL、Controller、Method
以及请求所携带的参数。
2. configRoute配置JFinal访问路由
如图配置,将”/hello”映射到 HelloController 这个控制 器 ,访问http://localhost/hello 将 访 问 HelloController.index()方法,而http://localhost/hello/methodName 将访问到 HelloController.methodName()方法。这是JFinal一大便利,访问路径与控制类的方法名相同。
2.1 视图渲染路径的配置
Routes.setBaseViewPath(baseViewPath)方法用于为该 Routes 内部的所有 Controller 设置视
图渲染时的基础路径,该基础路径与 Routes.add(…, viewType)方法传入的 viewPath 以及
Controller.render(view) 方法传入的 view 参数联合组成最终的视图路径,规则如下:
finalView = baseViewPath + viewPath + view
注意:当 view 以 “/” 字符 打头时 表示绝对路径, ,baseViewPath 与 viewPath 将被忽略
值得注意的还有,这个finalView是指webapp底下的文件路径,视图渲染时按这个路径去寻找对应的页面。最初我一直以为是url上的路径- -
2.2 添加路由
添加路由有三种方式
- public Routes add(String controllerKey, Class< ? extends Controller> controllerClass)
第一个参数是URL路径,第二参数是对应的控制器,是最基础的应用,如上图所示。 - public Routes add(String controllerKey, Class< ? extends Controller> controllerClass, String viewPath)
前两个参数和上面的方法一样,第三个参数是设置视图渲染时的基础路径。 public Routes add(Routes routes)
这种添加方式需要自定义一个路由,路由继承Routes类,实现config()方法,实现内容与添加路由的方式相同(如下图),主要是给不同用户可以单独增加路由的方法,便于合作开发。
还有一种优先级最高的路由设置方式,这样会打破原有路由设置内容@ActionKey,直接作用于方法之上,不过个人平时不建议使用该功能,因为这样不便于管理,而是应该特殊情况进行使用。
路由设置中还可以对该路由添加拦截器Routes.addInterceptor(Interceptor interceptor),这样对于特定URL路径进行管理,可以一定程度减少代码冗余。
3. configEngine配置模版引擎
这个Jfinal已经专门开了一个独立的模块enjoy。目前还未学到,暂不说明。
4. configPlugin配置JFinal扩展插件
Plugin.add(IPlugin plugin)此方法主要用来扩展JFinal的Plugin,便于用户对JFinal进行扩展,只需继承IPlugin即可。
5. configInterceptor配置JFinal全局拦截器
Interceptors.add(Interceptor globalActionInterceptor)和底下的configHandler类似拦截器和过滤器的原理和区别。一个是拦截所有 action 请求,一个是拦截所有web请求。
全局拦截器将拦截所有 action 请求,除非使用@Clear 在 Controller 中清除。Interceptor 配置粒度分为Global、Inject、Class、Method 四个层次,在configInterceptor中配置粒度为全局。
6. configHandler配置JFinal所有请求处理
Handler.add(Handler handler),该类可拦截web所有请求,想干什么都行啦。
7. afterJFinalStart配置Jfinal启动后动作
在afterJFinalStart()方法内写上Jfinal启动后要做的动作即可
8.beforeJFinalStop配置JFinal关闭前的动作
在beforeJFinalStop()内写上JFinal正常关闭下,需要做的动作。(好像很少遇到正常关闭的动作233)
9.loadPropertyFile
Properties loadPropertyFile(File file, String encoding)JFinal启动时初始化JFinalConfig的配置文件,参数名为prop。
10 PropKit介绍
JFinal存在一个PropKit单例,用来读取配置文件的信息。读取配置文件信息PropKit.use(String fileName, String encoding),读取配置信息参数PropKit.get(String key)。
永远默认第一次使用use的配置文件的参数,如果想读取其它配置文件的参数需要使用PropKit.use(String fileName).get(String key)。