2016-06-17 5 views
0

私の動的Webプロジェクトは以下の構造を持っています。リモートサーバー上のjspファイルからファイルデータを読み取ることができません

WebContent/WEB-INF/jsps/index.jsp。私は自分のjspファイルからfile.txtにアクセスし、そのファイルからコンテンツを表示しようとしています。 file.txtはWebContent/resourcesフォルダーにあります。私が使用している

String jspPath = session.getServletContext().getRealPath("/resources"); jspPath = jspPath.replace("\\", "/"); String fileName = "/file.txt"; String txtFilePath = jspPath + fileName;

ファイルを開いた後、コードは、コンテンツを表示します。

ローカルホストで動作していますが、オンラインでアップロードすると、jspページのテキストファイルのコンテンツが表示されません。

なぜ動作しないのか分かりません。ファイルパスはFileNotFoundExceptionをスローしていたので問題になるかもしれませんが、いくつかの変更を加えて修正しました。今はコンテンツを表示していません。誰かが助けてくれますか?私は.warファイル用のオープンシフト展開プラットフォームを提供しています。

+0

サーバーにデプロイされたファイルを読むためにファイルパスを使用することはお勧めできません。異なるマシンは異なるファイルシステムを使用し、一部のアプリケーションサーバーは展開されたコンテンツを圧縮します。 getClass()。getResource( "/ resources/file.txt")をうまく使ってみませんか? –

+0

私はすでに試しましたが、このエラーを出しています:org.apache.jasper.JasperException:JSPのクラスをコンパイルできません。 – Swap

+0

コードが間違っているか、一部のインポートを忘れたようです。あなたが<%@ page import = "java.io。*"%>をインクルードするようなストリームチェックとしてファイルを読んでいるなら、とにかくこのロジックをjspに入れたいのですか? jspでJavaコードを書くことは時代遅れです。物事を作る簡単な方法があります。 –

答えて

1

実際には、上記のJSPページは、エンドユーザがアクセスできないWEB-INFフォルダにあるため実行されません。そのため、JSPをWEB-INFから除外してください。
ファイルを読み込むために、あなたは簡単な方法でファイルをロードし、印刷することができます。getRealPathを呼び出し、上記の方法は、JBossのような仮想ファイル・システムを使用して、アプリケーション・サーバでは動作しませんので

<%@page import="java.io.*"%> 
<% 
InputStream in=config.getServletContext().getResourceAsStream("/resources/hello.txt"); 
int ch; 
while((ch=in.read())!=-1){ 
    out.print((char)ch); 
} 
in.close(); 
%> 

が。

注:パフォーマンスを向上させるために、ファイルを読み込むための他の方法(たとえば、バッファリングとキャッシュ)を使用できますが、これはこの質問の範囲外です。

+0

私は、コントローラとビューリゾルバを使ってspringとjspページを表示しています。すべてのjspファイルはWEB-INF/jspsフォルダにあり、マシン上で正常に動作しています。また、他のjspファイルはすべてopensshiftサーバー上で正常に動作していますが、テキストファイルを開いているjspファイルは、テキストファイルから内容を読み込んで表示していません。そのjspページのすべての静的コンテンツが表示されていますが、テキストファイルのデータは表示されていません。 – Swap

関連する問題