我是一个新手,他也一直在寻找解决同样问题的方法。我遵循了Elite Gentleman和Bozho概述的here步骤。首先,非常感谢你们。但我似乎仍然有同样的问题。现在根据我的理解和实施,我的情况如下:
我的servlet类VendorRegistration位于以下文件夹中:C:\ Program Files \ Apache Software Foundation \ Tomcat 6.0 \ webapps \ VendorReg \ WEB-INF \ classes
我的web.xml出现在:C:\ Program Files \ Apache Software Foundation \ Tomcat 6.0 \ webapps \ VendorReg \ WEB-INF \
但是,我似乎仍然收到错误:
**** HTTP状态500 - type异常报告消息说明服务器遇到内部错误(),导致其无法完成此请求。异常javax.servlet.ServletException:Wrapper找不到servlet类VendorRegistration或它依赖的类****
我还在下面添加了我的web.xml文件供您考虑:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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_2_5.xsd"
version="2.5">
<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>
<servlet>
<servlet-name>VendorRegistration</servlet-name>
<servlet-class>VendorRegistration</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>VendorRegistration</servlet-name>
<url-pattern>/VendorRegistration</url-pattern>
</servlet-mapping>
</web-app>
我试图通过URL访问servlet:http://localhost:8080/VendorReg/VendorRegistration。我错过了什么?我在安装Apache之前的某个时候编译了.class文件。因此直接复制粘贴文件夹中的类文件。这可能是个问题吗?
答案 0 :(得分:5)
类路径中缺少servlet或其中一个依赖项。
首先,始终将Java类放在一个包中,也就是servlet。无包装类对于普通包中的类是不可见的。对于servlet,这仅适用于特定环境。你不想依赖它。
package com.example;
public class VendorRegistration extends HttpServlet {
// ...
}
使用此程序包,已编译的.class
文件必须以/WEB-INF/classes/com/example/VendorRegistration.class
结尾。不要忘记相应地更改<servlet-class>
中关联的web.xml
条目。
<servlet>
<servlet-name>VendorRegistration</servlet-name>
<servlet-class>com.example.VendorRegistration</servlet-class>
</servlet>
如果这没有用,那么你应该把包含任何servlet的import
语句中指定的(in)直接类的类或JAR文件放在/WEB-INF/classes
中(对于{ {1}}个文件)或.class
(对于JAR文件)。异常堆栈跟踪的根本原因应该确切地告诉它是哪个类。只需阅读堆栈跟踪。
答案 1 :(得分:2)
从tomcat 6.0开始,<url-pattern>
<servlet>
<servlet-name>VendorRegistration</servlet-name>
<servlet-name>VendorRegistration</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>VendorRegistration</servlet-name>
<url-pattern>/servlets/servlet/VendorRegistration</url-pattern>
</servlet-mapping>
它适用于我的情况!
答案 2 :(得分:1)
在我的情况下,当我从另一个项目中复制/粘贴HelloWorld.java类示例时,问题就开始了。最后,我通过简单地创建一个新包,然后从头开始创建一个新的HelloWorld.java并仅复制doGet()
方法的代码来解决它。
然后我重新启动服务器并运行http://localhost:8080/mltest/HelloWorld
它有效!
答案 3 :(得分:0)
我也遇到了同样的问题。实际上我的一个程序在几次更改之后就已经工作了,这显示了我的错误。我甚至撤消了恢复变化,仍然发生在我身上。 最后,我为我的场景找到了一个有效的解决方案。
SIMPLE:
1.只需尝试清理项目并再次运行。如果它显示相同的错误,如果您确定代码没有任何问题,那么
2.启用&#34;自动构建&#34;菜单项&#34;项目&#34;菜单,并尝试清理您的项目。这次对我有用。
听说这是因为当我们进行一些更改并运行时,eclipse也会在其背景中进行一些更改。因此,即使我们恢复了这些变化,eclipse也可能没有恢复它在后台所做的更改。因此,执行这两个步骤将确保它与用户更改匹配及其背景更改。
希望它有助于解决您的问题。
答案 4 :(得分:0)
这是我解决问题的方法,当时我遇到了同样的例外。
确保添加正确的库,我们需要添加Library Tomcat。一开始,我刚刚添加了servlet-api.jar,但有人告诉我这不是正确的方法。也许当你在tomcat中实现项目时,它与Tomcat有一些冲突。
确保您的项目位于正确的文件夹%Tomcat_HOME%\webapps\%projectName\WEB-INF\classes\.....
确保右侧文件夹中的web.xml,并使用正确的格式,
%Tomcat_HOME%\webapps\%projectName\WEB-INF\web.xml
在Tomcat中重新加载应用程序。
通过URL访问servlet:
http://localhost:port/%projectName%
答案 5 :(得分:-1)
我担心你试图直接访问servlet类是错误的。
通常,URL应该是您的应用程序文件夹下的任何txt,jsp,html文件,但是servlet用于响应客户端的“POST”或“Get”请求,不可能直接通过URL访问它