2016-05-09 2 views
1

Это структура каталогов моего сервлета:Servlet не обновляет страницу HTML

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

Мой главный сервлет класс (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». Я здесь что-то не так? Я новичок в сервлетах. Всем спасибо.

Я использую Tomcat V7.0 и затмение.

Обновление: когда пользователь возвращается к «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(); 
    } 
    } 

} 

Я звоню этот класс от моего метода doGet из mainClass.java сделать преобразование XML в HTML-файл.

+0

@BalusC Привет BalusC , Я не получал исключение FileNotFoundException.Я не думаю, что это дублированный вопрос. –

+0

Вопрос может быть другим, но ответ определенно применим к текущему вопросу. – BalusC

+0

@BalusC Итак, это означает, что это не дублирующий вопрос, и у меня уже есть другой ответ на мой вопрос, который я искал. –

ответ

1

Я не знаю, почему файл результатов отображается пустым. Существует проблема с кешем сервера, но я не знаю. Для этого я бы предложил отредактировать файл вручную и/или просмотреть его вручную. Вам нужно определить, записывает ли система пустой файл или просто печатает пустую страницу, даже если файл может быть прав. Спасибо за обновление. Либо файл не полностью записан до того, как вы отправите его клиенту, либо проблема с кешем сервера, так как эти файлы не будут часто меняться. Пожалуйста, убедитесь, что flush и close закончили на вашем FileWriter или FileOutputStream (которые вы используете для записи resultfile.html) перед тем вы звоните forward по запросу. Если вы уверены, что это уже происходит, это должно быть проблема с кешем. Поэтому я бы предложил прочитать resultfile вручную и записать его на response вместо forward ing.

Как мне кажется, вам нужно изменить дизайн своего программного обеспечения для более эффективной работы и многопользовательского режима. Запись на общий файл результатов.html не обеспечит многопользовательскую безопасность.

Я бы напишет результаты непосредственно пользователю. response имеет функцию, называемую getWriter, которая возвращает Writer, которую вы можете использовать для отправки HTML «прямо» клиенту. (Пропустить resultfile.html вообще)

Update: Поиск Google для «StreamResult пользовательских Writer» показывает эту страницу, которая может быть полезна: How to convert stream results to string Вместо new StreamResult(new File(resultDir)) вы можете использовать new StreamResult(writer) где writer является результатом response.getWriter()

+0

Спасибо за ваш ответ. Мое веб-приложение находится в начальной стадии, так как я новичок в Servlets. Я попытаюсь использовать функцию getWriter, как вы предложили. Спасибо за ваше время :). –

+0

Пожалуйста, используйте отметку галочки, если вы хотите отметить эти вопросы в соответствии с ответом. Вы всегда можете задать новый вопрос, если возникнет новый вопрос. –

+1

Конечно, я пытаюсь это решение. –