我正在尝试让我的servlet运行,我一直在寻找2天并尝试所有可能的解决方案而没有运气。 servet类位于相应的文件夹中(即包名称下)。 我还将我的servlet中需要的jar文件添加到lib文件夹中。 web.xml文件映射url并定义servlet。 所以我在文档中做了所有事情,wt人们在这里说并仍然收到此错误:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Error instantiating servlet class assign1a.RPCServlet
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:282)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:357)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1687)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:619)
root cause
java.lang.NoClassDefFoundError: assign1a/RPCServlet (wrong name: server/RPCServlet)
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
java.lang.ClassLoader.defineClass(ClassLoader.java:616)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2820)
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1143)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1638)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:282)
org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:357)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1687)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:619)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.5 logs.
这也是我的servlet代码:
package assign1a;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import lib.jsonrpc.RPCService;
public class RPCServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -5274024331393844879L;
private static final Logger log = Logger.getLogger(RPCServlet.class.getName());
protected RPCService service = new ServiceImpl();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
response.getWriter().write("rpc service " + service.getServiceName() + " is running...");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
try {
service.dispatch(request, response);
} catch (Throwable t) {
log.log(Level.WARNING, t.getMessage(), t);
}
}
}
请帮帮我:) 感谢。
编辑:这是我的web.xml文件的内容
<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_3_0.xsd"
version="3.0"
metadata-complete="true">
<servlet>
<servlet-name>jsonrpc</servlet-name>
<servlet-class>assign1a.RPCServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jsonrpc</servlet-name>
<url-pattern>/rpc</url-pattern>
</servlet-mapping>
</web-app>
答案 0 :(得分:4)
我在错误消息中注意到了短语(wrong name: server/RPCServlet)
。
这通常意味着类文件的包名与jar / war中的目录结构不同。
也许您最初将RPCServlet.java
置于名为server
的目录下,然后将RPCServlet.java
移至assign1a
?
或许原始包定义为:
package server;
然后你将其改为
package assign1a;
无论哪种方式,为了解决它,我建议你删除所有编译的东西(类文件,war文件等)。停止tomcat,然后删除<TOMCAT_HOME>/work
目录,以确保一切都消失。
然后,检查以确保RPCServlet.java位于名为assign1a
的文件夹中,并确保将包定义为:
package assign1a;
重新编译/重建战争,你应该处于更好的状态。也许尝试在Eclipse(或Netbeans)中构建战争,因为这样就不会让你编译成与类文件包名称不匹配的文件夹。
祝你好运。 - 戴夫答案 1 :(得分:2)
你的错误“noclassdeffound”意味着tomcat在需要时找不到assign1a.RPCServlet。为了让tomcat找到有问题的类,它必须在tomcat的类路径上。把它放在那里的最好方法是确保它在classes-folder中。然而,找到这个文件夹可能有点棘手D:有几种可能性,取决于你所使用的系统,你如何开发,以及你如何部署。
首先查看名为webapps的文件夹下的tomcat安装文件夹。在那里,找到名为[context]的文件夹,如您的网址 http://localhost:8080/ [context] / rpc。你看?该文件夹必须命名为您正在使用的网址。 (提供确切的帮助会更容易,如果您提供了确切的信息,那么在不知道您正在使用的网址的情况下会很难。)在此文件夹中,找到文件夹WEB-INF,然后,你应该找到一个名为classes的文件夹。在此文件夹下,您必须有一个名为assign1a的文件夹,并且在那里您必须具有文件RPCServlet.class,这是已编译的文件。
所以,摘要简称:[tomcat_install_folder] / webapps / [context] /WEB-INF/classes/assign1a/RPCServlet.class缺失。哦,正斜杠当然是Windows上的反斜杠:)
另外,如果您在eclipse中开发,并且在eclipse中使用tomcat服务器,那么您的tomcat文件夹实际上位于完全不同的位置。然后你可以在你的eclipse工作区,文件夹.metadata / .plugins / org.eclipse.wst.server.core / tmp0 / wtpwebapps / [context]中找到它,其中tmp0可以是tmp1或其他东西,具体取决于tomcat服务器的数量你已经在你的eclipse工作区启动了。
如果您仍然无法弄明白,请发布有关您的设置的更多信息(即开发ide,部署方案,访问网址,web.xml)
答案 2 :(得分:0)
java.lang.NoClassDefFoundError: assign1a/RPCServlet (wrong name: server/RPCServlet)
您在WAR中的/ WEB-INF / classes下是否看到名为/ assign1a的文件夹?它是否包含名为RPCServlet.class的文件?如果没有,你必须编译你的servlet。
发布您的web.xml并显示您的<servlet>
和<servlet-mapping>
条目。