我有一个名为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页面中,这只是我必须处理手头任务的要求。感谢。
答案 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 ..." );
%>