【问题标题】:Can`t run first web application Tomcat + Intellij无法运行第一个 Web 应用程序 Tomcat + Intellij
【发布时间】:2016-05-26 14:57:35
【问题描述】:

我正在尝试运行我的第一个简单的 Web 应用程序。 我有一节课:

public class MainServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
        throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("Hello World");
}
}

我使用 Maven 构建我的项目。 安装项目后,我在 Tomcat 配置中进行了以下设置 TOMCAT

运行配置后,我看到,部署成功完成 CONFIGURATION

但是当我尝试打开 localhost:8080/ 时,我观察到 Tomcat 主页,也在 localhost:8080/mypage.jsp

我应该怎么做才能看到我的“Hello world”?

【问题讨论】:

  • 你能至少内联你的图片吗?
  • 您的 servlet 是否映射到 web.xml 中?我没有看到注释,所以你的 web.xml 中应该有类似 的东西
  • @Marged 抱歉,但我没有足够的声誉来粘贴内联图像((这是我在 SOF 上的第一个问题
  • @BigMike 是的,我有 web.xml 它包含: w3.org/2001/XMLSchema-instance" xmlns="java.sun.com/xml/ns/javaee" xsi:schemaLocation="java.sun.com/xml/ns/javaee java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> mainServletservice.MainServlet servlet-class> mainServlet/ i也尝试了注释,但它给出了相同的结果

标签: java maven tomcat intellij-idea


【解决方案1】:

因为上一个太长了,所以我重新回答了。

您的问题与简单的命名问题不同,问题在于您使用 JEE API 依赖项

           <dependency>
              <groupId>javax.servlet</groupId>
               <artifactId>servlet-api</artifactId>
               <version>3.0-alpha-1</version>
            </dependency>

<!-- the other dependencies -->

            <dependency>
                <groupId>javaee</groupId>
                <artifactId>javaee-api</artifactId>
                <version>5</version>
            </dependency>
            <dependency>
                <groupId>javax</groupId>
                <artifactId>javaee-web-api</artifactId>
                <version>6.0</version>
            </dependency>

在你的战争中被打包,这个 API 只是为你提供了具有相同名称和相同方法但内部没有逻辑的 Mock 类的包并且服务器负责提供具有内部逻辑的真实实现,所以这种依赖关系应该用提供的范围进行标记,这意味着它们不应该被打包在 WAR 中,否则它们会在运行时甚至在部署时抛出异常,所以你像我说的那样用提供的范围进行标记

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>3.0-alpha-1</version>
        <scope>provided</scope>
   </dependency>

<!-- the other dependencies -->  
   <dependency>
        <groupId>javaee</groupId>
        <artifactId>javaee-api</artifactId>
        <version>5</version>
        <scope>provided</scope>
    </dependency>
     <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>

建议

使用提供的范围标记 tomcat 的依赖项,因为您的服务器 Tomcat 将提供那些您不需要在战争中包含它们的包 就这样吧

 <dependency>
    <groupId>org.apache.tomcat.maven</groupId>
     <artifactId>tomcat7-maven-plugin</artifactId>
     <version>2.2</version>
    <scope>provided</scope>
</dependency>

【讨论】:

  • 非常感谢!你的建议很有帮助!
猜你喜欢
  • 2016-06-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2017-10-23
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多