我有一个独特的场景,我使用servlet通过对数据库的调用动态地输出到浏览器。内容类型是RSS-XML,因此它可以从数据库更新RSS提要xml。这工作得很好。但是,我也有一个可以作为webservice @WebService访问的EJB。这样,它的所有公共方法都可以通过SOAP事务访问。我也成功地实现了这一点。因此,我通过Java-WS/SOAP更新数据库,我的问题是我没有同时更新servlet的doGet(),这意味着它没有更新Servlet调用--即使数据库已经成功更新。
如何从EJB强制doGet()调用我的servlet?更新这些HTML/XML标记的唯一方法是调用Servlet,从而调用doGet()方法。
谢谢。
为清楚起见进行编辑:我的Servlet当前是作为URL从jsp页面访问的。它被引用为人们可以点击的链接。一旦人们点击它,它就会很好地更新,但因为它是一个RSS提要,所以当我向数据库添加数据时,我也希望能够调用/更新提要。到目前为止,我可以添加数据,但是提要没有更新,因为我不知道如何在业务逻辑中调用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 (而不是浏览器)运行这些编写器调用。
发布于 2011-11-15 07:26:30
rssBean.arrayUpdates()每次都需要查询数据库并返回结果。如果它返回一些预先存在的数据,那么这将不起作用。
单击链接并访问servlet后,servlet将从数据库中提取信息并将结果提供给客户端。
当您通过web服务更新数据时,不需要调用servlet来确保数据更新,正如您所期望的那样。
HTTP是请求/响应。一旦向客户端提供了响应,他们就必须刷新页面或单击链接来刷新内容。
另请参阅高速缓存控制http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html的headers
https://stackoverflow.com/questions/8129471
复制相似问题