【问题标题】:fixing apache v9.0 Server Tomcat v9.0 Server at localhost failed to start error修复 apache v9.0 Server Tomcat v9.0 Server at localhost failed to start 错误
【发布时间】:2017-01-11 15:13:31
【问题描述】:

我有一个简单的 java ee 项目,我需要向用户发送电子邮件,我发现使用 javamail 和 gmail 免费 smtp 是可能的。

我的邮件发件人实现:

package duck.reg.pack;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

@WebServlet("/sendmailtls")
public class SendMailTLS extends HttpServlet {
public static void main(){

final String username = "john.fob@gmail.com";
final String password = "Password";

Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
    }
});

try {

    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress("joh.fob@gmail.com"));
    message.setRecipients(Message.RecipientType.TO,
        InternetAddress.parse("jon.fob@yahoo.com"));
    message.setSubject("Testing Subject");
    message.setText("Dear Mail Crawler,"
        + "\n\n No spam to my email, please!");

    Transport.send(message);

    System.out.println("Done");

} catch (MessagingException e) {
    throw new RuntimeException(e);
}
}
}

现在的问题是,当我编译我的程序时,我得到 apache 错误提示:

'Starting tomcat v9.0 Server at localhost'遇到了问题。 Server Tomcat v9.0 Server at localhost 启动失败。

我发现如果我删除了

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(username, password);
}
});

它编译得很好。

【问题讨论】:

  • 无法编译您的 Web 应用程序和无法启动 Tomcat 服务器是两个不同的问题。你是如何编译你的程序的,你是如何启动 Tomcat 的?您是否使用一键“编译和部署”的 IDE?您是如何将 JavaMail 添加到您的项目中的?你把jar文件放在什么地方了吗?是否添加了 Maven 依赖项?
  • 这实际上与编译无关,我的意思是,当我的代码中有session session... 时,我什至无法自行重启我的 apache 服务器,而我的项目中有 javamail名为 lib 的文件夹中的目录
  • 很明显你做错了什么,但你没有向我们提供足够的细节来告诉我们你正在做什么,以便我们帮助你。你如何编译你的应用程序?编译成功了吗?你如何打包你的应用程序(例如,在一个war文件中)?如何将应用程序部署到 Tomcat 服务器?如何停止并重新启动 Tomcat 服务器?您的 Tomcat 服务器是否在您用于编译应用程序的同一台机器上运行?你把 JavaMail jar 文件放在哪里了?

标签: java apache tomcat jakarta-mail


【解决方案1】:
kindly check all xml files again and cross check whether they are dependent on each other ,remove that all dependency or fix that dependency and after that follow the following steps 

1>right click project name
2>Run on server 
3>select installed tomcat version
4>then next 
5>remove all project from right side box 
6>keep only which u want to run
7>finish

【讨论】:

    【解决方案2】:

    更改tomcat端口,在eclipse上的服务器选项卡,右键->打开然后更改Tomcat管理端口和HTTP/1.1端口,它们可能在其他地方使用。

    【讨论】:

      【解决方案3】:

      删除所有@WebServlet 注释。 使用 web.xml 文件来处理所有的映射。

      <servlet>
      <servlet-name>xxx</servlet-name>
      <servlet-class>xxx.xxx.xxx</servlet-class>
      </servlet>
      
      <servlet-mapping>
      <servlet-name>xxx</servlet-name>
      <url-pattern>/xxxxx</url-pattern>
      </servlet-mapping> 
      

      【讨论】:

        【解决方案4】:

        web.xml 大部分时间都是这里的罪魁祸首。

        <web-app id="WebApp_ID" version="2.4"
            xmlns="http://java.sun.com/xml/ns/j2ee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
           http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        
            <display-name>Spring MVC Application</display-name>
        
            <servlet>
                <servlet-name>springMVC</servlet-name>
                <servlet-class>
                    org.springframework.web.servlet.DispatcherServlet
                </servlet-class>
                <load-on-startup>1</load-on-startup>
            </servlet>
        
            <servlet-mapping>
                <servlet-name>springMVC</servlet-name>
                <url-pattern>/</url-pattern>
            </servlet-mapping>
        
        </web-app>
        

        将内容复制粘贴到您的 web.xml 文件中

        如果您错误地定义了“&lt;?xml version="1.0" encoding="UTF-8"?&gt;”,请将其删除。

        【讨论】:

          【解决方案5】:

          我遇到了这个错误,我注意到导航栏下方的“终止”按钮是红色的。我点击它然后错误消失了。

          【讨论】:

            【解决方案6】:

            在我的情况下,.m2 文件夹中的 jar 已损坏。我删除了它并进行了 maven install 。它再次下载了jar,这次我的服务器能够构建

            【讨论】:

              【解决方案7】:

              如果项目 web.xml 文件(不是服务器 web.xml 文件)中有错误,它将阻止启动服务器。检查并验证与项目相关的 web.xml 和其他 xml 文件。对我来说,当我修复 web xml 文件服务器中的错误时,服务器运行正确。有时服务器缓存会在您正在开发的网页中显示以前的错误。也要小心。

              【讨论】:

                【解决方案8】:

                Apache 服务器通常在端口 8080 上运行,该端口可能很忙,因此请尝试释放该端口。 首先通过 cmd 找到所有进程都在端口 8080 上运行, 查找命令是

                netstat -ano 找到“8080”

                它将列出PID并使用该PID通过cmd杀死该进程, 杀死进程的命令是

                taskkill /f /pid PIDno

                【讨论】:

                • 我实际上已经将我的 apache 更改为使用端口 30012,并且没有任何东西在使用端口 8080
                • 那么找出30012端口上正在运行的进程
                • 如果 apache 没有运行,那么没有任何东西在使用它,只是检查它是完全空的
                • 假设您正在 IDE 中的 Apache tomcat 服务器上运行应用程序,并且您在不停止 Apache 服务器的情况下关闭了 IDE,或者您的 PC 在这种情况下被关闭,Apache tomcat 仍然在后台保留该端口并且永远不会释放该端口,在这种情况下,当您尝试运行 tomcat 时,您会收到这样的错误
                • 但我只是尝试了 cmd netstat -a -n -o | findstr 0.0:30012 命令,但没有任何东西可以使用它。
                猜你喜欢
                • 2017-06-12
                • 1970-01-01
                • 2019-08-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-09-18
                • 2020-09-12
                • 1970-01-01
                相关资源
                最近更新 更多