java lang illegalargument_servlet内置对象
小编典典
介绍
该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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192921.html原文链接:https://javaforall.cn
相关文章
- java json对象和json字符串互转的方法_js中对象转字符串的方法
- jvm内存模型、jvm内存结构、Java内存结构、Java内存模型(JMM)、Java对象模型的区别(吐血研究整理)
- java 把对象转成map_Java对象转换成Map[通俗易懂]
- 如何正确设置Java线程池参数?「建议收藏」
- java实现ajax_Ajax&Java
- Java基础入门笔记03——用户交互Scanner类,程序三大结构,反编译,增强for,Java中没有goto
- java获取文件名乱码_java导出文件名中文乱码
- Java获取当前时间/日期/时间戳及格式化总结,附代码
- java 缓存工具类初始化_Java缓存框架
- json字符串转map对象_java string 转jsonobject
- intellij怎么创建Java_intellij idea创建java项目
- 数组和对象的深拷贝_Java对象深拷贝工具类
- 冷知识!如何远程调试在K8S POD中的Java应用程序!
- java中的枚举类学习详解编程语言
- Java – 如何通过反射调用对象的方法详解编程语言
- eeOracle放弃Java EE:梦想的终结(oracle放弃java)
- Java包(package):Java系统包和自定义包
- 数据库轻松搞定:用Java访问Oracle数据库(java访问oracle)
- 连接高效完成Java面试:掌握Oracle连接知识(java面试oracle)
- 时间使用Redis设置Java对象的过期时间(redisjava过期)
- Java Redis实例学习与应用(java redis实例)
- 查找Java进程:Linux解决方案(linux查找java进程)
- java字符串比较获取字符串出现次数的示例
- JAVA对象JSON数据互相转换的四种常见情况
- java抓取鼠标事件和鼠标滚轮事件示例