我是java的新手,请原谅我的蹩脚问题:)
我正在尝试在Java NetBeans 6.1中构建一个Web服务,但我在配置参数方面遇到了一些麻烦(比如.net中的.settings)。
在java Web服务中保存和访问此类设置的正确方法是什么。
有没有办法在web方法中从web.xml读取上下文参数?
如果没有用于存储路径名等配置变量的替代方法?
谢谢
答案 0 :(得分:4)
有没有办法在web方法中从web.xml读取上下文参数?
不,使用开箱即用的功能并不容易。 Web服务系统(JAX-WS)对Servlet引擎(Tomcat)的了解很少。它们被设计成孤立的。
如果要使用上下文参数,则Web服务类需要实现ServletContextListener并在初始化参数中检索所需的参数(或保存上下文以供以后使用)。由于Servlet引擎和JAX-WS每个都有不同的对象实例,因此您需要将值保存到静态成员。
正如Lars所提到的,Properties API或JNDI是您最好的赌注,因为它们包含在Java中,并且是众所周知的检索选项的方法。使用Classloader.getResource()检索Web上下文中的Properties。
答案 1 :(得分:3)
如果您使用的是servlet,则可以在web.xml中配置参数:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
这些属性将在ServletConfig对象中传递给servlet的“init”方法。
另一种方法是使用
读取系统的环境变量System.getProperty(String name);
但是除了小程序和测试之外,不建议这样做。
如果要使用“.properties”文件,还有Properties API。 http://java.sun.com/javase/6/docs/api/java/util/Properties.html
最后,我认为在开发现代Web服务应用程序时,使用JNDI查找配置非常常见,Netbeans和app容器对此有很好的支持。谷歌吧。
答案 2 :(得分:1)
MessageContext ctx = MessageContext.getCurrentThreadsContext();
Servlet wsServlet = (Servlet) ctx.getProperty(HTTPConstants.MC_HTTP_SERVLET);
ServletConfig wsServletConfig = wsServlet.getServletConfig();
ServletContext wsContext = wsServletConfig.getServletContext();
答案 3 :(得分:0)
我认为正确答案是......一如既往......&#34;它取决于&#34;。如果您只是使用单个服务器运行一个小实现,那么它很大程度上取决于您要使用的WS技术。有些使servlet上下文和context-params易于访问,而其他人则没有,在这种情况下,从属性文件访问属性可能更容易。您是否要在负载平衡的环境中拥有一系列服务器,并且流量较高,在更新所有服务器的设置时必须立即进行集中处理,以防故障转移?如果是这种情况那么你真的想更新服务器场中所有服务器的配置文件吗?如何将这些更改同步到所有这些服务器?对你有用吗?如果您在配置文件中存储路径名,那么您可能打算能够在某些主机出现故障时将路径名更新到另一台主机(&#34; \ file_server_host \ doc_store&#34; - &gt;&#34; \ backup_file_server_host \ doc_store&#34;)在这种情况下,实际上可能更好地使用DNS进行故障转移。变量太多了。这真的取决于设计;需要;应用程序的规模。
为简单起见,如果您只想要一个简单的.settings文件,那么您需要一个.properties文件。以下是我最近在项目中使用此示例的示例:https://github.com/sylnsr/docx4j-ws/blob/master/src/docx4j/TextSubstitution.java