空上下文字符串警告

时间:2013-11-04 13:17:08

标签: java jetty

我尝试配置一个jetty上下文(以编程方式)来使用服务于根上下文的servlet。

对于上下文路径,我设置“/”和servlet映射“/ *”。这完全按我想要的方式工作,但Jetty抱怨(警告)有关以'/'结尾的上下文路径。当我将上下文路径设置为“”(空字符串)时,它会导致关于空字符串的警告。

关于此问题的documentation section of Jetty说明:

  

请注意   Java Servlet Specification 2.5不鼓励空的上下文路径字符串,Java Servlet Specification 3.0有效地禁止它。

Jetty源的部分是:

public void setContextPath(String contextPath)
    {
    if (contextPath == null)
        throw new IllegalArgumentException("null contextPath");

    if (contextPath.endsWith("/*"))
    {
        LOG.warn(this+" contextPath ends with /*");
        contextPath=contextPath.substring(0,contextPath.length()-2);
    }
    else if (contextPath.endsWith("/"))
    {
        LOG.warn(this+" contextPath ends with /");
        contextPath=contextPath.substring(0,contextPath.length()-1);
    }

    if (contextPath.length()==0)
    {
        LOG.warn("Empty contextPath");
        contextPath="/";
    }

    _contextPath = contextPath;

    if (getServer() != null && (getServer().isStarting() || getServer().isStarted()))
    {
        Handler[] contextCollections = getServer().getChildHandlersByClass(ContextHandlerCollection.class);
        for (int h = 0; contextCollections != null && h < contextCollections.length; h++)
            ((ContextHandlerCollection)contextCollections[h]).mapContexts();
    }
}

所以问题是,我应该设置什么上下文路径才能映射到上下文的根。目前一切正常但是通过规范或Jetty警告设置了禁止的上下文路径,我想我需要一些不同的东西。

2 个答案:

答案 0 :(得分:1)

文档说

  

上下文路径是用于选择的URL路径的前缀   传入请求的传递上下文。通常是一个URL   在Java servlet服务器中的格式   http://hostname.com/contextPath/servletPath/pathInfo,每个人   路径元素可以是零个或多个/分离的元素。 如果有的话   没有上下文路径,上下文被称为根上下文。   根上下文必须配置为“/”,但报告为   servlet API getContextPath()方法的空字符串。

所以,我猜你可以使用“/”

http://www.eclipse.org/jetty/documentation/current/configuring-contexts.html

答案 1 :(得分:1)

我注意到(感谢@Ozan!)在设置上下文路径为“”的情况下使用“/”时,我试图添加一个bug请求。所以我认为这是一个错误,是的。此问题已存在bug report,它已在9.0.6中修复,自2013年9月30日起可用。因此,我刚刚升级了码头版本,警告现已消失。

Jetty代码现在检查路径的长度是否大于1:

public void setContextPath(String contextPath)
{
    if (contextPath == null)
        throw new IllegalArgumentException("null contextPath");

    if (contextPath.endsWith("/*"))
    {
        LOG.warn(this+" contextPath ends with /*");
        contextPath=contextPath.substring(0,contextPath.length()-2);
    }
    else if (contextPath.length()>1 && contextPath.endsWith("/"))
    {
        LOG.warn(this+" contextPath ends with /");
        contextPath=contextPath.substring(0,contextPath.length()-1);
    }

    if (contextPath.length()==0)
    {
        LOG.warn("Empty contextPath");
        contextPath="/";
    }

    _contextPath = contextPath;

    if (getServer() != null && (getServer().isStarting() || getServer().isStarted()))
    {
        Handler[] contextCollections = getServer().getChildHandlersByClass(ContextHandlerCollection.class);
        for (int h = 0; contextCollections != null && h < contextCollections.length; h++)
            ((ContextHandlerCollection)contextCollections[h]).mapContexts();
    }
}