2016-05-09 11 views
1

Dies ist die Verzeichnisstruktur meiner Servlet:Servlets nicht aktualisiert HTML-Seite

+---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 

Mein Haupt Servlet-Klasse (mainClass.java) sieht wie folgt aus:

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); 

    } 

Dies ist eine Suche Anwendung. Der Benutzer gibt die Abfrage auf "firstpage.html" ein und ruft die Ergebnisse zurück.

Wenn ich meine Webanwendung zum ersten Mal starte, wird "firstpage.html" gestartet, nachdem ich sie in der Datei web.xml konfiguriert habe. Wenn ich meine Webanwendung zum ersten Mal starte, wird "firstpage.html" angezeigt, dann gibt Benutzer die Abfrage ein und die "resultfile.html" wird erstellt. Aber die Web-App zeigt stattdessen eine leere Seite. Ich habe die "resultfile.html" überprüft und die Datei wird ordnungsgemäß generiert. Also, es gibt kein Problem mit meinem Code. Ich möchte meine generierte "resultfile.html" Seite weiterleiten können. Mache ich hier etwas falsch? Ich bin neu bei Servlets. Danke euch allen.

Ich benutze Tomcat V7.0 und Eclipse.

Update: Wenn der Benutzer auf die "firstpage.html" zurückgeht und die neue Abfrage eingibt, zeigt die "resultfile.html" die Ergebnisse für die alte Abfrage an. "resultfile.html" zeigt die aktualisierten Informationen nicht an.

Update 2: Meine "resultfile.html" wird von SaxonImplementation-Klasse generiert. Der Code für diese Klasse ist wie folgt:

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(); 
    } 
    } 

} 

ich diese Klasse von meiner doGet-Methode von mainClass.java Aufruf die Umwandlung von XML in HTML-Datei zu tun.

+0

@BalusC Hallo BalusC Ich habe keine FileNotFoundException erhalten.Ich denke nicht, dass es eine doppelte Frage ist. –

+0

Die Frage mag anders sein, aber die Antwort ist definitiv auf die aktuelle Frage anwendbar. – BalusC

+0

@BalusC Das bedeutet also, dass dies keine doppelte Frage ist und ich bereits eine andere Antwort für meine Frage bekommen habe, wonach ich gesucht habe. –

Antwort

1

Ich weiß nicht, warum die Ergebnisdatei als leer angezeigt wird. Es besteht die Möglichkeit eines Server-Cache-Problems, aber ich weiß es nicht. Dazu würde ich vorschlagen, die Datei manuell zu bearbeiten und/oder sie manuell anzuzeigen. Sie müssen feststellen, ob das System eine leere Datei schreibt oder nur eine leere Seite druckt, obwohl die Datei korrekt ist. Danke für das Update. Entweder wird die Datei nicht vollständig geschrieben, bevor Sie sie an den Client senden, oder es liegt ein Server-Cache-Problem vor, da nicht erwartet wird, dass sich diese Dateien häufig ändern. Bitte achten Sie darauf, dass flush und close auf Ihrem FileWriter oder FileOutputStream abgeschlossen haben (die Sie zu resultfile.html schreiben verwenden) vor Sie forward auf Antrag nennen. Wenn Sie sicher sind, dass dies bereits geschieht, muss es sich um ein Cache-Problem handeln. Also würde ich vorschlagen, die resultfile manuell zu lesen und es auf die response statt forward ing zu schreiben.

Dazu gesagt, ich denke, Sie müssen das Design Ihrer Software ändern, um effizienter und Multi-User-Safe zu arbeiten. Durch das Schreiben in eine freigegebene Ergebnisdatei.html wird keine Mehrbenutzersicherheit erreicht.

Ich würde die Ergebnisse direkt an den Benutzer schreiben. response hat eine Funktion namens getWriter, die eine Writer zurückgibt, die Sie verwenden können, um den HTML-Code direkt an den Client zu senden. (Überspringen resultfile.html insgesamt)

Update: Eine Google-Suche nach „Stream individuelle Writer“ Diese Seite zeigt, die hilfreich sein können: How to convert stream results to string Statt new StreamResult(new File(resultDir)) Sie new StreamResult(writer) verwenden können, wo writer ist das Ergebnis von response.getWriter()

+0

Danke für Ihre Antwort. Meine Web-App befindet sich in einem sehr frühen Stadium, da ich neu bei Servlets bin. Ich werde versuchen, die getWriter-Funktion wie vorgeschlagen zu verwenden. Vielen Dank für Ihre Zeit :). –

+0

Bitte verwenden Sie das Häkchen, wenn Sie diese Fragen als beantwortet markieren möchten. Sie können immer eine neue Frage stellen, wenn eine neue Frage für Sie auftritt. –

+1

Sicher, ich versuche diese Lösung. –