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(" "+cLf); outfile.write("" +cLf); outfile.write(" "+cLf); outfile.close(); %>My Band Rocks Your Socks "+cLf); outfile.write(""+cLf); %> <%! String[] sports; %> <% sports = request.getParameterValues("sports"); out.println(" "+cLf); outfile.write("hello
"); 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(""+cLf); //outfile.writeln(); }// end of outer for() } //else outfile.writeln ("none"); outfile.write("
任何人都可以为我提供替代方案吗?如果您也展示了一些示例代码,那将非常有用.
首先,不推荐使用ServletRequest.getRealPath(String path).适当的替代是:
ServletContext context = session.getServletContext(); String realContextPath = context.getRealPath(request.getContextPath());
但是,ServletContext.getRealPath(String path)状态的API文档:
"
null
如果servlet容器因任何原因(例如,当从.war存档中提供内容时)无法将虚拟路径转换为实际路径,则此方法返回."
所以API正在履行合同!但是,所有这些都不会丢失,因为您可以使用以下方法从WAR加载资源,如ServletContext中所定义:
ServletContext context = session.getServletContext(); InputStream is = context.getResourceAsStream("generate.xml");
有点晚了,但是当我在WebLogic中遇到这个问题时,我遇到了这个问题.我的解决方案是将此添加到我的weblogic.xml
:
true
当您不希望(或不能)编辑WebLogic服务器上的配置时,我发现此解决方案更好.
你使用Weblogic吗?
如果是 - 那么这是一个Weblogic问题,您可以在Weblogic管理控制台中修复 - >域 - > Web应用程序 - 单击复选框"已存档的实际路径".
请参阅:http://ananthkannan.blogspot.com/2009/12/servletcontextgetrealpath-returns-null.html