java lang illegalargument_servlet内置对象

java lang illegalargument_servlet内置对象小编典典介绍该ServletContext#getRealPath()被intented到Web内容的路径(在服务器的磁盘文件系统上展开的WAR文件夹结构的路径)转换为绝对磁盘文件系统路径。该”/”代表Web内容根。即,它代表web以下项目结构中的文件夹:YourWebProject|–src|:||–web||–META-INF||`–MANIFE…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

小编典典

介绍

该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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/192921.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 关于sstream的灵活使用

    关于sstream的灵活使用问题有10000个队伍参加。经过工作人员认真负责的统计,本来已经统计好了这一万个队伍的分数和排名,并按照排名从高到低依次进行了编号(从1到10000)但是由于一个非常偶然的因素,导致其中三个编号的数据丢失,而且剩余编号的顺序也全被打乱了。你需要编写一个程序,根据还保留的统计数据,来判断哪些编号的数据丢失了,并将这些编号按照从小到大的顺序重新拼接为一个新数字,然后计算这个新数字除以11的余数。如…

  • jQuery数据类型总结建议收藏

    jQuery除了包含原生JS中的内置数据类型(built-indatatype),还包括一些扩展的数据类型(virtualtypes),如Selectors、Events等。1.StringS

    2021年12月21日
  • 一气之下,我一行代码搞定了约瑟夫环问题,面试官懵了[通俗易懂]

    一气之下,我一行代码搞定了约瑟夫环问题,面试官懵了[通俗易懂]大家好,我是帅地。对于约瑟夫环问题估计大家都听说过,除非你刚刚读大一,因为在大一大部分学校的课本都会降到这个算法题。为了以防万一你没听过,我还是给下问题的描述问题描述:编号为1-N的N个士兵围坐在一起形成一个圆圈,从编号为1的士兵开始依次报数(1,2,3…这样依次报),数到m的士兵会被杀死出列,之后的士兵再从1开始报数。直到最后剩下一士兵,求这个士兵的编号。记得有一次,貌似是阿里的面试,面试官给了我一到原汁原味的约瑟夫好,好家伙,看我不把你秀一把。不过,作为一个有着几十场面

  • threadlocal详解_thread local

    threadlocal详解_thread localC#中,Thread类有一个IsBackground的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。个人感觉这样的解释等于没有解释..Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一的区别就是:后台线程不会防止应用程序的进程被终止掉。呵呵,这句话读出来好像并不那么好懂.其实,说白了就是当前台线程都结束了的时候,整个…

    2022年10月17日
  • python取余还是相乘_python取余还是相乘_基于python 取余问题(%)详解

    python取余还是相乘_python取余还是相乘_基于python 取余问题(%)详解取余的公式:余数=除数-被除数*商python的的余数是按照整除(向下取整)得到的商来计算的。取余问题主要分为:正数与正数,负数与负数,正数与负数,0正数与正数#大数/小数:因为得出的商和整除得出的一致,所以直接按照这个公式(余数=除数-被除数*商)即可。print(9//7)#1print(9%7)#2#小数/大数:因为得出的商和整除得出的一致,所以直接按照这个公式(余数=除数-被除数*…

  • Vue和vue全家桶有什么区别_Vue和vue全家桶有什么区别

    Vue和vue全家桶有什么区别_Vue和vue全家桶有什么区别vue全家桶都有什么全家桶,顾名思义,对于开发一个完整的中大型单页面应用项目所必须的所必须的插件和框架。注:此文章主要讲解vue-cli脚手架开发方式,不介绍各插件的具体使用方式,具体使用方式详见其他详细介绍文章。一、vue-clivue-cli也叫脚手架,官方定义为Vue.js开发的标准工具!相比scirpt标签引入,脚手架具有如下特点:1)、功能丰富对Babel、TypeScr…

    2022年10月26日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号