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