public class UndertowServer extends Object
| 限定符和类型 | 字段和说明 |
|---|---|
protected io.undertow.Undertow.Builder |
builder |
protected UndertowConfig |
config |
protected Consumer<UndertowConfig> |
configConsumer |
protected DecimalFormat |
decimalFormat |
protected io.undertow.servlet.api.DeploymentInfo |
deploymentInfo |
protected io.undertow.servlet.api.DeploymentManager |
deploymentManager |
protected HotSwapWatcher |
hotSwapWatcher |
protected BiConsumer<ClassLoader,io.undertow.servlet.api.DeploymentInfo> |
onDeployConsumer |
protected Consumer<io.undertow.Undertow.Builder> |
onStartConsumer |
protected boolean |
started |
protected io.undertow.Undertow |
undertow |
String |
version |
protected Consumer<WebBuilder> |
webBuilder |
| 限定符 | 构造器和说明 |
|---|---|
protected |
UndertowServer(UndertowConfig undertowConfig) |
| 限定符和类型 | 方法和说明 |
|---|---|
UndertowServer |
addHotSwapClassPrefix(String prefix)
仅用于解决项目的 JFinalConfig 继承类打成 jar 包,并且使用 undertow.devMode=true 配置
时报出的异常,以上两个条件没有同时成立时无需理会,也就是说没有报异常就无需理会
假定项目中的 JFinalConfig 的继承类 com.abc.MyConfig 被打进了 jar 包并且
undertow.devMode 设置成了 true,这里在启动项目的时候由于 ClassLoader
不同会报出以下异常:
Can not create instance of class: com.abc.MyConfig.
|
UndertowServer |
addSystemClassPrefix(String prefix) |
UndertowServer |
config(Consumer<UndertowConfig> configConsumer)
config 便于使用 lambda 直接拿到 UndertowConfig 对象进行更多更灵活的配置,
例子:
UndertowServer
.create(AppConfig.class)
.config( config -> {
config.setHost("0.0.0.0");
config.setSessionTimeout(30 * 60);
})
.start();
|
protected io.undertow.server.HttpHandler |
configGzip(io.undertow.server.HttpHandler pathHandler) |
protected io.undertow.server.HttpHandler |
configHandler(io.undertow.server.HttpHandler next)
子类覆盖此方法可以添加 Handler 到 Handler 链条之中
|
protected void |
configHttp() |
protected void |
configJFinalFilter() |
protected void |
configJFinalPathKit()
为 com.jfinal.kit.PathKit 注入值,以便支持 jfinal-undertow 的部署方式
该配置要兼顾开发与部署两种场景
|
protected void |
configSessionPersistenceManager()
配置 SessionPersistenceManager,支持 session 热加载
|
protected io.undertow.server.HttpHandler |
configSsl(io.undertow.server.HttpHandler httpHandler) |
protected void |
configUndertow() |
protected void |
configWeb() |
UndertowServer |
configWeb(Consumer<WebBuilder> webBuilder)
Filter、Servlet、Listener、WebSocket 组件统一配置入口
例子:
UndertowServer.create(AppConfig.class)
.configWeb( builder -> {
// 配置 Filter
builder.addFilter("myFilter", "com.abc.MyFilter");
builder.addFilterUrlMapping("myFilter", "/*");
builder.addFilterInitParam("myFilter", "key", "value");
// 配置 Servlet
builder.addServlet("myServlet", "com.abc.MyServlet");
builder.addServletMapping("myServlet", "*.do");
builder.addServletInitParam("myServlet", "key", "value");
// 配置 Listener
builder.addListener("com.abc.MyListener");
// 配置 WebSocket,MyWebSocket 需使用 ServerEndpoint 注解
builder.addWebSocketEndpoint("com.abc.MyWebSocket");
})
.start();
以上代码给出了 Filter、Servlet、Listener、WebSocket 的配置实例,其中 MyWebSocket
需要使用 ServerEndpoint 注解标识其为一个 WebSocket 组件,例如:
|
static UndertowServer |
create(Class<? extends com.jfinal.config.JFinalConfig> jfinalConfigClass)
创建 UndertowServer
尝试使用 "undertow.txt" 以及 "undertow-pro.txt" 初始化 undertow
当配置文件不存在时不抛出异常而是使用默认值进行初始化
|
static UndertowServer |
create(Class<? extends com.jfinal.config.JFinalConfig> jfinalConfigClass,
String undertowConfig)
创建 UndertowServer
使用指定的配置文件及其生产环境配置文件初始化 undertow,假定指定的配置文件名为
"abc.txt",其生产环境配置文件名约定为 "abc-pro.txt"
注意:指定的配置文件必须要存在,而约定的那个生产环境配置文件可以不必存在
|
static UndertowServer |
create(String jfinalConfigClass) |
static UndertowServer |
create(String jfinalConfigClass,
String undertowConfig) |
static UndertowServer |
create(UndertowConfig undertowConfig)
使用手动构建的 UndertowConfig 对象创建 UndertowServer
|
protected void |
doStart() |
protected void |
doStop() |
protected String |
getTimeSpent(long startTime) |
UndertowConfig |
getUndertowConfig() |
protected void |
init() |
boolean |
isDevMode() |
boolean |
isStarted() |
protected void |
loadCommandLineParameter()
使用 System.getProperty(...)
|
static void |
main(String[] args)
jfinal.sh 脚本中的 MAIN_CLASS 始终配置为 com.jfinal.server.undertow.UndertowServer
undertow.txt 中配置 configClass=jfinalConfigClass 指向 JFinalConfig 的继承类
这样就可以避免修改 jfinal.sh,只需修改 undertow.txt
此方法仅适用于无需对 UndertowServer 进行代码配置的场景,例如需要添加
servlet、websocket 的场景则不适用,因为配置文件不支持这些配置
|
protected boolean |
notBlank(String str) |
UndertowServer |
onDeploy(BiConsumer<ClassLoader,io.undertow.servlet.api.DeploymentInfo> onDeployConsumer)
安插在 DeploymentManager.deploy() 前的钩子方法,目前用于支持添加 shiro 的
EnvironmentLoaderListener,支持 shiro 还需要调用:
addHotSwapClassPrefix("org.apache.shiro.")
|
UndertowServer |
onStart(Consumer<io.undertow.Undertow.Builder> onStartConsumer)
安插在启动前的钩子方法,便于用户通过 lambda 表达式进行更多个性化配置
例如以下配置:
// In HTTP/1.1, connections are persistent unless declared otherwise.
// Adding a "Connection: keep-alive" header to every response would only
// add useless bytes.
|
void |
restart()
HotSwapWatcher 调用 restart()
|
UndertowServer |
setContextPath(String contextPath) |
UndertowServer |
setDevMode(boolean devMode)
设置为 true 时支持热加载,开发环境必配置项。
|
UndertowServer |
setGzipEnable(boolean gzipEnable) |
UndertowServer |
setHost(String host) |
UndertowServer |
setPort(int port) |
UndertowServer |
setResourcePath(String resourcePath) |
void |
start() |
static void |
start(Class<? extends com.jfinal.config.JFinalConfig> jfinalConfigClass) |
static void |
start(Class<? extends com.jfinal.config.JFinalConfig> jfinalConfigClass,
int port,
boolean devMode) |
static void |
start(String jfinalConfigClass) |
static void |
start(String jfinalConfigClass,
int port,
boolean devMode) |
void |
stop() |
protected void |
stopSilently() |
public String version
protected UndertowConfig config
protected io.undertow.servlet.api.DeploymentInfo deploymentInfo
protected io.undertow.servlet.api.DeploymentManager deploymentManager
protected io.undertow.Undertow.Builder builder
protected io.undertow.Undertow undertow
protected volatile boolean started
protected volatile HotSwapWatcher hotSwapWatcher
protected DecimalFormat decimalFormat
protected Consumer<WebBuilder> webBuilder
protected Consumer<UndertowConfig> configConsumer
protected BiConsumer<ClassLoader,io.undertow.servlet.api.DeploymentInfo> onDeployConsumer
protected Consumer<io.undertow.Undertow.Builder> onStartConsumer
protected UndertowServer(UndertowConfig undertowConfig)
public static void start(Class<? extends com.jfinal.config.JFinalConfig> jfinalConfigClass)
public static void start(String jfinalConfigClass)
public static void start(Class<? extends com.jfinal.config.JFinalConfig> jfinalConfigClass, int port, boolean devMode)
public static void start(String jfinalConfigClass, int port, boolean devMode)
public static UndertowServer create(Class<? extends com.jfinal.config.JFinalConfig> jfinalConfigClass)
public static UndertowServer create(String jfinalConfigClass)
public static UndertowServer create(Class<? extends com.jfinal.config.JFinalConfig> jfinalConfigClass, String undertowConfig)
public static UndertowServer create(String jfinalConfigClass, String undertowConfig)
public static UndertowServer create(UndertowConfig undertowConfig)
public void start()
protected void loadCommandLineParameter()
protected boolean notBlank(String str)
protected void doStart()
protected void configHttp()
protected io.undertow.server.HttpHandler configSsl(io.undertow.server.HttpHandler httpHandler)
protected io.undertow.server.HttpHandler configHandler(io.undertow.server.HttpHandler next)
protected io.undertow.server.HttpHandler configGzip(io.undertow.server.HttpHandler pathHandler)
protected void init()
public void stop()
protected void doStop()
throws javax.servlet.ServletException
javax.servlet.ServletExceptionpublic void restart()
protected String getTimeSpent(long startTime)
protected void stopSilently()
public UndertowServer config(Consumer<UndertowConfig> configConsumer)
例子:
UndertowServer
.create(AppConfig.class)
.config( config -> {
config.setHost("0.0.0.0");
config.setSessionTimeout(30 * 60);
})
.start();
public UndertowServer onDeploy(BiConsumer<ClassLoader,io.undertow.servlet.api.DeploymentInfo> onDeployConsumer)
支持 shiro 的例子代码如下:
UndertowServer.create("com.mypackage.AppConfig")
// .addHotSwapClassPrefix("org.apache.shiro.")
.addHotSwapClassPrefix("org.apache.")
.configWeb( builder -> {
builder.addFilter("shiro", "org.apache.shiro.web.servlet.ShiroFilter");
builder.addFilterUrlMapping("shiro", "/*");
})
.onDeploy((classLoader, deploymentInfo) -> {
try {
String classStr = "org.apache.shiro.web.env.EnvironmentLoaderListener";
Class> c = classLoader.loadClass(classStr);
deploymentInfo.addDeploymentCompleteListener((javax.servlet.ServletContextListener)c.newInstance());
} catch (Exception e) {
throw new RuntimeException(e);
}
})
.start();
public UndertowServer onStart(Consumer<io.undertow.Undertow.Builder> onStartConsumer)
例子:
UndertowServer.create(AppConfig.class)
.onStart( builder -> {
builder.setServerOption(UndertowOptions.ALWAYS_SET_KEEP_ALIVE, false);
})
.start();
protected void configJFinalPathKit()
protected void configUndertow()
protected void configJFinalFilter()
protected void configWeb()
public UndertowServer configWeb(Consumer<WebBuilder> webBuilder)
例子:
UndertowServer.create(AppConfig.class)
.configWeb( builder -> {
// 配置 Filter
builder.addFilter("myFilter", "com.abc.MyFilter");
builder.addFilterUrlMapping("myFilter", "/*");
builder.addFilterInitParam("myFilter", "key", "value");
// 配置 Servlet
builder.addServlet("myServlet", "com.abc.MyServlet");
builder.addServletMapping("myServlet", "*.do");
builder.addServletInitParam("myServlet", "key", "value");
// 配置 Listener
builder.addListener("com.abc.MyListener");
// 配置 WebSocket,MyWebSocket 需使用 ServerEndpoint 注解
builder.addWebSocketEndpoint("com.abc.MyWebSocket");
})
.start();
以上代码给出了 Filter、Servlet、Listener、WebSocket 的配置实例,其中 MyWebSocket
需要使用 ServerEndpoint 注解标识其为一个 WebSocket 组件,例如:protected void configSessionPersistenceManager()
public UndertowConfig getUndertowConfig()
public UndertowServer setHost(String host)
public UndertowServer setPort(int port)
public UndertowServer setGzipEnable(boolean gzipEnable)
public UndertowServer setContextPath(String contextPath)
public UndertowServer setResourcePath(String resourcePath)
public UndertowServer setDevMode(boolean devMode)
public boolean isDevMode()
public boolean isStarted()
public UndertowServer addHotSwapClassPrefix(String prefix)
public UndertowServer addSystemClassPrefix(String prefix)
public static void main(String[] args)
Copyright © 2019. All rights reserved.