如何在webapp中指定文件路径?

时间:2012-07-12 17:58:07

标签: jsp xml-parsing relative-path

我有一个名为msc的子目录的webapp。我将一个xml文件保存在名为_etc / xml的msc子目录中。

我本地计算机上的绝对路径为c:/myproject/tomcat/webapps/javawork/msc/_etc/xml/msc_approval_managers.xml

我希望msc目录中的jsp文件能够获取xml文件并通过它解析以获取要在jsp页面的HTML中使用的文本。我知道将java scriptlet代码放在jsp文件中可能不是最好的编程实践,但这就是我要做的事情,所以请不要对此感到悲伤。我无法控制那部分。最终我的代码将被放到生产服务器上,所以我需要使用相对路径来获取xml文件。在ColdFusion中,它非常简单(我必须将CF站点翻译成Java),并且完成了三行:

<!--- Set path to msc_approval_managers.xml ---> 
<cfset pathToXml = ExpandPath("/msc/_etc/xml/msc_approval_managers.xml")>

<!--- Read xml file into string variable ---> 
<cffile action="read" file="#pathToXml#" variable="xmlDoc"> 

<!--- Parse xml into an xml object ---> 
<cfset XMLDoc = XmlParse(xmlDoc)>

然后我可以循环浏览XMLDoc。显然在Java中并不那么简单。我有解析xml的代码并循环遍历它。我只需要找到一种使用相对路径获取文件本身的方法,这样代码就可以上传到生产服务器并知道文件所在的位置(在该服务器上)而没有绝对路径。这可以用Java完成,特别是在jsp页面中吗?

任何建议都会受到赞赏,同样,请不要质疑为什么它必须在jsp页面中,这只是我必须处理手头任务的要求。感谢。

1 个答案:

答案 0 :(得分:2)

这对于jsp来说真是奇怪的任务......但你可以获得真正的路径然后用你的代码加载和解析文件。

<%
String path = request.getServletContext().getRealPath("/msc/_etc/xml/msc_approval_managers.xml");
out.write(path);
%>

或者获取输入流:

<%
java.io.InputStream stream = request.getServletContext().getResourceAsStream("/msc/_etc/xml/msc_approval_managers.xml");
if (stream != null) out.write("Got input stream ..." );
%>