2011-09-16 6 views
0

J'ai besoin de créer des répertoires et de les lire dans une servlet.Créer et lire des répertoires dans tomcat

Si je voulais créer un dossier dans mon répertoire webapps/appName, que dois-je faire pour y parvenir?

Actuellement, si je fais:

File file = new File("conf\Conf.xml"); 

Cela regardera dans le répertoire "{TOMCAT_HOME} \ bin \"

Comment puis-je signaler mon répertoire par défaut « {TOMCAT_HOME} \ webapps \ appName \ "

Répondre

0

Questions sur les raisons pour lesquelles vous feriez cela de côté .... Le moyen le plus portable serait d'ajouter un <init-param> à votre servlet et de passer le chemin de cette façon. Vous pouvez également utiliser System.getenv() pour obtenir la variable d'environnement TOMCAT_HOME, en supposant qu'elle a été définie.

0

Vous avez juste besoin d'obtenir le vrai chemin du contexte de servlet qui donnerait le chemin que vous recherchez, faites quelque chose comme ceci, ce code créera le répertoire avec la date courante comme nom. Si vous voulez éviter le retard dans le démarrage de la servlet, créez un thread et déléguez la création du répertoire au thread. Vous pouvez enregistrer le chemin du répertoire dans le contexte de servlet comme ceci.

private static final String DIR_SERVLET_CTX_ATTRIB = "directoryPathAttrib"; 
public void init() throws ServletException { 
    StringBuilder filePathBuilder = new StringBuilder(getServletContext().getRealPath("/").toString()); 
    filePathBuilder.append(File.separator); 
    filePathBuilder.append(new SimpleDateFormat("MM-dd-yyyy").format(new Date())); 
    System.out.println("Directory path: "+ filePathBuilder.toString()); 
     File file = new File(filePathBuilder.toString()); 
     if(!file.exists()) 
     { 
      file.mkdir(); 
      System.out.println("finished creating direcotry"); 
     } 
    getServletContext().setAttribute(DIR_SERVLET_CTX_ATTRIB, filePathBuilder.toString()); 
} 

protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, java.io.IOException 
{ 
    String dirPath = (String)getServletContext().getAttribute(DIR_SERVLET_CTX_ATTRIB); 
    File file = new File(dirPath + File.separator + "test.txt"); 
    FileOutputStream fis = new FileOutputStream(file); 
    fis.write("Hello".getBytes()); 
    fis.flush(); 
} 
+0

J'avais fait quelque chose comme ceci puisque l'utilisation de ces fichiers était liée à ce déploiement, Si l'utilisation des fichiers n'est pas liée au déploiement, alors je déconseille. –

1

Si je voulais créer un dossier dans mon webapps/appName, que dois-je faire pour y parvenir?

Rien. Vous devriez oublier cette approche et chercher une approche alternative. Chaque fois que vous redéployez le WAR ou même lorsque vous redémarrez le serveur, toutes les modifications apportées à la structure du dossier webapp seront irrémédiablement perdues.

Vous devez préparer un dossier fixe avec des droits de lecture/écriture et définir son chemin d'accès système de fichiers disque absolu comme paramètre de configuration (propriétés/fichier xml) ou comme argument VM. Par exemple, /var/webapp/uploads. De cette façon, vous pouvez simplement utiliser le File de la manière habituelle.

String root = getRootSomehow(); // Must return "/var/webapp/uploads". 
File file = new File(root, "somefile.txt"); 
// ... 

Une alternative complètement différente est d'utiliser une base de données. Ce serait la seule alternative si vous déployez votre application web sur un hôte qui ne vous permet pas de créer des dossiers en dehors du contexte webapp.

Questions connexes