为什么使用 .war 文件部署时 getRealPath() 返回 null? [复制]

2023-12-04

getRealPath()返回本地系统中的实际路径,但在使用.war file.

<%@ page import="java.io.*" %>
<%@ page contentType="text/html;charset=ISO-8859-1" %> 
<%
int iLf = 10;
char cLf = (char)iLf;
String a= application.getResource("/");
//String myfile = application.getRealPath("/")+ "generate.xml";
//String myfile = request.getContextPath()+"generate.xml";
//String myfile = request.getRealPath("/")+"generate.xml";

out.println(myfile);    
File outputFile = new File(myfile);
outputFile.createNewFile();
FileWriter outfile = new FileWriter(outputFile);
outfile.write(" <?xml version='1.0' encoding='UTF-8'?> "+cLf);
outfile.write(" <playlist version='1' xmlns = 'http://xspf.org/ns/0/' > " +cLf);
outfile.write(" <title>My Band Rocks Your Socks</title> "+cLf); 
outfile.write("<trackList>"+cLf); 
%>
 <%! String[] sports; %>
 <%
    sports = request.getParameterValues("sports");

    out.println("<html><body><h1>hello</h1></body></html>");

    if (sports != null)
    { 
         for (int i = 0; i < sports.length; i++)
         { 
              // outfile.writeln (sports[i]); 
              String total=sports[i];
              String[] sa=total.split("[,]");
              // String[] sub=new String();
              outfile.write("<track>"+cLf);
              for (int j=0;j<sa.length;j++)
              {
                // outfile.writeln(sa[j]);
                // outfile.writeln("sa["+j+"]="+sa[j]);
                if( j == 0)
                {
                     outfile.write("<location>" + sa[0] +"</location>"+cLf); 
                }
                else if (j == 1)
                     {
                        outfile.write("<image>" + sa[1] +"</image>"+cLf); 
                     }
                     else if( j==2)
                          {
                            outfile.write("<title>" + sa[2] +"</title>"+cLf);
                          }

               }// end of inner for loop()       
               outfile.write("</track>"+cLf);
         //outfile.writeln();
      }// end of outer for()
    } 
    //else outfile.writeln ("<b>none<b>");

  outfile.write(" </trackList> "+cLf);
  outfile.write(" </playlist> "+cLf);
  outfile.close();

  %>
<object type="application/x-shockwave-flash" width="400" height="170"
          data="xspf_player.swf?playlist_url=generate.xml">
          <param name="movie" value="xspf_player.swf?playlist_url=generate.xml" />

</object>

任何人都可以为我提供替代方案吗? 如果您也展示一些示例代码,那将会非常有帮助。


作为一个开始,ServletRequest.getRealPath(字符串路径)已弃用。适当的替换是:

ServletContext context = session.getServletContext();
String realContextPath = context.getRealPath(request.getContextPath());

然而,API 文档ServletContext.getRealPath(字符串路径) state:

“这个方法返回null如果 servlet 容器出于任何原因无法将虚拟路径转换为真实路径(例如,当从 .war 存档提供内容时)。”

所以 API 正在履行它的合同!但是,一切都不会丢失,因为您可以使用以下方法从 WAR 加载资源,如中定义的Servlet上下文:

ServletContext context = session.getServletContext();
InputStream is = context.getResourceAsStream("generate.xml");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用 .war 文件部署时 getRealPath() 返回 null? [复制] 的相关文章

随机推荐

  • Rails:关闭错误显示

    当我通过 URL 访问我的 Rails 项目中不存在的帖子时 posts 13 浏览器显示一个详细错误 ActiveRecord RecordNotFound in PostsController show Couldn t find Po
  • Wildfly 和 JAAS 登录模块

    我正在玩Wildfly 9 0 1 Final and JAAS但我没有那么多乐趣 我实现了我的自定义登录模块 public class MongoLoginModule implements LoginModule Inject prot
  • --add-modules 仅在编译时添加[重复]

    这个问题在这里已经有答案了 我正在用 Maven 构建我的项目java 9 我已经添加到我的pom xml file
  • R基于checkboxGroupInput闪亮选择变量

    我正在使用 Rshiny 开发一个交互式分析工具 现在我想根据 checkboxGroupInput 中的变量检查进行分类树 我如何选择该数据子集 谢谢 UI dateInput date Enter date value date che
  • 带链接的 D3 树形图

    我是新来的d3 js图书馆 我正在尝试制作一棵树this one 但带有一个转到每个节点上的外部页面的链接 是否可以 我尝试向每个节点添加一个 svg a 但使所有树都消失 Update 我从上面链接的页面的 html 中获取此代码 链接的
  • 如何允许使用 ASP.NET 下载 .json 文件

    如何从旧的 ASP NET 站点 我相信是 IIS6 下载 json 文件 我收到 404 页面而不是 JSON 文件 我需要创建 web config 文件吗 里面有什么 如果您想手动添加对站点的支持 您只需将以下内容添加到 web co
  • 在 iPhone 上创建文件夹的权限

    经过大约半年的挖掘 我发现我没有创建文件夹的权限 那么如何获得创建文件夹的权限呢 NSFileManager defaultManager createDirectoryAtPath NSString stringWithFormat do
  • 此类型可能无法实现特征“Copy”[重复]

    这个问题在这里已经有答案了 更新 最小可重现示例可在铁锈游乐场 请注意 仅在停止处添加正常的导出语句并不够 这就是为什么它不包含在原始内容中的原因 我想用 Rust 制作一本奇特的通用字典 以便更快地进行原型设计 其中的键是Strings
  • Windows 注册表文件关联菜单

    我最近 今天 开始从 Delphi 内部干预我的注册表 一切正常 我的自定义文件类型现在可以使用我的程序打开 但有两个问题我无法解决 1 我想要从所有文件类型中选择 打开方式 所以我添加了 reg TRegistry Create reg
  • 链接 Apache 库

    海湾合作委员会 4 4 2 我已经安装了 apache 运行时便携式 4月1 3 9 configure make make test make install 一切都安装得很好 我在我的 usr local apr lib以下所有库和包含
  • 将 Plist (NSString) 解析为 NSDictionary

    所以我有一个 plist 结构字符串 它是动态获取的 不是从文件系统获取的 我如何将此字符串转换为 NSDictionary 我尝试将其转换为 NSData 然后使用 NSPropertyListSerialization 转换为 NSDi
  • 绑定到 C#/WPF 中 DataTable 中包含句点的字段

    我有一个 SQL CE 数据库 该数据库超出了我的控制范围 该数据库的字段格式为 并在列名称中包含句点 这些列总是不同的 所以我不能有强类型的数据字段 我的任务是将动态表数据显示到 DataGrid 中 通常 这很容易 自动生成列 一切都很
  • 如何向 WTForms 添加 Bootstrap 验证

    我将 WTForms 与 Flask 结合使用 我想集成引导表单验证对于我的表格中的错误 我有一个基本的登录表单设置 如下所示 class LoginForm FlaskForm Login form email EmailField Em
  • PHP 8 上大于或小于比较的意外结果

    以下返回false在 PHP 7 上但是true关于 PHP 8 有人可以解释为什么会发生这种情况吗 var dump U0M262 gt 100000 字符串和数字之间的比较没有明显正确的结果 在许多语言中 它只会给出一个错误 在其他语言
  • 如何在 Swift 中设置 CADisplayLink 并在目标和 CADisplayLink 实例之间使用弱引用

    在 Objective C 中 我们可以使用代理模式初始化 CADisplayLink 来打破强引用 WeakProxy weakProxy WeakProxy weakProxyForObject self self displayLin
  • angularJS:如何在父作用域中调用子作用域函数

    如何从父作用域调用子作用域中定义的方法 function ParentCntl I want to call the scope get here function ChildCntl scope scope get function re
  • 从 C# 以编程方式使用 cmd.exe

    我想从 C 在 cmd exe 上运行一系列命令 我只需要打开一个cmd窗口 我需要在执行过程中和完成后保持cmd窗口打开 我需要显示命令 编辑 在打开的cmd窗口中 编辑 执行以及命令的输出 所以基本上我想像手动用户一样打开并使用 cmd
  • 单击 Scrapy 中的按钮

    我正在使用 Scrapy 来抓取网页 我需要的一些信息只有在点击某个按钮时才会弹出 当然点击后也会出现在HTML代码中 我发现 Scrapy 可以处理表单 如登录 如图所示here 但问题是没有表格可以填写 所以这并不是我所需要的 我怎样才
  • 是否有 Perl 模块可以使用用户可配置的分隔符轻松读取/写入 CSV 文件?

    我目前正在优化和维护一个 Perl 脚本 用于分析两个 CSV 文件的不同数据 完成数据分析后 各种结果将写入 CSV 文件 但是 根据某些命令行标志 要写入的数据将用逗号 或竖线 分隔 因此 代码有点复杂 主要是因为我的业务部门的成员无法
  • 为什么使用 .war 文件部署时 getRealPath() 返回 null? [复制]

    这个问题在这里已经有答案了 getRealPath 返回本地系统中的实际路径 但在使用 war file