【问题标题】:org.apache.jasper.JasperException: Unable to compile class for JSPorg.apache.jasper.JasperException:无法为 JSP 编译类
【发布时间】:2014-02-07 14:32:56
【问题描述】:

我是使用库的新手,但我需要能够向忘记密码的用户发送电子邮件。我正在尝试使用 JavaMail 和 Apache Commons Email 来实现这一点。但是,我想我一定是错误地导入了库。

当我尝试发送电子邮件时,我收到以下消息:

Apr 17, 2011 11:54:33 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 60 in the jsp file: /sendpw.jsp
The type javax.mail.Authenticator cannot be resolved. It is indirectly referenced from required .class files

代码:

57:                 EmailAuthentication ea = new EmailAuthentication();
58:                 String authUser = ea.getUser();
59:                 String authPw = ea.getPw();
60:                 email.setAuthenticator(new DefaultAuthenticator(authUser, authPw));
61:                 email.setTLS(true);
62:                 email.setFrom(authUser+"@gmail.com");
63:                 email.setSubject("Your Last Love Password");

堆栈跟踪:

at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:349)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:327)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:314)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:589)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:662)

我尝试了一些方法:

  1. 将包含所有.java文件的org.apache.commons.mail文件夹复制到我的netbeans项目的源文件中,然后将javamail库添加到项目中。这是第一次工作,我能够发送一些成功的电子邮件,但不知何故它停止工作(可能是因为我清理并构建了项目)并且我收到了上述消息。

  2. 在 commons-email-1.2 的 bin 版本中创建了一个包含 jar 文件的新库,就像我对 javamail 所做的一样,并将其添加到项目中。这似乎不起作用,因为当我打开 defaultauthenticator.java 时,它无法导入 javax.mail.Authenticator,尽管我已将两个库添加到同一个 netbeans 项目中。

  3. 将 javamail 中的 mail.jar 和所有其他 .jar(dsn.jar、imap.jar、pop3.jar 等)添加到与 apache common-email-1.2 相同的库中,这意味着 2 个类路径文件( mail.jar 和 commons-email-1.2.jar) 和 6 个源文件。这一次,defaultauthenticator.java 没有错误,但仍然无法发送任何电子邮件(与上面相同的服务器错误)。

涉及的部分代码为:

           HtmlEmail email = new HtmlEmail();

            email.setHostName("smtp.gmail.com");

            email.setSmtpPort(587);

            ......

            email.setAuthenticator(new DefaultAuthenticator(authUser, authPw));

            email.setTLS(true);

            email.setFrom(authUser+"@gmail.com");

            email.setSubject("Your Password");

....

我使用的是 Netbeans 6.9.1,tomcat 6.0.26。

我做错了什么?

【问题讨论】:

    标签: class jsp exception tomcat compilation


    【解决方案1】:

    您需要 mail.jar - 可能还有 activation.jar - 可以从您的 Web 应用程序中访问的库,所以它们应该是

    • 在 tomcat6/lib 中,或
    • 在 yourwebapp/WEB-INF/lib 中

    文件夹。

    【讨论】:

    • 谢谢!当我将 mail.jar 和 activation.jar 放入 tomcat6/lib 时,它起作用了。我没有意识到我需要这样做(我认为我不需要对activation.jar 做任何事情,因为我使用的是JDK1.6)。当我将它们都放入我创建的 WEB-INF/lib 文件夹中时它不起作用(我首先尝试了您的第二个选项)。希望它从现在开始继续顺利运行:)
    【解决方案2】:

    如果有人在使用 Maven 项目并遇到此错误,请从 Pom.xml 中删除 jasper 属性和依赖项。

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多