2021-07-02 13:55
上面是一种方式,最简单的是用命令挂参端口即可,源码中有说明:
使用 System.getProperty(...) 加载命令行传入的 undertow.port 与 undertow.host 参数, 因为这两个参数最有可能在运行项目时进行变动,这个功能可以免去创建 config/undertow-pro.txt 来配置最需要变动的 port 与 host 参数,进一步节省时间 使用示例: java -Dundertow.port=8080 -Dundertow.host=0.0.0.0 -jar jfinal-club-release.jar 传参注意事项: 1:传参规则由 java 命令行给定,与 jfinal undertow 项目完全无关 2:传参以 "-D" 为前缀,并且该前缀与后方的参数名之间不能有空格 3:参数名与参数值中间用等号字符分格,且等号前后不能空格。
也就是说可以复制 jfinal.sh 里面只改 java -Dundertow.port=8080 这一行即可
2021-06-22 10:24
UndertowServer 》
doStart() 》
init() 》
configJFinalFilter() 》
Servlets.filter("jfinal", getJFinalFilter()) 》
config.getClassLoader().loadClass("com.jfinal.core.JFinalFilter") 》
.addInitParam("configClass", config.getJFinalConfig()) 》
public JFinalFilter(JFinalConfig jfinalConfig) 》
。。。servlet 》》
public void init(FilterConfig filterConfig) 》
jfinal.init(jfinalConfig, filterConfig.getServletContext()); 》
this.servletContext = servletContext;
this.contextPath = servletContext.getContextPath();
initPathKit();
Config.configJFinal(jfinalConfig); // start plugin, init log factory and init engine in this method
constants = Config.getConstants();
initActionMapping();
initHandler();
initRender();
initOreillyCos();
initTokenManager();
不扒了。大致就这
2021-06-22 10:13
UndertowServer里面有个方法:
private Class<? extends Filter> getJFinalFilter() {
try {
return (Class<? extends Filter>)config.getClassLoader().loadClass("com.jfinal.core.JFinalFilter");
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
其中 config.getClassLoader().loadClass 就是调用的HotSwapClassLoader的loadClass
然后JFinalFilter里面又会初始化各个类init方法servlet的知识点了,里面的jfinal.init等等代码,得追着读了