猿问

什么是servletcontext.getRealPath(“/”),以及何时使用它

什么是servletcontext.getRealPath(“/”),以及何时使用它

在下面的片段中:

ServletContext context = request.getServletContext();String path = context.getRealPath("/");

什么/在方法中getRealPath()代表?我什么时候该用它?


牧羊人nacy
浏览 7038回答 3
3回答

侃侃无极

导言这个ServletContext#getRealPath()将Web内容路径(服务器磁盘文件系统上展开的WAR文件夹结构中的路径)转换为绝对磁盘文件系统路径。这个"/"表示web内容根。即它代表web文件夹,如下面的项目结构所示:YourWebProject &nbsp;|--&nbsp;src &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;: &nbsp;| &nbsp;|--&nbsp;web &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|--&nbsp;META-INF &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;`--&nbsp;MANIFEST.MF &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|--&nbsp;WEB-INF &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;`--&nbsp;web.xml &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;|--&nbsp;index.jsp &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;`--&nbsp;login.jsp &nbsp;:所以,通过"/"到getRealPath()的绝对磁盘文件系统路径。/web项目的展开WAR文件的文件夹。有点像/path/to/server/work/folder/some.war/你应该可以在File或FileInputStream.请注意,大多数初学者似乎没有看到/意识到您实际上可以将整个web内容路径传递到它,并且他们经常使用String&nbsp;absolutePathToIndexJSP&nbsp;=&nbsp;servletContext.getRealPath("/")&nbsp;+&nbsp;"index.jsp";而不是String&nbsp;absolutePathToIndexJSP&nbsp;=&nbsp;servletContext.getRealPath("/index.jsp");不要在里面写文件还请注意,即使您可以使用FileOutputStream,所有更改(例如新文件或编辑的文件)将你给我消失无论何时重新部署战争,原因很简单,所有这些更改都不包含在原始WAR文件中。所以所有试图保存上传文件的初学者都做错了。此外,getRealPath()永远都会回来null或者,当服务器没有配置为将WAR文件扩展到磁盘文件系统,而是作为虚拟文件系统进入内存时,就会出现一个完全出乎意料的路径。getRealPath()是不可移植的,你最好不要使用它使用getRealPath()小心点。实际上,它没有合理的真实世界用例。如果你真正需要的是InputStream更好地利用web资源ServletContext#getResourceAsStream()相反,无论战争是如何扩大的,这都是可行的。所以,如果你想要一个InputStream的index.jsp,那就做吧不做:InputStream&nbsp;input&nbsp;=&nbsp;new&nbsp;FileInputStream(servletContext.getRealPath("/index.jsp"));&nbsp;//&nbsp;Wrong!但相反,你要做的是:InputStream&nbsp;input&nbsp;=&nbsp;servletContext.getResourceAsStream("/index.jsp");&nbsp;//&nbsp;Right!或者如果要获取所有可用web资源路径的列表,请使用ServletContext#getResourcePaths()相反。Set<String>&nbsp;resourcePaths&nbsp;=&nbsp;servletContext.getResourcePaths("/");您可以获得一个单独的资源,如URL通孔ServletContext#getResource()..这个会回来的null当资源不存在时。URL&nbsp;resource&nbsp;=&nbsp;servletContext.getResource(path);或者,如果您打算保存一个上传的文件,或者创建一个临时文件,那么请参阅下面的“请参阅”链接。另见:getResourceAsStream()与FileInputStream推荐在servlet应用程序中保存上传的文件的方法在JavaEE 7 Web应用程序重新部署时保存数据的简单方法

繁花如伊

Web应用程序的上下文路径是包含Web应用程序的Web-INF目录的目录。它可以被认为是网络应用程序的“家”。通常,在编写Web应用程序时,获取该目录在文件系统中的实际位置非常重要,因为这允许您执行诸如从文件中读取或写入文件等操作。这个位置可以通过ServletContext对象的getRealPath()方法获得。可以将此方法传递给文件分隔符设置的字符串参数,以使用操作系统的文件分隔符(“/”表示UNIX,“\”用于Windows)获取路径。

aluckdog

Java 7和Java 8之间也有一个变化。诚然,它涉及到一个不受欢迎的调用,但是我不得不添加一个“/”来使我们的程序工作!下面是讨论它的链接为什么servletContext.getRealPath在tomcat 8上返回NULL?
随时随地看视频慕课网APP

相关分类

Java
我要回答