jspと同じディレクトリのファイルを出力する

JSPがおかれているディレクトリにあるファイルを出力したい。
Servlet環境だとjava.io.File(ファイル名)の起点となるパスをどう指定するべきか。

問題はnew File("hoge.txt")はJVMがServletコンテナを起動するときのカレントディレクトリに
なっているということ。tomcatなんかだとCATALINA_HOME/bin/になってたりする

ちょっと考えてみた。

■String baseDir ="C:/jetty6/webapps/myweb/";のあとnew java.io.File(baseDir+dir);
フルパス指定なのがディレクトリを他所に動かしたときなどにダメだ。。


■context-paramかinit-paramで指定する
web.xmlの編集がめんどい。複数作るときに書き換えが必要
”WEB-INFのあるパスの一個上”とかも結局フルパスで指定なんてダサい。


うまく埋め込んだ文字列に依存せずファイルパスだけに依存させたい。


標準のServlet世の中には文字列を引数にとってその実際の(ファイルシステム上の)パスを
教えてくれるメソッドがあるらしい。
application.getRealPath("/path/index.jsp")

ここで/pathはコンテキストルートからのもの。
http:/localhost/myweb/path/index.jsp
index.jsp内で上記を実行したとする。
この例では C:/jetty6/webapps/myweb/path/index.jspを返すとする。

/path/index.jspの代わりにrequest.getServletPath()を与えてやれば良さそう。

applicationrequestはここではJSP暗黙オブジェクト

で、まとめてみた。


JSPファイルを置いたディレクトリにある画像ファイル(拡張子で判別)をimgタグで表示するJSP。


<%@ page import="java.util.*,java.io.*,java.net.*,java.util.regex.*" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String title = "Thsumbms" ;
pageContext.setAttribute("pagename",title);
%>
<html>
<head>
<title>${pagename}</title>
</head>
<body>

<h1 style="background:gray;">${pagename}</h1>

<%
String baseFile = application.getRealPath(request.getServletPath());
File docDir = new File(new File(baseFile).getParent());

ArrayList<String> fnlist = new ArrayList<String>();

for (File file : docDir.listFiles()) {
fnlist.add(file.getName());
}


pageContext.setAttribute("fnlist",fnlist);

%>

<c:forEach items="${fnlist}" var="filename">
<a href="${filename}"> <c:out value="${filename}" escapeXml="true" /> </a><br>

</c:forEach>
</body>
</html>



致命的にダメってことはないよね?

JUGEMテーマ:コンピュータ




コメント

このブログの人気の投稿

4.3.0 Temporary Lookup Failureでドツボってた話

tomcat起動時の環境変数でJRE_HOMEを指定するときに

何が得られて何処へ向かうかだけを問うべき