Java Servlet实路径

Java Servlet实路径,java,tomcat,servlets,path,Java,Tomcat,Servlets,Path,我正在博客目录下运行一个webapp。(如www.example.com/blog) 我想获得请求的实际文件系统路径 e、 g.www.example.com/blog/test-file.html-> /usr/share/tomcat7/webapps/blog/test-file.html 我尝试了以下方法: public String realPath(HttpServletRequest request, ServletContext servletContext){ Str

我正在博客目录下运行一个webapp。(如www.example.com/blog)

我想获得请求的实际文件系统路径

e、 g.www.example.com/blog/test-file.html-> /usr/share/tomcat7/webapps/blog/test-file.html

我尝试了以下方法:

 public String realPath(HttpServletRequest request, ServletContext servletContext){
    String requestURI = request.getRequestURI();
    String realPath = servletContext.getRealPath(requestURI);
    return realPath;
}
然而,这又回来了

/usr/share/tomcat7/webapps/blog/blog/test-file.html

正确的方法是什么?

简短回答 要获得所需的结果,请将方法用作
getRealPath()
method的参数

这是最接近你想要完成的(阅读下面的注释)


解释 获取这样的路径(使用double
blog
)的原因是使用了getRequestURI()方法返回的结果

getRequestURI()方法返回从应用程序上下文开始的路径。在您的情况下,它将是:
/blog/test file.html

然后,getRealPath()方法将getRequestURI()方法返回的字符串附加到文件夹的实际/物理路径,应用程序位于该文件夹的文件系统中,在您的情况下,该文件夹是:
/usr/share/tomcat7/webapps/blog/

因此,结果路径是:
/usr/share/tomcat7/webapps/blog/blog/test file.html

这就是你的双重
博客问题的原因


重要提示 免责声明
也许OP已经知道下面所写的信息,但它是为了完整而写的

您试图获取的实际路径并不意味着您正在获取文件系统上的实际路径。在web.xml中配置的(或者如果您在相关注释中使用Servlet 3.0+)实际上是一个逻辑/虚拟路径,它可能与文件系统上的实际物理路径相关,也可能与文件系统上的实际物理路径无关,即指定的模式(路径)不需要物理存在

还引用了文件(重点矿山):

获取与给定的虚拟路径相对应的实际路径

简短回答 要获得所需的结果,请将方法用作
getRealPath()
method的参数

这是最接近你想要完成的(阅读下面的注释)


解释 获取这样的路径(使用double
blog
)的原因是使用了getRequestURI()方法返回的结果

getRequestURI()方法返回从应用程序上下文开始的路径。在您的情况下,它将是:
/blog/test file.html

然后,getRealPath()方法将getRequestURI()方法返回的字符串附加到文件夹的实际/物理路径,应用程序位于该文件夹的文件系统中,在您的情况下,该文件夹是:
/usr/share/tomcat7/webapps/blog/

因此,结果路径是:
/usr/share/tomcat7/webapps/blog/blog/test file.html

这就是你的双重
博客问题的原因


重要提示 免责声明
也许OP已经知道下面所写的信息,但它是为了完整而写的

您试图获取的实际路径并不意味着您正在获取文件系统上的实际路径。在web.xml中配置的(或者如果您在相关注释中使用Servlet 3.0+)实际上是一个逻辑/虚拟路径,它可能与文件系统上的实际物理路径相关,也可能与文件系统上的实际物理路径无关,即指定的模式(路径)不需要物理存在

还引用了文件(重点矿山):

获取与给定的虚拟路径相对应的实际路径


您假设文件有一个实际路径,但不需要为true。web应用程序容器可能会在没有本机文件路径的情况下用完
.jar
文件。@UwePlonus这与我要问的问题无关。您假设该文件有一个不需要为真的真实路径。web应用程序容器可能会在没有本机文件路径的情况下耗尽
.jar
文件。@UwePlonus这与我要问的问题无关。请确认:)。这对我来说是一个确认:)。这很有帮助