【问题标题】:How a Spring WebApp manages different clients' request?Spring WebApp 如何管理不同客户端的请求?
【发布时间】:2011-08-29 21:16:19
【问题描述】:

可能有很多人看到这个问题会微笑......

这是我的问题。 我有一个既作为客户端又作为服务器的 Spring 3 Web 应用程序。它从客户端“C”获取一些 XML 数据,处理它们,然后将它们发送到服务器“S”。 来自 C 的输入 XML 必须针对模式(例如“c.xsd”)进行验证,而到 S 的输出 XML 必须针对不同的模式(例如“s.xsd”)进行验证。

我正在使用 jaxb2 进行编组和解组。

在我读到的文档中,可以为 [un]/marshaller 设置“模式”属性。

因此,我需要在获得输入时使用 a.xsd 进行验证,在生成输出时需要使用 b.xsd...问题如下: 当我将验证模式从 c,xsd 切换到 s.xsd 时(在处理来自 C 的请求后产生输出),我是否更改了服务器的状态?换句话说,如果我在处理来自 C 的第一个请求时收到来自客户端 C2 的第二个请求,我会尝试针对 s.xsd 验证 C2 输入吗?应用程序会自动将 C2 请求放在不同的线程上吗?如果没有,我该如何配置spring来做到这一点?

非常感谢!

【问题讨论】:

    标签: spring validation web-applications jaxb spring-ws


    【解决方案1】:

    我会试一试:

    必须验证来自 C 的输入 XML 针对模式(例如“c.xsd”)

    您可以通过在 Unmarshaller 上设置架构 (c.xsd) 来做到这一点。

    而输出到 S 的 XML 必须是 针对不同的验证 (例如“s.xsd”)。

    您可以通过在 Marshaller 上设置架构 (s.xsd) 来做到这一点。

    当我切换验证模式时 从 c,xsd 到 s.xsd(产生一个 处理请求后的输出 C),我是否改变了状态 服务器?

    不,因为 Unmarshaller 始终使用 c.xsd,而 Marshaller 始终使用 s.xsd。

    由于 Marshaller 和 Unmarshaller 不是线程安全的,您必须确保不要在线程之间共享它们。

    【讨论】:

    • 好的,我明白了。因为我必须响应客户端 C,所以我需要一个使用 c.xsd 的编组器,但这并没有太大改变。我仍然需要两个不同的 jaxb bean 实例,问题就解决了。切换到线程管理问题,从您的帖子中我了解以下内容:服务器管理新线程中的每个请求,但我必须小心将共享资源设置为线程安全,对吗?如果我不这样做,我将使用有状态的服务器,以不同的方式管理客户端的请求。
    猜你喜欢
    • 1970-01-01
    • 2013-01-09
    • 2013-11-17
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多