我正在为课程构建一个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。
答案 0 :(得分:0)
您需要一个初始上下文工厂,如this answer中所述。
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.naming.java.javaURLContextFactory");