0

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

我本地机器上的绝对路径是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 页面中,这只是我手头任务必须处理的要求。谢谢。

4

1 回答 1

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 ..." );
%>
于 2012-07-12T19:12:55.777 回答