spring或servlet请求范围问题

时间:2011-06-01 11:55:55

标签: java web-services spring servlets scope

我使用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中做错了什么?

感谢

1 个答案:

答案 0 :(得分:3)

我认为你可能在其他地方出错了,因为你的配置看起来很好。

您可以在com.ws.im.InfService的构造函数中添加一些代码:

java.util.logging.Logger.getAnonymousLogger().info(
    "Instantiated, identity [" + System.identityHashCode(this) +"]");

如果请求范围正确,则应为每个请求打印不同的标识字符串。

修改

需要将<aop:scoped-proxy/>添加到bean定义