[jsp] tworzenie pliku na serwerze

0

Mam taka stronę JSP

<!DOCTYPE DOCTYPE PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">
<%@ page language="java" contentType="text/html; charset=ISO-8859-2" pageEncoding="ISO-8859-2" %>
<%@ page import="java.io.*"%>
<%@ page import="java.net.*"%>
<html>
<%! public void copyFile(String source,String target)
    {
        try
        {
            URL urlJsp=new URL("http://localhost:8080/my_examples/jsp/"+source);
            URLConnection connJsp=urlJsp.openConnection();
            BufferedReader input=new BufferedReader(new InputStreamReader(connJsp.getInputStream()));
            URL urlTxt=new URL("http://localhost:8080/my_examples/jsp/"+target);
            URLConnection connTxt=urlTxt.openConnection();
            connTxt.setDoOutput(true);
            OutputStreamWriter output=new OutputStreamWriter(connTxt.getOutputStream());
            String linia="";
            answer=new StringBuffer("");
            while((linia=input.readLine())!=null)
            {
                output.write(linia,0,linia.length()); // wiersz 21
                answer.append(linia);
            }
            input.close();
            output.close();
        }
        catch(Exception e)
        {
            status=e.toString();
        }
    }
    public String status="";
    public StringBuffer answer=new StringBuffer("");
%>
<% String jspName=request.getParameter("fileName");
   String txtName=jspName.replace(".jsp",".txt");
   copyFile(jspName,txtName);
%>
<body>
<%= status %>
<%= "jspName: "+jspName+" \n" %>
<%= "txtName: "+txtName+" \n" %>
<%= answer %>
<%-- <% response.sendRedirect(txtName); %> --%>
</body>
</html>

Mój cel jest następujący, utworzyc nowy plik (w katalogu aplikacji) i go wyświetliś.
Pytania do powyższego kodu są następujące:

  • nie ma błędów wykonania - zmienna status=="",zmienna answer zawiera co trzeba, ale plik opisany przez urlText nie powstaje, co zatem robi wiersz 21,
  • adres serwera (aplikacji)

http://localhost:8080/my_examples
wpisany jest na sztywno, czy można go odczytać programowo,

  • czy można (trzeba) zrobić to zupełnie inaczej (korzystając tylko z plików jsp)?
0

nie powstaje ponieważ próbujesz pisać do adresu URL. Jeżeli koniecznie musisz robić to w JSP (jsp to tylko warstwa widoku, uzyj jboss seam lub apache wicket i twórz plik servlecie) to niech target będzie zwyczajnym plikiem. Obecnie zamiast zapisywać plik na dysk wysyłasz go na serwer jako zapytanie.

OutputStreamWriter output=new OutputStreamWriter(new FileOutPutStream(new File("ścieżka docelowa ale na dysku, a nie url")));
while((linia=input.readLine())!=null){
   output.write(linia,0,linia.length()); // wiersz 21
   answer.append(linia);
}
0

@Koziołek, od plików rozpocząłem. FileNotFoundException przy pliku źródłowym (urlJsp).

0

A gdyby tak:

  • Servlet1 jako parametr pobiera nazwę źródła i na output pisze plik zwykłym FileReaderem.
  • Servlet2 przyjmuje żądanie post z plikiem i zapisuje go fielwriterem?
0

Częściowo udało mi sie problem rozwiązać:
Plik Szablon.jsp

<!DOCTYPE DOCTYPE PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">
<%@ page language="java" contentType="text/html; charset=ISO-8859-2" pageEncoding="ISO-8859-2" %>
<%@ page import="java.io.*"%>
<html>
<%! public void copyFile(String source,String target)
    {
        try
        {
            path=new File(source).getAbsolutePath();
            FileReader input=new FileReader(path);
            path=new File(target).getAbsolutePath();
            FileWriter output=new FileWriter(path);
            int c=0;
            while((c=input.read())!=-1)
            {
                output.write(c);
            }
            input.close();
            output.close();
        }
        catch(Exception e)
        {
        }
    }
    public String path="";
%>
<% String jspName=request.getParameter("fileBefore");
   String txtName=jspName.replace(".jsp",".txt");
   copyFile(jspName,txtName);
   txtName=request.getParameter("fileAfter");
%>
<body>
<% response.sendRedirect(txtName); %>
</body>
</html>

Ze strony wywołującej plik Szablon.jsp otrzymuje dwa parametry: fileAfter i fileBefore. Nie mam problemu z wartością parametru fileAfter, jest to adres względny pliku na który nastapi przekierowanie. Nie wiem natomiast jaka winna być wartość parametru fileBefore. Z testów (na Tomcacie) wynika, że powinno to być

webapps/......./PrzetwarzanyPlik.jsp
Na swoim komputerze znam strukturę katalogów, na uczelnianym nie. Pytanie jest takie: jak programowo odczytać względną (w stosunku do webapps) ścieżkę pliku.

0

weź dorzuć do aplikacji plik z konfiguracją. Niestety to jest ta część, która musi być w plikach konfiguracyjnych umieszczona.

1 użytkowników online, w tym zalogowanych: 0, gości: 1