0

msc というサブディレクトリを持つ webapp があります。_etc/xml という名前の msc のサブディレクトリに xml ファイルを保持しています。

私のローカルマシンの絶対パスはc:/myproject/tomcat/webapps/javawork/msc/_etc/xml/msc_approval_managers.xml

msc ディレクトリ内の jsp ファイルで xml ファイルを取得し、それを解析して、jsp ページの HTML で使用するテキストを取得できるようにしたいと考えています。Java スクリプトレット コードを jsp ファイルに配置するのがプログラミングのベスト プラクティスではないことは理解していますが、それは私に求められていることです。私はその部分を制御することはできません。最終的に私のコードは本番サーバーに置かれるので、相対パスを使用して xml ファイルを取得する必要があります。ColdFusion では信じられないほど単純で (CF サイトを Java に変換する必要があります)、次のような 3 行で完了しました。

<!--- 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 に答える