java getrealpath_Java servletcontext.getRealPath(“ /”)是什么意思,什么时候应该使用它...

小编典典

介绍

该ServletContext#getRealPath()被intented到Web内容的路径(在服务器的磁盘文件系统上展开的WAR文件夹结构的路径)转换为绝对磁盘文件系统路径。

该"/"代表Web内容根。即,它代表web以下项目结构中的文件夹:

YourWebProject

|-- src

| :

|

|-- web

| |-- META-INF

| | `-- MANIFEST.MF

| |-- WEB-INF

| | `-- web.xml

| |-- index.jsp

| `-- login.jsp

:

因此,将传递"/"给getRealPath()将返回你/web项目的扩展WAR文件的文件夹的绝对磁盘文件系统路径。喜欢的东西/path/to/server/work/folder/some.war/,你应该能够在进一步使用它File或FileInputStream。

请注意,大多数入门者似乎并没有看到/意识到你实际上可以将整个Web内容路径传递给它,并且他们经常使用

String absolutePathToIndexJSP = servletContext.getRealPath("/") + "index.jsp"; // Wrong!

甚至

String absolutePathToIndexJSP = servletContext.getRealPath("") + "index.jsp"; // Wronger!

代替

String absolutePathToIndexJSP = servletContext.getRealPath("/index.jsp"); // Right!

永远不要在其中写入文件

还要注意,即使你可以使用写入新文件FileOutputStream,只要重新部署WAR ,所有更改(例如,新文件或已编辑文件)都将丢失;原因很简单,所有这些更改都未包含在原始WAR文件中。因此,所有尝试将上传的文件保存在其中的初学者都做错了。

此外,如果未将服务器配置为将WAR文件扩展为磁盘文件系统,而是扩展为例如虚拟文件系统的内存,getRealPath()则将始终返回null或完全意外的路径。

getRealPath()不可携带;你最好不要使用它

getRealPath()小心使用。实际上,实际上没有明智的用例。根据我20年的Java EE经验,总是有另一种方法比更好,更可移植getRealPath()。

如果你实际需要的只是获取InputStreamWeb资源,请更好地使用它,ServletContext#getResourceAsStream()而不管WAR的扩展方式如何。所以,如果你想例如一个InputStream的index.jsp,那么就不能这样做:

InputStream input = new FileInputStream(servletContext.getRealPath("/index.jsp")); // Wrong!

但是,请执行以下操作:

InputStream input = servletContext.getResourceAsStream("/index.jsp"); // Right!

或者,如果你打算获取所有可用的Web资源路径的列表,请ServletContext#getResourcePaths()改用。

Set resourcePaths = servletContext.getResourcePaths("/");

你可以得到一个单独的资源为URL通过ServletContext#getResource()。null资源不存在时将返回此值。

URL resource = servletContext.getResource(path);

或者,如果你打算保存上载的文件或创建临时文件,请参见下面的“另请参阅”链接。

2020-02-27

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值