2009-06-03 16 views
10

Podczas pisania pliku JSP, w jaki sposób mogę uzyskać bieżący katalog bieżącego katalogu tego pliku w czasie wykonywania
(aby można było iterować katalog i wyświetlić jego zawartość)?Jak wyświetlić zawartość katalogu serwera przy użyciu strony JSP?

Czy niektóre operacje wejścia/wyjścia pliku będą ograniczone z powodu pewnych problemów z bezpieczeństwem?

Wolałbym rozwiązanie bez dostępu do niektórych zmiennych/właściwości serwera specyficznych dla implementacji .

EDIT:
Nie chciałbym zapytać, czy to było tak proste, jak new File("."), bo byłoby to po prostu dać katalogu plików wykonywalnych serwera.

+0

Podobne pytanie z odpowiedzią z użyciem składni JSP: http://stackoverflow.com/a/21254129/ 333296 – Nux

Odpowiedz

3

należy wiedzieć ścieżkę JSP w aplikacji internetowej, dzięki czemu można przekazać, że do getRealPath()

File jsp = request.getRealPath(pathToJspInWebapp); //eg. /WEB-INF/jsp/my.jsp 
File directory = jsp.getParentFile(); 
File[] list = directory.listFiles(); 
+1

Uwaga: Nie powiedzie się, gdy plik WAR nie zostanie rozłożony! –

0

A poprawną/example robocza:

File jsp = new File(request.getRealPath(request.getServletPath())); 
File dir = jsp.getParentFile(); 
File[] list = dir.listFiles(); 
+0

To nie jest "poprawne" jak na specyfikację Servlet 2.1! – ingyhere

2

Począwszy od wersji 2.1 wykorzystanie API Java Servlet:

File jsp = new File(request.getSession().getServletContext().getRealPath(request.getServletPath())); 
File dir = jsp.getParentFile(); 
File[] list = dir.listFiles(); 
6
 <%@page import="java.io.*" %> 
     <%@page import="java.util.*" %> 
     <%!  public void GetDirectory(String a_Path, Vector a_files, Vector a_folders) { 
       File l_Directory = new File(a_Path); 
       File[] l_files = l_Directory.listFiles(); 

       for (int c = 0; c < l_files.length; c++) { 
        if (l_files[c].isDirectory()) { 
         a_folders.add(l_files[c].getName()); 
        } else { 
         a_files.add(l_files[c].getName()); 
        } 
       } 


      } 
     %> 

     <% 
      Vector l_Files = new Vector(), l_Folders = new Vector(); 
      GetDirectory("C:/mydirectory/", l_Files, l_Folders); 

      //folders should be left out... 
      //for(int a = 0 ; a<l_Folders.size() ; a++) 
      //out.println("[<b>"+l_Folders.elementAt(a).toString() + "</b>]<br>") ; 

      //generate files as XML 
      out.println("<music>"); 

      for (int a = 0; a < l_Files.size(); a++) { 
       out.println("<file>" + l_Files.elementAt(a).toString() + "</file>"); 
      } 

      out.println("</music>"); 
     %> 

Wymień "C:/mydirectory /" z katalogu

0

Użyłem tego jednego,

File jspFile = new File(request.getRealPath(request.getServletPath())); 
     File dir = jspFile.getParentFile(); 
     String requestURL = request.getRequestURL().toString(); 
     String urlDir = requestURL.substring(0, requestURL.lastIndexOf('/')); 

     File[] files = dir.listFiles(new FilenameFilter() { 
      @Override 
      public boolean accept(File dir, String name) { 
       return name.endsWith(".ipa"); 
      } 
     }); 
Powiązane problemy