Pregunta

necesito obtener la ruta real para archivo en mi directorio WebContent, por lo que el marco que utilizo pueden acceder a ese archivo. Sólo se tarda archivo String como atributo, por lo que necesito para obtener la ruta real a este archivo en el directorio WebContent.

Yo uso Spring Framework, por lo que la solución debe ser posible hacer en la primavera.

¿Fue útil?

Solución

Si necesita esta en un servlet a continuación, el uso getServletContext().getRealPath("/filepathInContext")!

Otros consejos

getServletContext () getRealPath ( "") -. No funcionará si se está haciendo esta forma el contenido disponible a partir de un archivo .war. getServletContext () será nulo.

En este caso se puede utilizar otra manera de obtener la ruta real. Este es un ejemplo de contraer una ruta a un archivo de propiedades de C: / Archivos de programa / Tomcat 6 / webapps / miaplicacion / WEB-INF / classes / somefile.properties:

// URL returned "/C:/Program%20Files/Tomcat%206.0/webapps/myapp/WEB-INF/classes/"
URL r = this.getClass().getResource("/");

// path decoded "/C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
String decoded = URLDecoder.decode(r.getFile(), "UTF-8");

if (decoded.startsWith("/")) {
    // path "C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
    decoded = decoded.replaceFirst("/", "");
}
File f = new File(decoded, "somefile.properties");

tiene que informarle de Java para cambiar la ruta de su PC en su proyecto Java, por lo si se utiliza el uso de primavera:

@Autowired
ServletContext c;

String UPLOAD_FOLDEdR=c.getRealPath("/images"); 

pero si se utiliza servlets sólo tiene que utilizar

String UPLOAD_FOLDEdR = ServletContext.getRealPath("/images");  

lo que el camino será /webapp/images/:)

En situaciones como estas, tiendo a extraer el contenido que necesito como un recurso (MyClass.getClass (). GetResourceAsStream ()), escribir como un archivo en una ubicación temporal y utilizar este archivo de la otra llamada.

De esta manera no tengo que molestarse con el contenido que sólo está contenida en tarros o se encuentra en algún lugar en función del contenedor web Actualmente estoy usando.

Incluir la solicitud como un parámetro. Primavera pasará entonces el objeto de solicitud cuando se llama al método asignada

@RequestMapping .....
public String myMethod(HttpServletRequest request) {
   String realPath = request.getRealPath("/somefile.txt");
   ...

Se puede utilizar la interfaz de Recursos primavera (y especialmente el ServletContextResource): http://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/io/Resource.html

Este enfoque utiliza el cargador de recursos para obtener la ruta absoluta a un archivo en su aplicación, y luego sube unas cuantas carpetas a la carpeta raíz de la aplicación. No se requiere el contexto de servlet! Esto debería funcionar si usted tiene un "web.xml" en la carpeta WEB-INF. Tenga en cuenta que es posible que desee considerar el uso de este únicamente para el desarrollo, ya que este tipo de configuración generalmente mejor se almacena externamente desde la aplicación.

public String getAppPath()
{
    java.net.URL r = this.getClass().getClassLoader().getResource("web.xml");
    String filePath = r.getFile();
    String result = new File(new File(new File(filePath).getParent()).getParent()).getParent();

    if (! filePath.contains("WEB-INF"))
    {
        // Assume we need to add the "WebContent" folder if using Jetty.
        result = FilenameUtils.concat(result, "WebContent");
    }

    return result;
}

tratar de utilizar esta opción si desea utilizar arff.txt en su nivel de desarrollo y la producción también

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top