Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式配置嵌入式undertow服务器_Java_Undertow - Fatal编程技术网

Java 以编程方式配置嵌入式undertow服务器

Java 以编程方式配置嵌入式undertow服务器,java,undertow,Java,Undertow,下面的代码允许我创建嵌入式undertow servlet服务器,我在设置连接器设置的“最大参数”时遇到问题,我理解undertow通常是通过xml文件配置的 public static String initCustomServer_(Servlet servlet,int preferedPort,String servletName,String[] resourceList,String... domainName){ String contextURL = null;

下面的代码允许我创建嵌入式undertow servlet服务器,我在设置连接器设置的“最大参数”时遇到问题,我理解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;
}
如何通过嵌入的java代码更改配置,例如“max parameter”,而不是使用下面的xml

           <server name="default-server">
            <http-listener name="default" socket-binding="http" max-parameters="5000"/>

经过数小时的研究和反复试验,我终于得到了它,我的第一个想法是简单地获取代码并自己编译,消极的一面是我必须下载所有的源代码,然后再编译,这证明是一些麻烦,在看到无休止的依赖性和下载源代码的数小时后,我决定退出。配置服务器时如下所示

                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.undertows.UndertowOptions
类终于有了意义,可惜undertows不是很受欢迎,也没有太多示例代码,我希望我能帮助任何希望走undertows嵌入式道路的人

                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();