アプリ版:「スタンプのみでお礼する」機能のリリースについて

 ファイルからテキストファイルを読み込んで、フォームから入力されたデータと照合し、ファイルにあればログインするというようなwebアプリを作ろうとしています。

しかし、テキストファイルが読み込まれてないようで、正しいパスワードを入力してもログインできません。読み込むファイルへのパス指定は絶対パスなのでしょうか、呼び出し元からの相対パスを指定するのでしょうか?

また、テキストファイルを置くディレクトリは決まっているのでしょうか?(「WEB-INFより上の階層に置く」など)

ちなみにサーバ環境はLinux+tomcat3.2.1+apache

---------------------------------------------------------------

public class LoginDataBeans {

///////// UserDataクラス /////////

private class UserData{
public String user_id;
public String password;
}

///////// メンバ変数 /////////

ArrayList userList;
private static final String logFilename = "/tomcat/logindata";←ここのパスは「絶対パス」?、それともこのファイルからの「相対パス」?

///////// コンストラクタ /////////

public LoginDataBeans(){
String item;
userList = new ArrayList();
try{
BufferedReader in = new BufferedReader(new FileReader(logFilename));
while((item = (String)in.readLine()) != null){
UserData udat = new UserData();
StringTokenizer st = new StringTokenizer(item);
udat.user_id = st.nextToken();
udat.password = st.nextToken();
userList.add(udat);
}
in.close();
}
catch(IOException e){
e.printStackTrace();
}
}

A 回答 (2件)

ファイルのパス名を絶対パスで指定するか、相対パスで指定するかというのはどちらでも問題なく出来るはずです。



絶対パスであれば、ファイルが存在する場合には問題なくアクセスできるはずですが、相対パスで指定する場合には環境に応じてファイルをどこに置くかが変わってきます。

サーバの環境がtomcat+apacheということで、tomcatが単独ではなくapcheにアドオンで動いているようなので、この場合相対パスのルート位置は、apache.confで指定したサーブレットのルート位置になっていませんか?

---- apache.conf ----
Alias serv_dir "/xxx/yyy"
----------------------
なら、相対パスのルートは、/xxx/yyy の位置


個人的には、ファイルにアクセスするようなサーブレットを作成する場合、web.xmlファイルに<init-param>を記述して、そこに絶対パスを記述し、サーブレット側では、getInitparameter()メソッドを使ってルート位置を取得して作業するようにしています。

-- web.xml --
   :
<init-param>
<param-name>DataDir</param-name>
<param-value>/servlet/data/</param-value>
</init-param>
   :
--------------

-- Servlet ----
public void init(ServletConfig config) {
   :
 String DataDir = config.getInitParameter("DataDir");
 String DataFile = DataDir + "datafile";
   :
}
---------------

こうしておけば、ディレクトリ構造が変わった場合にも、web.xmlの記述を修正するだけで動作するので。。。

どうでしょうか?
    • good
    • 0
この回答へのお礼

XMLから取り込めるんですね。こりゃあ便利だ!
やはり修正作業などに柔軟に対応できるように設計することが
大事なのですね。
どうもありがとうございました。

お礼日時:2001/08/28 18:21

C:\\temp\\aaa.txt


というようなサーバーの中での絶対パスで開けました。
が、相対パスで開けるかどうかはよくわかりません。
相対パスだとすると、サーバーのexeファイルがある場所(アプリケーションサーバーのbinフォルダとか)からの相対パスになると思います。
    • good
    • 0
この回答へのお礼

絶対パスでは出来ました。
いちいち全部打ち込まなくても、ファイル名の前に”./”を
記述しても絶対パスとして扱われるようです。
回答ありがとうございます。

お礼日時:2001/08/28 18:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!