【问题标题】:Servlet doesn't refresh html page [duplicate]Servlet不刷新html页面[重复]
【发布时间】:2016-09-04 10:35:12
【问题描述】:

这是我的servlet的目录结构:

+---build
|   \---classes
+---Files
|       esoutput.json
|       newOutput.xml
|       newoutputfinal.xml
|       output.xml
|       
+---src
|   \---com
|       \---example
|               AddQueryTag.java
|               ElasticsearchClient.java
|               JsonToXml.java
|               mainClass.java
|               output.xml
|               SaveJsonContent.java
|               SaxonImplementation.java
|               
+---target
|   +---classes
|   |   +---com
|   |   |   \---example
|   |   |           AddQueryTag.class
|   |   |           ElasticsearchClient.class
|   |   |           JsonToXml.class
|   |   |           mainClass.class
|   |   |           output.xml
|   |   |           SaveJsonContent.class
|   |   |           SaxonImplementation.class
|   |   |           
|   |   \---META-INF
|   |       |   MANIFEST.MF
|   |       |   
|   |       \---maven
|   |           \---com.example
|   |               \---PIBTest1
|   |                       pom.properties
|   |                       pom.xml
|   |                       
|   \---test-classes
\---WebContent
    |   firstPage.html
    |   
    +---META-INF
    |       MANIFEST.MF
    |       
    \---WEB-INF
        |   resultfile.html
        |   web.xml
        |   
        +---lib
        \---src

我的主 servlet 类(mainClass.java)如下所示:

  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    //Some processing code goes here
    //My resultfile.html gets updated and finally I use Request Dispatcher to forward it 

    request.getServletContext().getRequestDispatcher("/WEB-INF/resultfile.html")
        .forward(request, response);

  }

这是一个搜索应用程序。用户在“firstpage.html”上输入查询并返回结果。

当我第一次启动我的网络应用程序时,“firstpage.html”会按照我在 web.xml 文件中的配置启动。所以当我第一次启动我的网络应用程序时,它会显示“firstpage.html”,然后用户输入查询并创建“resultfile.html”。但是网络应用程序显示一个空白页面。 我检查了“resultfile.html”并正确生成了文件。所以我的代码没有问题。我希望能够转发我生成的“resultfile.html”页面。我在这里做错了吗?我是 Servlet 的新手。谢谢大家。

我正在使用 Tomcat V7.0 和 eclipse。

更新:当用户返回“firstpage.html”并输入新查询时,“resultfile.html”会显示旧查询的结果。 “resultfile.html”不显示更新的信息。

更新 2:我的“resultfile.html”是由 SaxonImplementation 类生成的。该类的代码如下:

package com.example;

import java.io.File;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class SaxonImplementation {

  public void simpleTransform(String sourcePath, String xsltPath,
      String resultDir) {
    System.setProperty("javax.xml.transform.TransformerFactory",
        "net.sf.saxon.TransformerFactoryImpl");
    TransformerFactory tFactory = TransformerFactory.newInstance();
    try {
      Transformer transformer = tFactory
          .newTransformer(new StreamSource(new File(xsltPath)));
      transformer.transform(new StreamSource(new File(sourcePath)),
          new StreamResult(new File(resultDir)));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

}

我从 mainClass.java 的 doGet 方法调用这个类,以将 XML 转换为 HTML 文件。

【问题讨论】:

  • @BalusC 嗨 BalusC,我没有收到 FileNotFoundException。我不认为这是一个重复的问题。
  • 问题可能不同,但答案绝对适用于当前问题。
  • @BalusC 所以这意味着这不是一个重复的问题,我已经得到了我正在寻找的问题的不同答案。

标签: java tomcat servlets


【解决方案1】:

我不知道为什么结果文件显示为空白。有可能是服务器缓存问题,但我不知道。为此,我建议手动编辑文件和/或手动查看它。即使文件可能正确,您也需要确定系统是在写入空白文件还是仅打印空白页。 感谢您的更新。在您将文件发送到客户端之前,文件未完全写入,或者存在服务器缓存问题,因为这些文件不会经常更改。请确保flush 和close 已在您的FileWriter 或FileOutputStream 上完成(您用于写信至resultfile.html)在您根据请求致电forward .如果您确定这已经发生,那么它一定是缓存问题。所以我建议手动阅读resultfile 并将其写入response 而不是forwarding。

话虽如此,我认为您需要更改软件的设计以更高效地工作并确保多用户安全。写入共享的 resultsfile.html 不会实现多用户安全。

我会将结果直接写给用户。 response 有一个名为 getWriter 的函数,它返回一个 Writer,您可以使用它“直接”将 HTML 发送到客户端。 (完全跳过resultfile.html)

更新:Google 搜索“StreamResult custom Writer”会显示此页面,这可能会有所帮助:How to convert stream results to string 您可以使用new StreamResult(writer) 而不是new StreamResult(writer),其中writer 是来自response.getWriter() 的结果

【讨论】:

  • 感谢您的回复。我的网络应用程序处于非常初始阶段,因为我是 Servlet 的新手。我将尝试按照您的建议使用 getWriter 函数。谢谢你的时间:)。
  • 如果您想将此问题标记为已回答,请使用复选标记。如果您有新问题,您可以随时发布新问题。
  • 好的,我正在尝试这个解决方案。
  • :-)​​​​​​​​​​​​​
  • Google 搜索“StreamResult custom Writer”会显示此页面,这可能会有所帮助:stackoverflow.com/questions/13217657/… 您可以使用new StreamResult(new File(resultDir)) 而不是new StreamResult(writer),其中writer 是response.getWriter() 的结果
猜你喜欢
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 2021-10-29
  • 2019-03-10
  • 2011-07-14
  • 1970-01-01
  • 2014-06-10
相关资源
最近更新 更多