Я довольно новичок во всем этом вопросе о сервлетах, поэтому, пожалуйста, поправьте меня, если я смешиваю или использую неправильные / запутанные термины для вещей.Однако я пишу ping-сервер блога на Java с использованием JAX-RS (Джерси), и я столкнулся с проблемой, когда у меня есть один класс сервлетов, который принимает ввод REST, и другой класс сервлетов, который перечисляет тот же контент.
Прямо сейчас они делятся своими объектами через класс, который выглядит следующим образом:
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>