Jetty嵌入开发路径问题

我都知道在使用jetty在嵌入开发的时候使用 ContextHandler ,通过 setContextPath 设置访问路径,通过 setHandler 来使用自定义的handler.最终设置到 Server 中,服务就可以跑起来了。

官方的栗子

       Server server = new Server(8080);
        ContextHandler context = new ContextHandler("/");
        context.setContextPath("/");
        context.setHandler(new HelloHandler("Root Hello"));

        ContextHandler contextFR = new ContextHandler("/fr");
        contextFR.setHandler(new HelloHandler("Bonjoir"));

        ContextHandler contextIT = new ContextHandler("/it");
        contextIT.setHandler(new HelloHandler("Bongiorno"));

        ContextHandler contextV = new ContextHandler("/");
        contextV.setVirtualHosts(new String[] { "127.0.0.2" });
        contextV.setHandler(new HelloHandler("Virtual Hello"));
        contextV.setInitParameter("dirAllowed", "false");

        ContextHandlerCollection contexts = new ContextHandlerCollection();
        contexts.setHandlers(new Handler[] { context, contextFR, contextIT,
                contextV });

        server.setHandler(contexts);

        server.start();
        server.join();

开始

细心的朋友可能在使用中发现,明明我定义的路径是 /user ,但是在访问的时候却进行了一次302跳转,然后最终变成了 /user/ ,经过调试发现,在 ContextHandler 这个类中发现下面这个有趣的问题

        // Are we not the root context?
        // redirect null path infos
        if (!_allowNullPathInfo && _contextPath.length() == target.length() && _contextPath.length()>1)
        {
            // context request must end with /
            baseRequest.setHandled(true);
            if (baseRequest.getQueryString() != null)
                response.sendRedirect(URIUtil.addPaths(baseRequest.getRequestURI(),URIUtil.SLASH) + "?" + baseRequest.getQueryString());
            else
                response.sendRedirect(URIUtil.addPaths(baseRequest.getRequestURI(),URIUtil.SLASH));
            return false;
        }

注释已经写了, context request must end with /
原来jetty会自动得帮你把在请求后面加一个 / ,然后再跳转到你的路径上面,于是 /user 的访问就变成了 /user/

最后

那么如何解决这个问题呢?很简单,只需要调用 setAllowNullPathInfo 这个方法,并且设置为 true 即可
那么jetty 路径自动增加/的问题,也就是jetty自动302的问题就算解决啦!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,908评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,948评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,227评论 25 708
  • 我打算写“论一切”,忽然想起来的,就像《素女经》的田小明。不过田小明以自杀收场,我不想变成那样。应该不会变成那样吧...
    Stupidity阅读 274评论 0 0
  • 九宫,是古代汉族天文学家将天宫以井字划分乾宫、坎宫、艮宫、震宫、中宫、巽宫、离宫、坤宫、兑宫九个等份,在晚间从地上...
    天马酒仙阅读 4,825评论 0 2