zoukankan      html  css  js  c++  java
  • JFinal学习笔记

    JFinalConfig
    一、
    Web项目需要一个继承自JFinalConfig的子类,用于对整个项目进行配置
    五个抽象方法
    1、 configConstant(Constants con)
    JFinal常量值,如开发模式常量 devModel,默认视图配置 ViewType
    2、 configRoute(Routes re)
    配置JFinal访问路由,
    如 re.add("/hello",HelloController.class)将"/hello"映射到HelloController上

    Route类的两个方法
    public Routes add(String controllerKey, Class<? extends Controller> controllerClass, String viewPath)
    public Routes add(String controllerKey, Class<? extends Controller> controllerClass)
    JFinal的路由规则
    url组成 访问目标
    controllerKey Controller.index();
    controllerKey/v0-v1 Controller.index(),所带url参数值为 v0-v1
    controllerKey/method Controller.method();
    controllerKey/method/vo-v1 Controller.method(),所带url参数值为v0-v1
    即默认是index方法来处理请求,JFinal默认使用"-"来分隔多个值
    controllerKey、method、urlPara 必须使用"/"来分隔
    也可在方法上使用,如 ActionKey("/login/112-1123") 类似的配置 来更改路由配置

    还可以进行路由拆分配置

    3、 configPlugin(Plugins plu)
    配置c3p0数据库连接池插件,ActiveRecord数据访问插件
    JFinal插件架构是其主要扩展方式之一,可以方便地创建插件并应用到项目中
    4、 configInterceptor(Interceptors inter)
    用来配置JFinal的全局拦截器,全局拦截器拦截所有action请求,除非使用 @clear注解在Controller中清除
    Class与Method的Interceptor 见后续
    5、 configHandler(Handlers handler)
    Handler可以接管所有web请求

    二、afterJFinalStart()与beforeJFinalStop()
    JFinalJFinalJFinal 会在系统启动完成后回调 afterJFinalStart()方法,会在系统关闭前回调beforeJFinalStop()方法 。

    三、PropKit
    PropKit工具类用来操作外部配置文件
    第一个被加载的配置文件可以使用 PropKit.get()方法直接操作
    菲第一个被加载的配置文件则需要使用 PropKit.use(...).get(...)来操作

    1600 Controller
    Controller是JFinal的核心类,是MVC的控制器,、
    基于JFinal的Web应用的控制器需要继承该类。
    1、 Action
    Controller以及在其中定义的public 无参方法称为一个Action
    Action方法必须是public 且 没有形参
    2、 getPara系列方法
    获取请求中的参数,
    getPara("title") 返回 表单域名为title 的参数值
    getParaToInt("age") 返回表单域名为age的参数值并转为 int型

    getPara(0)/getParaToInt(1)/getParaToInt(2) 返回url请求中的第0/1/2个值,
    约定字母 N与n可以表示 负号
    getPara() 返回urlPara参数的整体值。
    3、getModel()
    返回Model对象,非常简单的实体类
    public class Blog extends Model<Blog> {
    public static final Blog me = new Blog();
    }
    4、setAttr方法
    setAttr(String,Object)
    5、getFile文件上传
    如果客户端请求为 multipart request(enctype="multipart/form-data"),那么必须先调用getFile方法
    文件默认上传至项目根路径下的upload子路径下
    6、renderFile文件下载
    默认下载路径为项目根路径下的download子路径下
    7、session操作方法
    setSessionAttr(key,value)可以向session中存放数据
    getSessionAttr(key) 可以从session中读取数据
    getSession()可以得到session对象。
    8、render系列方法
    假设在JFinalConfig.configRoute(Route routes) 中有如下的Controller映射配置:
    routes.add("/user",UserController.class,"/path"),render(String view)使用如下:
    render("test.html") 渲染名为 test.html 的视图,该视图的全路径为"/path/test.html",
    render("/other_path/test.html") 渲染名为test.html的视图,该视图的全路径名为 "/other_path/test.html"
    其他render方法使用例子
    renderFreMarker("test.html") renderVelocity("test.html")
    renderJsp("test.html")
    renderJson() 将所有通过 Controller.setAttr(String,Object)设置的变量转换成json数据并渲染
    renderJson("users",userList) users为根,仅将userList中的数据转换成json数据并渲染
    renderJson(user) 将user对象转换成json数据并渲染
    renderJson("{"age":18}") 直接渲染json字符串
    renderJson(new String[]{"user","bolg"}) 仅将setAttr("user",user) 与 setAttr("blog",blog)设置的属性转换成json并渲染,setAttr设置的其他属性并不转换成json
    renderFile("test.zip") 渲染名为test.zip的文件,一般用于文件下载
    renderText("Hello JFinal") 渲染纯文本内容
    renderHtml("Hello Html") 渲染HTML内容
    renderError(404,"test.html") 渲染名为test.html的文件,且状态为404;
    renderNull(),不渲染,即不向客户端返回数据
    render(new XmlRender()) 使用自定的XmlRender来渲染
    IE不支持contentType为application/json,在ajax上传文件完成后json返回json IE 提示下载文件,解决办法
    render(new JsonRender().forIE())/render(new JsonRender(params).forIE());
    除了 renderError方法外,调用render系列的方法,程序并不会立即返回,如需立即返回需要使用return语句,
    一个action中多次调用render方法只有最后一次有效
    1719 AOP
    1、interceptor
    继承Interceptor接口,实现方法
    public void intercept(Invocation inv);
    Invocation 类提供了很多便利的方法在拦截器中使用
    常用的
    void invoke()
    Controller getController() 获取Action调用的Controller,仅用于控制层拦截
    String getActionKey() 获取Action调用的action key值,仅用于控制层拦截
    String getControllerKey() 获取Action调用的controller key值,仅用于控制层拦截
    String getViewPath() 获取Action调用的视图路径,仅用于控制层拦截
    2、before
    Before注解用来对拦截器进行设置,可配置class、Method级别的拦截器
    @Before(AaaInter.class)
    public class BlogController extends Controller{

    @Before({BbbInter.class,CccInter.class})
    public void index(){
    }

    public void show(){
    }
    }

    在JFinalConfig中可以设置全局拦截器(控制层全局与业务层全局)和Inject拦截器
    public class AppConfig extends JFinalConfig{
    public void configInterceptor(Interceptor intp){
    intp.addGlobalActionInterceptor(new GlobalActionInterceptor());//控制层全局拦截器
    intp.addGlobalServiceInterceptor(new GlobalServiceInterceptor());//业务层全局拦截器
    }
    }

    拦截器的执行顺序 Global、Inject、Class、Method,同级中的多个拦截器,配置在前面的先执行。

    3、clear
    Clear用于清除自身所处层次以上层的拦截器
    如clear声明在Method层,将针对Global、Inject、Class进行清除,
    clear声明在Class层,将针对Global、Inject进行清除
    Clear注解不带参数,清除所有;带参数时,清除指定的拦截器
    4、Interceptor的除非
    控制层的拦截器的触发,只需发起action请求即可。
    业务层的拦截器的触发,需要使用enhance方法对目标对象进行增强

    public class OrderService{
    @Before(Tx.class)
    public void payment(int orderId,int userId){
    //code
    }
    }

    public class OrederController extends Controller{
    public void payment(){
    OrederService service = enhance(OrderService.class);
    service.payment(getParaToInt("orderId"),getParaToInt("userId"));
    }
    }
    5、Duang、Enhancer
    Duang、Enhancer用来对目标进行增强,让其拥有AOP的能力
    如:
    public class TestMain{
    public void main(String[] args){
    OrderService service = Duang.duang(OrderService.class);
    service.payment(..);

    OrderService service = Enhancer.enhance(OrderService.class);
    }
    }
    6、Inject 拦截器
    Inject拦截器是指在使用enhance或duang方法增强时,使用参数传入的拦截器。Inject可以对目标完全无侵入的应用AOP
    假如要增加的目标在jar包,无法使用Before注解对其配置拦截器,使用Inject拦截器可以对jar包中目标进行增强。

    public void injectDemo(){
    //为enhance方法传入的拦截器称为Inject拦截器,下的Tx即是Inject拦截器
    OrderService service = Enhancer.enhance(OrederService.class,Tx.class);
    service.payment(...);
    }

  • 相关阅读:
    模块和包专区
    递归函数,三级菜单专区
    内置函数和匿名函数专区
    迭代器和生成器专区
    函数进阶专区
    初始函数专区
    题解 P6282 【[USACO20OPEN]Cereal S】
    题解 P6281 【[USACO20OPEN]Social Distancing S】
    题解 P6281 【[USACO20OPEN]Social Distancing S】
    第5题:棋盘
  • 原文地址:https://www.cnblogs.com/yexingzhiguang/p/6427284.html
Copyright © 2011-2022 走看看