java - Tomcat 中的 Servlet 映射和部署

标签 java tomcat servlets web.xml

我正在开发一个简单的基于 servlet 的 Web 应用程序。我没有使用任何 IDE。以下是我遵循的步骤。

  1. 文件夹结构:

    • MyAPP -> 包含WEB-INF文件夹和index.html

    • WEB-INF 包含 2 个文件夹和 web.xml。

    • loginServlet.java 的路径:MyAPP\WEB-INF\classes\servletclass\loginServlet.java

    • WEB_INF 包含包含 servlet-api.jar 的 lib 文件夹

  2. index.html 包含一个表单,表单的 action 属性包含“登录”作为值。

  3. MyAPP\WEB-INF\web.xml 如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    </welcome-file-list>   
    <servlet>
            <servlet-name>loginServlet</servlet-name>
            <servlet-class>servletclass.loginServlet</servlet-class>
    </servlet>
    
    
    <servlet-mapping>
            <servlet-name>loginServlet</servlet-name>
            <url-pattern>/login</url-pattern>
    </servlet-mapping>
    
    
    
    <session-config>
            <session-timeout>
                    30
            </session-timeout>
    </session-config>
    
    </web-app>
    
  4. 使用命令提示符编译 loginServlet.java。它创建了一个 loginServlet.class 文件。

  5. 现在使用命令提示符构建一个 war 文件并将其部署到 Tomcat 服务器上。

  6. 现在,当我运行该应用程序时,它会成功加载 index.html。但是一旦点击表单中的提交按钮就会显示以下错误:

    java.lang.NoClassDefFoundError: servletclass/loginServlet (wrong name: loginServlet)
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(Unknown Source)
    java.security.SecureClassLoader.defineClass(Unknown Source)
    org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2260)
    org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:803)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1244)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1109)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:456)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1452)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.lang.Thread.run(Unknown Source)
    

最佳答案

Alan 是对的,您的 Java 文件中是否有以下声明?

package servletclass;

关于java - Tomcat 中的 Servlet 映射和部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39669648/

相关文章:

java - Log4j 2. 如何获取log4j 的调试信息?

java - 在什么情况下会加载新类?

tomcat - tomcat运行servlet时出现404错误

maven - 未调用 LoggingFilter - 给出 HTTP 404 - 未找到错误

java - JSP/Servlet Web 应用程序中的 XSS 预防

java - 我正在尝试在 tomcat 6.0 中运行一个 jsp 项目。但我收到以下错误

java - 在与 GWT Module Base 不同的上下文中调用 GWT 服务?

java - 如果密码使用MD5加密,如何在服务器端验证java中的密码规则?

tomcat - NoClassDefFoundError (Digester) 与 Tomcat 和 MyFaces

java - 如果我想从内部类引用它,为什么必须将变量设置为final?