Resolver problemas de ruta en Java Web:
Las rutas utilizadas en Java se dividen en dos tipos: rutas absolutas y rutas relativas. En última instancia, Java solo puede usar rutas absolutas para encontrar recursos. Todos los métodos para encontrar recursos en rutas relativas son solo algunos métodos convenientes. ¡Pero es la API la que nos ayuda a construir un camino absoluto en la parte inferior para encontrar recursos!
Al desarrollar aplicaciones web, a menudo necesita obtener la ruta física de la raíz web actual en el servidor.
Si se trata de un servlet, acción, controlador o filtro, oyente, interceptor y otras clases relacionadas, solo necesitamos obtener el servletContext y luego usar servletContext.getRealPath ("/") para obtener la dirección física de la aplicación actual en el servidor.
Si el servletContext no se puede recuperar en la clase, hay dos formas de hacerlo:
1. Use el mecanismo de carga de clase de Java para llamar a xxx.class.getclassloader (). GetResource (""); Método para obtener classpath y luego procesar para obtener el directorio de raíz web. Este método solo puede tener efecto en Webroot/Web-INF/classes. Si la clase se empaqueta en un archivo JAR, el método no será válido. En este momento, se debe usar el siguiente método.
2. La idea del marco de primavera. En Web-INF/Web.xml, cree un parámetro de WebApprootKey, especifique un valor (predeterminado es webApp.root) como el valor de clave y luego ejecute String WebAppRootKey = GetServletContext (). GetRealPath ("/"); a través del oyente, o filtro o servlet. Luego escriba el WebApp.root correspondiente a WebApprootKey como clave y valor en las propiedades del sistema del sistema. Luego, la ruta física de Webroot se obtiene a través de System.GetProperty ("WebApp.root") en el programa.
Según la segunda idea, podemos expandirla aún más. Sin embargo, para las aplicaciones implementadas en un servidor, si no es sus necesidades, léelo.
Aquí hay algunas formas de obtener el ClassPath y el camino absoluto a la clase actual. Puede usar algunos de estos métodos para obtener el camino absoluto a los recursos que necesita:
1.
Debitnoteaction.class.getResource ("")Lo que obtiene es el directorio URI del archivo de clase Filetest.class actual. ¡No te incluye a ti mismo!
como:
Archivo:/D:/Eclipse/SpringTest/Webroot/Web-Inf/Classes/
atcarnet/src/com/evi/módulos/atacarnet/action/
2.
Debitnoteaction.class.getResource ("/")Lo que obtienes es la ruta URI absoluta de la classpath actual.
como:
Archivo:/D:/Eclipse/SpringTest/Webroot/Web-Inf/Classes/
3.
Thread.CurrentThread (). GetContextClassLoader (). GetResource ("")Lo que obtienes es también la ruta URI absoluta del classpath actual
como:
Archivo:/D:/Eclipse/SpringTest/Webroot/Web-Inf/Classes/
4.
Debitnoteaction.class.getClassLoader (). GetResource ("")o
ClassLoader.getSystemResource ("")Lo que obtienes es también la ruta URI absoluta del classpath actual.
como:
Archivo:/D:/Eclipse/SpringTest/Webroot/Web-Inf/Classes/
5. Obtenga la ruta relativa del servidor
System.getProperty ("user.dir")Por ejemplo: E: /apache-Tomcat-5.5.16/apache-Tomcat-5.5.16/bin
Recomiendo usar thread.currentThread (). GetContextClassLoader (). GetResource ("") para obtener la notación URI de la ruta absoluta de la classpath actual
6. Obtenga el camino absoluto en el proyecto
Generalmente utilizado
request.getRealPath ("/")o
request.getRealPath ("/config/")Pero no se recomienda usar request.getRealPath ("/"). Puede probar el método ServletContext.getRealPath ("/") para obtener la ruta absoluta al directorio raíz de la aplicación web
Es muy fácil obtener el archivo SRC, porque SRC es el directorio relativo predeterminado. Por ejemplo, si dice que desea obtener el archivo test.java en el directorio COM en SRC, solo necesita que esto sea suficiente.
Archivo f = nuevo archivo (com/test.java);
Pero si quiero obtener archivos que no están en el directorio SRC o el directorio de raíz web, necesito obtenerlos del mismo nivel de SRC o Webroot, por ejemplo, DOC
Mi método duro se implementa así:
String path = this.getServletContext (). GetRealPath ("/"); Propiedades P = New Properties (); P.Load (New FileInputStream (New File (Path.Substring (0, (Path.LastIndexof ("// Webroot") + 1) +) + "doc/db.properties"))); system.out.println (p.getProperty ("Drivername"));Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!