以编程方式配置嵌入式 undertow 服务器
configure embedded undertow server programmatically
下面的代码允许我创建一个嵌入式 undertow servlet 服务器,我在设置连接器设置的 'max-parameters' 时遇到问题,我理解它的方式 undertow 通常是通过 xml 文件配置的.
public static String initCustomServer_(Servlet servlet,int preferedPort,String servletName,String[] resourceList,String... domainName){
String contextURL = null;
int curPort = preferedPort==-1?9001:preferedPort;
boolean initServ = false;
System.out.println("====servlet running in local mode====");
while(!initServ) {
try{
io.undertow.servlet.api.DeploymentInfo servletBuilder = io.undertow.servlet.Servlets.deployment()
.setClassLoader(servlet.getClass().getClassLoader())
.setContextPath(domainName.length==0?"/":"/"+domainName[0])
.setDeploymentName("test.war")
.addServlets(
io.undertow.servlet.Servlets.servlet(servletName, servlet.getClass()).addMapping("/"+servletName)
)
.setResourceManager(new io.undertow.server.handlers.resource.FileResourceManager(new File("src/dss_core/HTML5/webapp"), 1));
io.undertow.servlet.api.DeploymentManager manager = io.undertow.servlet.Servlets.defaultContainer().addDeployment(servletBuilder);
manager.deploy();
io.undertow.server.HttpHandler servletHandler = manager.start();
io.undertow.server.handlers.PathHandler path = io.undertow.Handlers.path(io.undertow.Handlers.redirect(domainName.length==0?"/":"/"+domainName[0]))
.addPrefixPath(domainName.length==0?"/":"/"+domainName[0], servletHandler);
io.undertow.Undertow server = io.undertow.Undertow.builder()
.addHttpListener(curPort, "localhost")
.setHandler(path)
.build();
server.start();
initServ = true;
contextURL = "http://localhost:"+curPort+(domainName.length==0?"":"/"+domainName[0])+"/"+servletName;
} catch (Exception ex) {
//creation of server at certain port fails therefore try again on another port
System.err.println(" server unable to initialize :" + ex.getMessage());
ex.printStackTrace();
curPort++;
}
}
return contextURL;
}
而不是像下面那样使用 xml 我如何通过嵌入式 java 代码更改 'max-parameter' 等配置?
<server name="default-server">
<http-listener name="default" socket-binding="http" max-parameters="5000"/>
发现 here 是我可以通过 xml 配置的东西列表 我如何通过 java 代码设置它们?
更新 1:是的,在 io.undertow.UndertowOptions 中找到了一些选项,但是这不起作用,因为它被声明为最终版本,现在怎么办?
io.undertow.UndertowOptions.MAX_PARAMETERS = 10000;
经过数小时的研究和反复试验,我终于明白了,我的第一个想法是简单地获取代码并自己编译,不利的一面是我必须下载所有源代码然后编译它,这被证明是一些麻烦,在看到无休止的依赖关系和数小时下载他们的源代码后,我决定退出。配置服务器看起来像这样
io.undertow.Undertow server = io.undertow.Undertow.builder()
.addHttpListener(curPort, "localhost")
.setHandler(path)
.setServerOption(io.undertow.UndertowOptions.MAX_PARAMETERS, 10000)
.setServerOption(io.undertow.UndertowOptions.OPTION2, Value2)
.build();
setServerOption
方法和 io.undertow.UndertowOptions
class 终于说得通了,可惜 undertow 不是很流行,周围没有太多示例代码,我希望我能帮助任何想要的人走undertow的嵌入式之路
下面的代码允许我创建一个嵌入式 undertow servlet 服务器,我在设置连接器设置的 'max-parameters' 时遇到问题,我理解它的方式 undertow 通常是通过 xml 文件配置的.
public static String initCustomServer_(Servlet servlet,int preferedPort,String servletName,String[] resourceList,String... domainName){
String contextURL = null;
int curPort = preferedPort==-1?9001:preferedPort;
boolean initServ = false;
System.out.println("====servlet running in local mode====");
while(!initServ) {
try{
io.undertow.servlet.api.DeploymentInfo servletBuilder = io.undertow.servlet.Servlets.deployment()
.setClassLoader(servlet.getClass().getClassLoader())
.setContextPath(domainName.length==0?"/":"/"+domainName[0])
.setDeploymentName("test.war")
.addServlets(
io.undertow.servlet.Servlets.servlet(servletName, servlet.getClass()).addMapping("/"+servletName)
)
.setResourceManager(new io.undertow.server.handlers.resource.FileResourceManager(new File("src/dss_core/HTML5/webapp"), 1));
io.undertow.servlet.api.DeploymentManager manager = io.undertow.servlet.Servlets.defaultContainer().addDeployment(servletBuilder);
manager.deploy();
io.undertow.server.HttpHandler servletHandler = manager.start();
io.undertow.server.handlers.PathHandler path = io.undertow.Handlers.path(io.undertow.Handlers.redirect(domainName.length==0?"/":"/"+domainName[0]))
.addPrefixPath(domainName.length==0?"/":"/"+domainName[0], servletHandler);
io.undertow.Undertow server = io.undertow.Undertow.builder()
.addHttpListener(curPort, "localhost")
.setHandler(path)
.build();
server.start();
initServ = true;
contextURL = "http://localhost:"+curPort+(domainName.length==0?"":"/"+domainName[0])+"/"+servletName;
} catch (Exception ex) {
//creation of server at certain port fails therefore try again on another port
System.err.println(" server unable to initialize :" + ex.getMessage());
ex.printStackTrace();
curPort++;
}
}
return contextURL;
}
而不是像下面那样使用 xml 我如何通过嵌入式 java 代码更改 'max-parameter' 等配置?
<server name="default-server">
<http-listener name="default" socket-binding="http" max-parameters="5000"/>
发现 here 是我可以通过 xml 配置的东西列表 我如何通过 java 代码设置它们?
更新 1:是的,在 io.undertow.UndertowOptions 中找到了一些选项,但是这不起作用,因为它被声明为最终版本,现在怎么办?
io.undertow.UndertowOptions.MAX_PARAMETERS = 10000;
经过数小时的研究和反复试验,我终于明白了,我的第一个想法是简单地获取代码并自己编译,不利的一面是我必须下载所有源代码然后编译它,这被证明是一些麻烦,在看到无休止的依赖关系和数小时下载他们的源代码后,我决定退出。配置服务器看起来像这样
io.undertow.Undertow server = io.undertow.Undertow.builder()
.addHttpListener(curPort, "localhost")
.setHandler(path)
.setServerOption(io.undertow.UndertowOptions.MAX_PARAMETERS, 10000)
.setServerOption(io.undertow.UndertowOptions.OPTION2, Value2)
.build();
setServerOption
方法和 io.undertow.UndertowOptions
class 终于说得通了,可惜 undertow 不是很流行,周围没有太多示例代码,我希望我能帮助任何想要的人走undertow的嵌入式之路