Servlet不刷新html页面

时间:2016-05-09 17:19:03

标签: java tomcat servlets

这是我的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”页面。我在这里做错了吗?我是Servlets的新手。谢谢大家。

我正在使用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文件。

1 个答案:

答案 0 :(得分:1)

我不知道为什么resultsfile显示为空白。存在服务器缓存问题的可能性,但我不知道。为此我建议手动编辑文件和/或手动查看文件。您需要确定系统是写入空白文件还是仅打印空白页,即使文件可能正确。感谢您的更新。在将文件发送到客户端之前,文件未完全写入,或者存在服务器缓存问题,因为这些文件不会经常更改。请确保flushclose已完成FileWriterFileOutputStream(您用来写resultfile.html之前forward。如果您确定已经发生这种情况,则必须是缓存问题。因此,我建议您手动阅读resultfile并将其写入response而不是forward

话虽如此,我认为您需要更改软件的设计,以提高工作效率和多用户安全性。写入共享的resultsfile.html将无法实现多用户安全。

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

更新:Google搜索" StreamResult自定义Writer"显示此页面可能会对您有所帮助:How to convert stream results to string您可以使用new StreamResult(new File(resultDir))而不是new StreamResult(writer) writer来自response.getWriter()的结果