尝试访问web.xml获取NoInitialContextException

时间:2016-02-08 06:17:25

标签: java eclipse tomcat8

我正在为课程构建一个Web应用程序(是的,这是一个家庭作业)。我正在使用Eclipse和Tomcat 8.我有一个服务工厂的代码:

package com.OrderOnline.model.service.factory;


import javax.naming.Context;
import javax.naming.InitialContext;

import com.OrderOnline.model.service.interfaces.IService;

public class ServiceFactory
{
    public IService getService(String name) throws Exception
    {
        try
        {
            Class<?> newClass = Class.forName(getImplName(name));
            return (IService)newClass.newInstance();
        }
        catch(Exception e)
        {
            throw new Exception(name);
        }
    }

    private String getImplName(String name) throws Exception
    {
        Context initCtx = new InitialContext();
        Context envCtx = (Context) initCtx.lookup("java:comp/env");

        String lookupClass = (String) envCtx.lookup(name);
        return lookupClass;
    }
}

我希望这可以查看位于OrderOnline / WebContent / WEB-INF / web.xml的web.xml文件,以了解以下内容:

  <env-entry>
    <env-entry-name>IUserSvc</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>com.OrderOnline.model.service.interfaces.IUserSvc</env-entry-value>
  </env-entry>

相反,我在运行此行时会抛出异常:

Context envCtx = (Context) initCtx.lookup("java:comp/env");

例外是:

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial

我是非常新的,所以我可能会错过一些重要的信息来帮助我,我将非常乐意提供所需的更多信息。我感谢您提供的任何帮助,以帮助我从web.xml文件中读取env-entry-value。

1 个答案:

答案 0 :(得分:0)

您需要一个初始上下文工厂,如this answer中所述。

    System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
              "org.apache.naming.java.javaURLContextFactory");