我对这个整个servlet的东西很新,所以如果我混合或使用不正确/混淆的事情,请纠正我。然而,我使用Jax-Rs(泽西岛)在Java中编写博客Ping Server,并且我面临着一个接受REST输入的一个servlet类的问题,以及列出相同内容的另一个servlet类。

现在他们通过看起来像这样的类共享他们的对象:

public class BlogPingUtils {

    private static final String LIST_OF_CHANGES = "listOfChanges";

    public static List<PingInfo> getListOfChanges(ServletContext context) {
        List<PingInfo> listOfChanges = (List<PingInfo>)context.getAttribute(LIST_OF_CHANGES);
        if(listOfChanges == null) listOfChanges = new ArrayList<PingInfo>();

        return listOfChanges;
    }

    public static void setListOfChanges(ServletContext context, List<PingInfo> listOfChanges) {
        context.setAttribute(LIST_OF_CHANGES, listOfChanges);
    }
}
.

这是在小规模的开发环境中的作用,但它感觉肮脏,由于并发问题,可能不会在重型生产环境中工作。它也不是非常灵活的。我想做的是有一个接口,它将有读写数据的方法。然后我会将一个类的对象注入将此接口施加到这两个服务器中,以便它们实际上使用与数据交互的相同对象。然后将由同步列表或数据库事务或其他内容备份。

是什么首选方法?是否可以?我的web.xml现在非常简单,看起来如此:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
  <display-name>Blog Ping</display-name>

  <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.vrutberg.blogping</param-value>
    </init-param>

    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>
.

有帮助吗?

解决方案

而不是静态类,我将与您的getter和setter设计一个接口,而不是创建一个实现类。

然后,我将使用两个servlet(如JNDI)可见的线程安全中央存储库来注册Singleton(或池)实现类。

servlet将中央存储库查询并“转换为”接口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top