学习杂记 之 jfinal-undertow 怎么注册的JFinalFilter

之前所学,多数使用web.xml定义应用的上下文参数、监听器、过滤器、servlet映射等等,JFinal中关键的JFinalFilter也可通过此注册进来。使用jfinal-undertow的话,简单配置服务端口号等启动即可,好奇之余查看了部分关键代码。

1、启动方式基本以此结构

UndertowServer.start(Class<? extends JFinalConfig>)
// 具体如下,
public static void start(Class<? extends JFinalConfig> jfinalConfigClass) {
    create(jfinalConfigClass).start();
}

重点在 UndertowServer 对象,start()时候的doStart方法中,如下:

protected void doStart() {
    ...
    init();
    ...
}

protected void init() {
    ...
    configJFinalFilter();
}


protected void configJFinalFilter() {
    deploymentInfo.addFilter(
          Servlets.filter("jfinal", getJFinalFilter()).addInitParam("configClass", config.getJFinalConfig())
    ).addFilterUrlMapping("jfinal", "/*", DispatcherType.REQUEST);
}

@SuppressWarnings("unchecked")
private Class<? extends Filter> getJFinalFilter() {
    try {
       return (Class<? extends Filter>)config.getClassLoader().loadClass("com.jfinal.core.JFinalFilter");
    } catch (ClassNotFoundException e) {
       throw new RuntimeException(e);
    }
}

喏,此configJFinalFilter方法实现了注册JFinalFilter到Undertow的请求处理链中。

后续就是此大图了

17.png


评论区

热门分享

扫码入社