【问题标题】:Servlet Classnotfound in eclipse java Dynamic Project build on Mavenjava - 在 Maven 中构建的 Eclipse 中未找到 Servlet 类
【发布时间】:2014-04-30 19:57:17
【问题描述】:

我对网络世界很陌生,所以我试图创建一个简单的 基于 JSP-Servlet 的网页,但想在 Maven 上构建相同的网页。一世 谷歌几乎所有东西,但日食在抛出异常时 尝试创建 eclipse maven 项目,同时尝试创建 来自 Eclipse 的动态项目,它可以工作,但找不到简单的方法 将 Servlet 与 JSP 页面集成,最后我找到了一种方法,我 在 eclipe 中创建了一个动态 web 项目,然后创建了所需的 java 项目中的目录并用maven编译包含servlet 依赖。这是一种正确的方法吗,还是有一些非常 在包含 JSP 的 maven 中创建动态 Web 项目的简单方法, Servlet 两者。

现在,一旦我完成了我的方法,我的方法可能会被破坏,就在单击第一页按钮之后,

SEVERE: Allocate exception for servlet Controllertest
java.lang.ClassNotFoundException: com.abc.test.Controller
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:529)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:511)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:139)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

这是我的代码结构-

我的 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>de.vogella.wtp.jsp</display-name>
    <welcome-file-list>
        <welcome-file>ShowAll.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <description>Controllertest</description>
        <display-name>Controllertest</display-name>
        <servlet-name>Controllertest</servlet-name>
        <servlet-class>com.abc.test.Controller</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Controllertest</servlet-name>
        <url-pattern>/Controllertest</url-pattern>
    </servlet-mapping>
</web-app>

还有我的 servlet-

import java.io.IOException;
import java.util.Map;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class Controllertest
 */
public class Controllertest extends HttpServlet {
      private static final long serialVersionUID = 1L;
      private static String DELETE_JSP = "/Delete.jsp";
      private static String EDIT_JSP = "/Edit.jsp";
      private static String SHOWALL_JSP = "/ShowAll.jsp";


      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String forward="";
        // Get a map of the request parameters
        @SuppressWarnings("unchecked")
        Map parameters = request.getParameterMap();
        if (parameters.containsKey("delete")){
          forward = DELETE_JSP;
        } else if (parameters.containsKey("edit")){
          forward = EDIT_JSP;
        } else {
          forward = SHOWALL_JSP;
        }
        RequestDispatcher view = request.getRequestDispatcher(forward);
        view.forward(request, response);
      }
}

我不认为我做了更多的调整。 为了更好地说明,这里是我的 Eclipse 部署程序集

我的 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mkyong</groupId>
    <artifactId>CounterWebApp3</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>CounterWebApp3 Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>3.0-alpha-1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.1</version>
        </dependency>

    </dependencies>
    <build>
        <finalName>CounterWebApp3</finalName>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>${basedir}/src/main/java</directory>
                            <targetPath>WEB-INF/classes</targetPath>
                            <includes>
                                <include>**/*.properties</include>
                                <include>**/*.xml</include>
                                <include>**/*.css</include>
                                <include>**/*.html</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

【问题讨论】:

  • 提供完整的堆栈跟踪。此外,您有一个 com.abc.test.Controller 的映射,但您的 servlet 类是 Controllertest

标签: maven jakarta-ee servlets


【解决方案1】:

实际上问题是正在生成输出类 在目标/类中。一旦我将类从目标复制到 web-inf ,成功了。

现在我需要知道原因,然后需要在我的设置中找出原因。

【讨论】:

  • 你如何构建你的项目?你应该使用 mvn [clean] package 来正确构建 Maven 项目。
【解决方案2】:

请尝试通过右键单击项目 -> 新建 -> 类来创建您的 servlet 类,而不是右键单击项目 -> 新建 -> Eclipse 中的 Servlet 选项。

我试过了,效果很好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2015-06-21
    • 2014-04-26
    • 2021-04-14
    相关资源
    最近更新 更多