Java servlets 3.1应用程序中侦听器的IllegalArgumentException加载属性

Java servlets 3.1应用程序中侦听器的IllegalArgumentException加载属性,java,listener,servletcontextlistener,Java,Listener,Servletcontextlistener,我有一个ServletContextListener,当它试图从文件加载属性时,它会给我一个IllegalArgumentException。我的代码如下: private final static Properties properties = new Properties(); @Override public void contextInitialized(ServletContextEvent sce) { ServletContext sc = sce.ge

我有一个
ServletContextListener
,当它试图从文件加载属性时,它会给我一个
IllegalArgumentException
。我的代码如下:

private final static Properties properties = new Properties(); 

@Override
public void contextInitialized(ServletContextEvent sce) {        
    ServletContext sc = sce.getServletContext();  

    try {                        
        // Load MyProject's properties file.
        properties.load(sc.getResourceAsStream(sc.getInitParameter("myProjectPropsFilePath")));                                        
    } 
    catch(IOException e) {                                     
        Utils.printStackTrace(e);
    }

    // Write properties to ServletContext.
    sc.setAttribute("properties", properties);
}
正在从
web.xml
检索上下文参数,但我不理解为什么在第行抛出
IllegalArgumentException

properties.load(sc.getResourceAsStream(sc.getInitParameter(“myProjectPropsFilePath”))

stacktrace如下所示:

private final static Properties properties = new Properties(); 

@Override
public void contextInitialized(ServletContextEvent sce) {        
    ServletContext sc = sce.getServletContext();  

    try {                        
        // Load MyProject's properties file.
        properties.load(sc.getResourceAsStream(sc.getInitParameter("myProjectPropsFilePath")));                                        
    } 
    catch(IOException e) {                                     
        Utils.printStackTrace(e);
    }

    // Write properties to ServletContext.
    sc.setAttribute("properties", properties);
}
08-Jun-2015 12:52:07.439严重[http-apr-8080-exec-34]org.apache.catalina.core.StandardContext.listenerStart异常向类myProject.listener.SetPropertiesServletContextListener的侦听器实例发送上下文初始化事件
java.lang.IllegalArgumentException:资源路径[\WEB-INF\properties\MyProject.properties]无效
位于org.apache.catalina.webresources.StandardRoot.validate(StandardRoot.java:237)
位于org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:199)
位于org.apache.catalina.webresources.StandardRoot.getResource(StandardRoot.java:193)
位于org.apache.catalina.core.ApplicationContext.getResourceAsStream(ApplicationContext.java:559)
位于org.apache.catalina.core.ApplicationContextFacade.getResourceAsStream(ApplicationContextFacade.java:209)
在myProject.listener.SetPropertiesServletContextListener.contextInitialized(SetPropertiesServletContextListener.java:26)
位于org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4738)
位于org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5158)
位于org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
位于org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726)
位于org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:702)
位于org.apache.catalina.core.StandardHost.addChild(StandardHost.java:697)
位于org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:579)
位于org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:455)
位于org.apache.catalina.startup.HostConfig.check(HostConfig.java:1554)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:483)
位于org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
位于com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
位于com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
位于org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1428)
位于org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:885)
位于org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:343)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:615)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74)
位于org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516)
位于org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1015)
位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652)
位于org.apache.coyote.http11.http11aprotocol$Http11ConnectionHandler.process(http11aprotocol.java:277)
位于org.apache.tomcat.util.net.aprendop$SocketProcessor.doRun(aprendop.java:2451)
位于org.apache.tomcat.util.net.aprendop$SocketProcessor.run(aprendop.java:2440)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
在java.lang.Thread.run(Thread.java:744)

有什么想法吗?我使用的是ApacheTomcat8.0.3

web.xml
的适当部分是:

<!-- Listeners and parameters. -->
<listener>
    <description>SetPropertiesServletContextListener</description>
    <listener-class>myProject.listener.SetPropertiesServletContextListener</listener-class>
</listener>
<context-param>
    <param-name>myProjectPropsFilePath</param-name>
    <param-value>\WEB-INF\properties\myProject.properties</param-value>
</context-param>

SetPropertiesServletContextListener
myProject.listener.SetPropertiesServletContextListener
myProjectPropsFilePath
\WEB-INF\properties\myProject.properties

路径应包含/作为分隔符,因为/WEB-INF/在windows和linux中保持不变。您可能在web.xml中有错误的值。根据,您总是使用/。 这是错误的:
\WEB-INF\properties\myProject.propert