我有一个独特的场景,我使用servlet通过调用数据库动态输出到浏览器。内容类型是RSS-XML,因此它可以从数据库更新RSS提要xml。这工作正常。但是,我还有一个可以作为Web服务@WebService访问的EJB。因此,所有公共方法都可以通过SOAP事务访问。我也成功实现了这一点。因此我通过Java-WS / SOAP更新数据库,我的问题是我没有同时更新servlet的doGet(),这意味着它不会更新Servlet调用 - 即使数据库已成功更新。
如何从EJB强制对我的servlet执行doGet()调用?这些HTML / XML标记更新的唯一方法是调用Servlet,因此调用doGet()方法。
谢谢。
为清晰起见编辑:我的Servlet当前是作为URL从jsp页面访问的。它被引用为人们可以点击的链接。一旦人们点击它就会更新,但由于它是RSS提要,我还希望能够在向数据库添加数据时调用/更新提要。到目前为止,我可以添加数据但是Feed没有更新,因为我不知道如何在业务逻辑中调用doGet()。
这就是我的servlet的相关部分:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Statuses = rssbean.arrayUpdates();
XMLOutputFactory factory = XMLOutputFactory.newInstance();
try {
XMLStreamWriter writer = factory.createXMLStreamWriter(response.getOutputStream());
response.setContentType("application/rss+xml; charset=UTF-8");
writer.writeStartDocument();
writer.writeStartElement("rss");
writer.writeAttribute("version", "2.0");
writer.writeStartElement("channel");
for(int i = 0; i < (Statuses.length); i++){
writer.writeStartElement("item");
writer.writeStartElement("title");
writer.writeCharacters(Statuses[i]);
writer.writeEndElement();
writer.writeStartElement("link");
writer.writeCharacters("http://www.link.com");
writer.writeEndElement();
writer.writeStartElement("description");
writer.writeEndElement();
writer.writeEndElement();
正如您所见,我正在通过doGet()动态创建此.rss文件。当你链接到它时,这工作正常,但我不知道如何从我的EJB(而不是浏览器)运行这些编写器调用。
答案 0 :(得分:0)
您的rssBean.arrayUpdates()需要查询数据库并每次都返回结果。如果它返回一些预先存在的数据,那就不行了。
一旦点击链接并访问servlet,servlet就会从数据库中提取信息并将结果提供给客户端。
当您通过Web服务更新数据时,无需调用servlet以确保它已更新,正如您所希望的那样。
HTTP是请求/响应。一旦给客户端做出响应,他们就必须刷新页面或点击链接刷新内容。
另请参阅缓存控制的http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
HTTP标头