之前所学,多数使用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的请求处理链中。
后续就是此大图了