首頁>Program>source

getRealPath() 正在返迴本地系統中的實際路徑,但与 .war一起部署時返迴null 檔案。

<%@ 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>

有人可以為此提供替代方案吗? 如果還顯示了一些示例代碼,那將非常有帮助。

最新回復
  • 5月前
    1 #

    首先,不建議使用ServletRequest.getRealPath(String path).適当的替換是:

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

    但是,ServletContext.getRealPath(字元串路徑)狀態的API文件:

    "This method returns null 如果Servlet容器由於某種原因(例如,当从.war归档中提供內容時)無法將虛擬路徑轉換為真實路徑時。"

    因此,API正在履行其合同! 但是,一切都不会丢失,因為您可以使用ServletContext中定義的以下方法从wAR載入資源:

    ServletContext context = session.getServletContext();
    InputStream is = context.getResourceAsStream("generate.xml");
    

  • 5月前
    2 #

    有點晚,但是当我在webLogic中遇到這个問题時,我遇到了這个問题.我的解決方案是將此添加到我的 weblogic.xml

    <?xml version='1.0' encoding='UTF-8'?>
    <weblogic-web-app>
        <container-descriptor>
            <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
        </container-descriptor>
    </weblogic-web-app>
    

    当您不想(或無法)在webLogic服務器上編輯配置時,我發現此解決方案更好。

  • 5月前
    3 #

    您使用weblogic吗?

    如果是-則這是一个weblogic問题,您可以在weblogic管理控製台中解決->域->web應用程式-單击"已啟用實際存档路徑"複選框。

    請參阅:http://ananthkannan.blogspot.com/2009/12/servletcontextgetrealpath-returns-null.html

  • 5月前
    4 #

    這也解決了该問题:

    weblogic.xml

    <?xml version = '1.0' encoding = 'windows-1252'?>
    <weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-web-app http://www.bea.com/ns/weblogic/weblogic-web-app/1.0/weblogic-web-app.xsd" xmlns="http://www.bea.com/ns/weblogic/weblogic-web-app">
    <container-descriptor>
      <index-directory-enabled>true</index-directory-enabled>
      <show-archived-real-path-enabled>true</show-archived-real-path-enabled>
    </container-descriptor>
    <virtual-directory-mapping>
      <local-path>bla.war</local-path>
      <url-pattern>*</url-pattern>
    </virtual-directory-mapping>
    <context-root>bla</context-root>
    

  • 5月前
    5 #

    我不认為可以做您想做的事情.

    您應该使用getResource从war檔案中讀取xml檔案(這也可以在没有war的情况下工作)

    servletContext.getResourceAsStream("/generate.xml")
    

    斜杠取決於generate.xml的儲存位置。

  • Sass檔案的匯入語句中可以使用變數吗?
  • animation:在不使用MPMoviePlayer的情况下在iPhone上對圖像(如電影)进行動画處理的方法