0

我正在用 Maven 开发一个项目。在发送电子邮件的类中,在运行和开发模式下,我收到以下错误:Caused by: java.io.FileNotFoundException: jQuery/images/logo.png (Ficheiro ou directory inexistente) ==> translation = File or找不到目录。

我尝试了很多路径,例如“./jQuery/images/logo.png”、“/jQuery/images/logo.png”等。完整的相对路径是:“src/main/webapp/jQuery/images/logo.png”。

在“target”文件夹中,路径是“project-1.0-SNAPSHOT/jQuery/images/logo.png”。里面的war文件,是“jQuery/images/logo.png”。

我认为这并不重要,但我使用 NetBeans 7.1.1 作为 IDE。

发现运行时返回的绝对路径是“/home/user/apache-tomcat-7.0.22/bin/jQuery/images/logo.png”!...不是项目路径!

如何在 Maven 项目中获取 webapp 文件夹中的文件和 Java 类的后代?

代码是:

MimeBodyPart attachmentPart = null;
        FileDataSource fileDataSource = null;
        for (File a : attachments) {
            System.out.println(a.getAbsolutePath());

            attachmentPart = new MimeBodyPart();
            fileDataSource = new FileDataSource(a) {

                @Override
                public String getContentType() {
                    return "application/octet-stream";
                }
            };
            attachmentPart.setDataHandler(new DataHandler(fileDataSource));
            attachmentPart.setFileName(fileDataSource.getName());

            multipart.addBodyPart(attachmentPart);
        }

        msg.setContent(multipart);
        msg.saveChanges();

        Transport transport = session.getTransport("smtp");
        transport.connect(host, from, "password");
        transport.sendMessage(msg, msg.getAllRecipients());
4

1 回答 1

0

这条路.../apache-tomcat-7.0.22/bin/jQuery/...真的很奇怪。bin包含 Tomcat 的脚本,它不应包含任何代码或与您的应用程序相关的任何资源。即使您在上下文中部署您的应用程序/bin,资源最终也会在`.../apache-tomcat-7.0.22/webapps/bin/...

这看起来像是在早期部署中犯的一个错误。

现在回到你的问题。要获取 Web 应用程序的资源路径,请使用以下代码:

String absolutePath = getServletContext().getRealPath("/jQuery/images/logo.png");

文档

于 2012-05-08T12:10:10.707 回答