我使用java,spring-ws并拥有一个Web服务。
每次运行时都会向我的Web服务发出新请求,我希望一切都重置,所有变量都是新的和空的。所以我在我的web服务的application-context.xml中添加了“scope = request”,但是我仍然保留了我之前请求中保存的变量值(即使不是静态变量)。
我的Web服务(作为jar文件)被用作另一个主要Web项目的插件。我从这个主Web项目的web.xml 文件中引用了我的Web服务;
<servlet>
<servlet-name>mws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/resources/webservice/applicationContext-WebService.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
同样在这个web.xml中我为主项目定义了另一个调度程序servlet,是否可能创建2个弹簧容器并且它们会干扰?
这就是我在web服务的appcontext.xml文件中定义范围的方法:
<bean id="infService" class="com.ws.im.InfService" scope="request">
<property name="webServiceConfiguration" ref="wsConfiguration" />
<property name="properties">
<bean class="com.ws.PropertyResource">
<property name="resource" value="/WEB-INF/clientspecific/Inf.properties" />
</bean>
</property>
</bean>
所以我猜每次运行我的主Web项目时,它都会在我的web服务的app context.xml文件中加载一次,无论我改变其范围它都不起作用,因为主项目定义范围?我可以在上面定义servlet的范围吗?或者这个想法是完全错误的,我在我的网络服务配置xml中做错了什么?
感谢
答案 0 :(得分:3)
我认为你可能在其他地方出错了,因为你的配置看起来很好。
您可以在com.ws.im.InfService
的构造函数中添加一些代码:
java.util.logging.Logger.getAnonymousLogger().info(
"Instantiated, identity [" + System.identityHashCode(this) +"]");
如果请求范围正确,则应为每个请求打印不同的标识字符串。
修改强>
需要将<aop:scoped-proxy/>
添加到bean定义