2015年6月6日星期六

[杂] Servlet 文件上传

最近做项目,用eclipse J2EE写Servlet,想尝试在Servlet里面写一段代码,新建一个文件存到当前workspace本项目的文件夹下面。

    String file = "haha.txt";
    String path = session.getServletContext().getRealPath(""); 
    try {
        FileWriter outfile = new FileWriter( path + "/" + file);
        System.out.println(path);
        outfile.write(“HAHAHA!!“);
        outfile.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

    }

但是无论怎样尝试都做不出来,明明同样的代码当作Java Application跑就完全没有问题。问了大神,大神说这种事情是做不到的。本着钻研的精神,努橙决定仔细研究下。查了半天资料,找到一个在servlet中取得当前目录的方法。(https://community.oracle.com/thread/1849683)

先在servlet中get到session:
HttpSession session = request.getSession();

然后找当前目录:
String path = session.getServletContext().getRealPath(""); 

最后s.o.p出来的path长这样(什么鬼!):
/Volumes/doc/workspace 1/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/task14

和真正的本项目的目录(/Volumes/doc/workspace 1/task14)是两个样子嘛!所以才写不过去嘛!把path hardcode 成随便一个已知的目录,就完全可以新建文件!继续本着钻研的精神,努橙决定把task14这个项目部署到tomcat上,看看这次会不会可以写过去。于是乎,在/Users/.../Downloads/apache-tomcat-8.0.14/webapps/task14这个目录下面成功找到了haha.txt。以后可以研究一下webapp是怎么在eclipse的tomcat server上跑的。哈哈!

没有评论:

发表评论