为什么输出不会从Servlet的WEB-INF文件夹下的文件名为EmailList.txt中打印出来

Ami*_*mar 2 java file-io servlets

这是我的servlet类,它负责从HTML页面获取数据并将该数据存储在WEB-INF目录下的EmailList.txt文件中:

Servlet类的代码片段......

//Get Parameters from the request object
String firstName=request.getParameter("firstName");
String lastName=request.getParameter("lastName");
String emailId=request.getParameter("emailId");

//Get a relative file name
ServletContext context=getServletContext();
String path=context.getRealPath("WEB-INF/EmailList.txt");

//Use Regular Java object to write the data to the file
UserData userData=new UserData(firstName, lastName, emailId);
UserIO.addUser(userData, path);
Run Code Online (Sandbox Code Playgroud)

其中的UserData是一个普通的Java类setter方法getter方法,以及UserIO包含代码的内容写入到文件EmailList.txt

UserIO类的代码如下:

public class UserIO {

    public static void addUser(UserData userData, 
                               String filePath)
                               throws IOException {

        File file=new File(filePath);

        PrintWriter out=new PrintWriter(new FileWriter(file, true));

        out.println(userData.getFirstName()+"\t"
                + userData.getLastName()+"\t"
                + userData.getEmailId());
        out.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

A4L*_*A4L 5

右键单击eclipse中的文件转到属性,你会看到这是一个不同的文件.

实际上你不应该尝试在这样的位置编写/创建文件.您的应用程序可能无法始终从.war存档中解压缩,在这种情况下ServletContext#getRealPath()将返回null.

另一种方法是在web.xml中定义上下文init参数,并为应用程序可见的文件系统设置根目录

<context-param>
    <param-name>fsroot</param-name>
    <param-value>E:\CodePractice</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

并在您的应用程序中的任何位置(servlet/JSP)检索它,您可以使用ServletContext#getInitParameter(java.lang.String):

String path = getServletContext().getInitParameter("fsroot");
Run Code Online (Sandbox Code Playgroud)