首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileNotFoundException web.xml

FileNotFoundException web.xml
EN

Stack Overflow用户
提问于 2011-12-13 01:00:50
回答 1查看 1.4K关注 0票数 0

继续我的学业。我试图将一些数据写入txt文件,但我正在接收此异常。我在用Tomcat7.0。EmailList.txt在文件夹中,所以我不知道会发生什么。你们能帮帮我吗

web.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>AddToEmailListServlet</servlet-name>
        <servlet-class>email.AddToEmailListServlet</servlet-class>
        <init-param>
            <param-name>relativePathToFile</param-name>
            <param-value>/WEB-INF/EmailList.txt</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>AddToEmailListServlet</servlet-name>
        <url-pattern>/addToEmailList</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>join_email_list.jsp</welcome-file>
    </welcome-file-list>
</web-app>

servlet类这个类将处理数据。

代码语言:javascript
复制
package email;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import business.User;
import data.UserIO;

public class AddToEmailListServlet extends HttpServlet
{   @Override 
    protected void doPost(HttpServletRequest request, 
                          HttpServletResponse response) 
                          throws ServletException, IOException
    {
        // get parameters from the request
        String firstName = request.getParameter("firstName");
        String lastName = request.getParameter("lastName");
        String emailAddress = request.getParameter("emailAddress");

        User user = new User(firstName, lastName, emailAddress);

       //validation
        String message = "";
        String url = "";
        if (firstName.length() == 0 || lastName.length() == 0 || emailAddress.length() == 0) {
            message = "Please fill out all three boxes";
            url = "/join_email_list.jsp";
        }else{
            message = "";
            ServletConfig config = getServletConfig();
            String relativePath = config.getInitParameter("relativePathToFile");
            UserIO.addRecord(user, relativePath);
            url = "/display_email_entry.jsp";
        }
        request.setAttribute("user", user);
        request.setAttribute("message", message);

        //forward request and response

        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
        dispatcher.forward(request, response);             
    }    
}

I/O类

一揽子数据;

进口java.io.;进口java.util.

代码语言:javascript
复制
import business.User;

public class UserIO
{
    public static void addRecord(User user, String filename) throws IOException
    {
        File file = new File(filename);
        PrintWriter out = new PrintWriter(
                new BufferedWriter(new FileWriter(file)));
        out.println(user.getEmailAddress()+ "|"
                + user.getFirstName() + "|"
                + user.getLastName());        
        out.close();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2011-12-13 01:08:02

问题在于UserIO#addRecord()方法背后的代码,您根本没有在问题中说明这一点,因此很难找出根本原因。但是我想你只是在给定的相对路径上做了一个new File()。这是个坏主意,原因如下:

  • new File()操作相对于磁盘文件系统中的当前工作文件夹,而不是webapp文件夹结构。即使如此,前面的斜杠/使其相对于磁盘根目录。WAR不一定是在磁盘上展开的,它也可以在内存中展开,这样就没有任何有效的磁盘文件系统路径可以在new File().
  • When中重新部署,或者即使服务器重新启动,扩展WAR文件夹中的所有更改也会丢失,因为它们不在原始WAR文件中。

而是在扩展的WAR文件夹之外的某个绝对路径上写入文件,或者使用数据库代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8483090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档