Maison  >  Article  >  Java  >  Explication détaillée des chemins relatifs et des chemins absolus en Java (Web)

Explication détaillée des chemins relatifs et des chemins absolus en Java (Web)

零下一度
零下一度original
2017-06-29 14:43:282080parcourir

Avant-propos :
Il y a quelque temps, en raison de la gestion de la création et du déplacement de fichiers sous les applications Web, cela impliquait de nombreux problèmes concernant les chemins relatifs, les chemins absolus et d'autres problèmes en Java
. Parallèlement, j'ai découvert les chemins relatifs, les chemins absolus et les classes Java.io.File
dans les applications Web. J'ai également trouvé quelques informations. J'espère que si vous rencontrez des problèmes similaires, vous pourrez les résoudre plus efficacement.

============================================ == =====================================
Compréhension des concepts de base

Chemin absolu : Le chemin absolu est le chemin réel du fichier ou du répertoire sur votre page d'accueil sur le disque dur, (URL et chemin physique Par exemple :
C:/xyz/test.txt représente le). chemin absolu du chemin du fichier test.txt. www.sun.com/index.htm représente également un chemin absolu d'URL
.

Chemin relatif : un chemin relatif à un répertoire de base. Contient le chemin relatif du Web (répertoire relatif en HTML). Par exemple : dans
Servlet, "/" représente le répertoire de l'application Web. et une représentation relative du chemin physique. Par exemple : "./" représente le répertoire actuel,
"../" représente le répertoire de niveau supérieur. Cette représentation similaire appartient également au chemin relatif.

De plus, pour l'URI, l'URL, l'URN, etc., veuillez vous référer aux normes de documents liées aux RFC.

RFC 2396 : Identificateurs de ressources uniformes (URI) : syntaxe générique,
(www.ietf.org/rfc/rfc2396.txt)


2. Chemins relatifs et chemins absolus dans .

2.1 Adresse côté serveur

L'adresse relative côté serveur fait référence à l'adresse relative à votre application web. Cette adresse est résolue côté serveur
(différente du html et du JavaScript. Adresses relatives, elles sont analysées par le navigateur client) En d'autres termes, les adresses relatives de
dans jsp et servlet à ce moment doivent être relatives à votre application Web, c'est-à-dire relatives à http://192.168.0.1/ application Web/.

Les endroits où elle est utilisée sont :
forward : request.getRequestDispatcher(address) dans la servlet ; cette adresse est analysée par
côté serveur, donc si vous souhaitez transférer vers un .jsp, il devrait écrire ceci :
request.getRequestDispatcher("/user/a.jsp") Ceci/par rapport à l'application Web actuelle webapp,
son adresse absolue est : 192.168.0.1/webapp/user/ a.jsp.
sendRedirect : in jsp480c461738e49b2ea7fd7de2cc345f87

2.22. Adresse du client

Tout html Les adresses relatives dans les pages sont relatives au répertoire racine du serveur (http://192.168.0.1/),
plutôt que (avec le répertoire de l'application web sous le répertoire) http://192.168.0.1/webapp/ de.
L'adresse de l'attribut action du formulaire en HTML doit être relative au répertoire racine du serveur 192.168.0.1/),
Donc, si soumis à a.jsp : action="/webapp/user/a. jsp" ou action="784ef932070c663c70d86af5e4d3d09c"/user/a.jsp;
Soumis au servlet en tant qu'actiom="/webapp/handleservlet"
JavaScript est également analysé sur du côté client, donc son chemin relatif est le même que celui du formulaire.

Par conséquent, dans des circonstances normales, il est préférable d'ajouter
<%=request.getContextPath()%> devant CSS, Javascript.Action et autres attributs référencés dans JSP/HTML pages. ;, pour garantir que les fichiers référencés appartiennent au répertoire de l’application Web.
De plus, vous devriez essayer d'éviter d'utiliser des chemins relatifs comme ".", "./", "../../" et d'autres chemins relatifs similaires par rapport à l'emplacement du fichier de cette façon
. il est facile de causer des problèmes lorsque le fichier est déplacé.


3. Obtenir le chemin relatif et le chemin absolu de l'application actuelle dans JSP/Servlet
3.1 Obtenir le chemin relatif et le chemin absolu de l'application actuelle dans JSP
Le chemin absolu correspondant vers le répertoire racine : request.getRequestURI()
Le chemin absolu du fichier :application.getRealPath(request.getRequestURI());
Le chemin absolu de l'application web actuelle : application.getRealPath("/" );
Récupérer le fichier demandé Répertoire supérieur : new File(application.getRealPath(request.getRequestURI())).getParent()

3.2 Obtenir le chemin relatif et le chemin absolu de l'application actuelle dans Servlet
Le chemin absolu correspondant au répertoire racine : request.getServletPath();
Le chemin absolu du fichier :request.getSession().getServletContext().getRealPath
(request.getRequestURI())
Le chemin absolu de l'application Web actuelle : servletConfig.getServletContext() .getRealPath("/");

  (ServletContext对象获得几种方式:
       javax.servlet.http.HttpSession.getServletContext() 
       javax.servlet.jsp.PageContext.getServletContext() 
       javax.servlet.ServletConfig.getServletContext() 
     )

Méthode de 4.java pour obtenir le chemin relatif et le chemin absolu dans Class
4.1 Obtention du chemin absolu dans une classe Java distincte
D'après le fichier Doc de java.io.File, on peut voir :
Par défaut, le répertoire représenté par new File("/") est : System.getProperty("user.dir").
Le programme suivant obtient le chemin actuel de la classe d'exécution

package org.cheng.file;import java.io.File;
public class FileTest {    public static void main(String[] args) throws Exception {      
  System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));    
  System.out.println(FileTest.class.getClassLoader().getResource(""));       
  System.out.println(ClassLoader.getSystemResource(""));          System.out.println(FileTest.class.getResource(""));          System.out.println(FileTest.class.getResource("/")); //Class文件所在路径    System.out.println(new File("/").getAbsolutePath());          System.out.println(System.getProperty("user.dir"));     }}

4.2 La classe Java du serveur obtient le chemin actuel (depuis le réseau)
(1).Weblogic

Le répertoire racine des fichiers système de WebApplication est le répertoire racine de votre installation weblogic.
Par exemple : si votre weblogic est installé sur c:/bea/weblogic700....
Ensuite, le chemin racine de votre fichier est c:/.
Il existe donc deux façons d'accéder à votre fichier côté serveur :
a. Utilisez le chemin absolu :
Par exemple, placez votre fichier de paramètres dans c:/yourconfig/yourconf.properties,
utilisez directement new FileInputStream("yourconfig/yourconf.properties" ) ;
b. Utilisez des chemins relatifs :
Le répertoire racine du chemin relatif est le chemin racine de votre application Web, qui est le répertoire de niveau supérieur de WEB-INF. Placez votre fichier de paramètres dans

yourwebapp/yourconfig/yourconf.properties,

Utilisez comme ceci :
new FileInputStream("./yourconfig/yourconf.properties");
Les deux méthodes sont disponibles, vous pouvez choisir.

(2).Tomcat

affiche System.getProperty("user.dir") dans la classe ; ce qui est affiché est %Tomcat_Home%/bin

(3) . Resin

n'est pas le chemin relatif où est placé votre JSP. C'est le chemin où le moteur JSP exécute et compile ce JSP dans SERVLET

comme racine. test File f = new File("a.htm" );
Ce a.htm se trouve dans le répertoire d'installation de résine

(4).

Dans les fichiers Java, getResource ou getResourceAsStream peuvent être utilisés

Exemple : getClass().getResourceAsStream(filePath);//filePath peut être "/filename", où / représente web

WEB-INF/classes sous le chemin racine de publication

Le chemin par défaut pour utiliser cette méthode est : WEB-INF/classes. Déjà testé dans Tomcat.

5. Chemin relatif lors de la lecture de fichiers, évitez l'utilisation de codage en dur et de chemins absolus. (Depuis Internet)

5.1 Utilisez le mécanisme DI de Spring pour obtenir des fichiers afin d'éviter le codage en dur.
Référez-vous au contenu de connexion suivant :
www.javajia.net/viewtopic.php?p=90213&
5.2 Lecture des fichiers de configuration
Référez-vous au contenu de connexion suivant :
dev.csdn .net/develop/article/39/39681.shtm
5.3 Lire un fichier XML via un chemin virtuel ou un chemin relatif pour éviter le codage en dur
Reportez-vous au contenu de connexion suivant :
club.gamvan.com/ club/ clubPage.jsp?iPage=1&tID=10708&ccID=8

6. Opérations courantes de fichiers en Java (copier, déplacer, supprimer, créer, etc.) (à partir d'Internet)
Java couramment utilisé Classes d'opérations sur les fichiers
www.easydone.cn/014/200604022353065155.htm

Opérations sur les fichiers Java (en JSP)
www.pconline.com.cn/pcedu/empolder/gj/java/0502 /559401.html

Explication détaillée des opérations sur les fichiers Java (site Web Java chinois)

www.51cto.com/html/2005/1108/10947.htm

Comment créer/supprimer /modifier/copier des répertoires et des fichiers en JAVA

www.gamvan.com/developer/java/2005/2/264.html

Résumé :

Grâce à l'utilisation du contenu ci-dessus, vous pouvez résolvez le problème du déplacement de fichiers et de la recherche de fichiers côté serveur d'applications Web, copiez
, supprimez des fichiers et autres opérations, et en même temps, le concept d'adresse relative et d'adresse absolue du serveur est plus clair.
Il est recommandé de se référer au document standard RFC de l'URI. En même temps, vous avez une compréhension approfondie de Java.io.File Java.NET.URI.
La compréhension d'autres aspects peut être plus approfondie et approfondie.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn