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()を与えてやれば良さそう。
applicationとrequestはここではJSP暗黙オブジェクト
で、まとめてみた。
JSPファイルを置いたディレクトリにある画像ファイル(拡張子で判別)をimgタグで表示する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()を与えてやれば良さそう。
applicationとrequestはここでは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テーマ:コンピュータ
コメント
コメントを投稿
「コメントを投稿できるユーザー」の範囲は変更される可能性があります。