Как перезаписать файл, сохраненный в каталоге контекста - PullRequest
0 голосов
/ 11 февраля 2009

Я создал два файла 1) index.html 2) player.jsp Я использую Tomcat Server. В index.html я создал несколько флажков в форме и назначил значения ... После нажатия на кнопку отправить я отправил эти значения в player.jsp ... В player.jsp я динамически генерировал XML-файл с именем «generate.xml». Этот XML-файл изменяется в соответствии с запросом пользователя. Для каждого нового запроса XML-файл должен быть перезаписан. если в форме выбран один флажок, структура в generate.xml будет в одной форме если в форме выбраны два флажка, структура в generate.xml будет другой формы. Я встроил в проигрыватель jsp флеш-плеер, который принимает в качестве входных данных файл generate.xml и воспроизводит песни соответственно ... Код файла player.jsp

<%@ page import="java.io.*" %>
<%@ page contentType="text/html;charset=ISO-8859-1" %> 
<%
int iLf = 10;
char cLf = (char)iLf;
String myfile = application.getRealPath("/") + "generate.xml";

File outputFile = new File(myfile);
outputFile.createNewFile();
FileWriter outfile = new FileWriter(outputFile);
outfile.write(" <?xml version='1.0' encoding='UTF-8'?> "+cLf);
outfile.write(" <playlist version='1' xmlns = 'http://xspf.org/ns/0/' > " +cLf);
outfile.write(" <title>My Band Rocks Your Socks</title> "+cLf); 
outfile.write("<trackList>"+cLf); 
%>
 <%! String[] sports; %>
 <%
    sports = request.getParameterValues("sports");

    out.println("<html><body><h1>hello</h1></body></html>");

    if (sports != null)
    { 
         for (int i = 0; i < sports.length; i++)
         { 
              // outfile.writeln (sports[i]); 
              String total=sports[i];
              String[] sa=total.split("[,]");
              // String[] sub=new String();
              outfile.write("<track>"+cLf);
              for (int j=0;j<sa.length;j++)
              {
                // outfile.writeln(sa[j]);
                // outfile.writeln("sa["+j+"]="+sa[j]);
                if( j == 0)
                {
                     outfile.write("<location>" + sa[0] +"</location>"+cLf); 
                }
                else if (j == 1)
                     {
                        outfile.write("<image>" + sa[1] +"</image>"+cLf); 
                     }
                     else if( j==2)
                          {
                            outfile.write("<title>" + sa[2] +"</title>"+cLf);
                          }

               }// end of inner for loop()       
               outfile.write("</track>"+cLf);
         //outfile.writeln();
      }// end of outer for()
    } 
    //else outfile.writeln ("<b>none<b>");

  outfile.write(" </trackList> "+cLf);
  outfile.write(" </playlist> "+cLf);
  outfile.close();

  %>
<object type="application/x-shockwave-flash" width="400" height="170"
          data="xspf_player.swf?playlist_url=generate.xml">
          <param name="movie" value="xspf_player.swf?playlist_url=generate.xml" />

</object>

моя проблема в моей локальной системе все это работает нормально и generate.xml перезаписывается каждый раз для каждого нового запроса ... Я создал ROOT.war и загрузил этот файл на www.eatj.com здесь, когда 1-й запрос отправлен, файл generate.xml, созданный в соответствии с запросом .. для следующего запроса файл generate.xml НЕ ПЕРЕЗАПИСАН . Плеер берет файл generate.xml, сгенерированный первым запросом, для всех новых запросов. Пожалуйста, помогите мне внести любые изменения в код, чтобы я мог перезаписать предыдущий сгенерированный XML-файл ..

1 Ответ

1 голос
/ 11 февраля 2009

Метод getRealPath () не работает при war и возвращает null AFAIR Вы должны использовать относительный путь, чтобы заставить его работать. Request.getResourceAsStream () - лучший вариант. Использование getRealPath () очень не рекомендуется по той же причине.

[Изменено]

Найдена ветка кода , подтверждающая мои сомнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...