gpt4 book ai didi

tomcat - 即使类在包中,也无法从 tomcat 服务器运行我的 servlet

转载 作者:行者123 更新时间:2023-11-28 21:47:13 24 4
gpt4 key购买 nike

我正在尝试让我的 servlet 运行,我已经搜索了 2 天并尝试了所有可能的解决方案,但没有成功。servet 类位于适当的文件夹中(即在包名称下)。我还将我的 servlet 中需要的 jar 文件添加到 lib 文件夹中。web.xml 文件映射 url 并定义 servlet。所以我做了文档中的所有内容,人们在这里说了,但仍然出现这个错误:

    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>

最佳答案

我注意到短语 (wrong name: server/RPCServlet)在错误消息中。

这通常意味着类文件的包名与 jar/war 中的目录结构不同。

也许你最初把RPCServlet.java在名为 server 的目录下然后,后来搬了RPCServlet.javaassign1a

或者原始包定义为:

package server;

然后您稍后将其更改为

package assign1a;

无论哪种方式,要解决它,我建议您删除所有已编译的东西(类文件、war 文件等)。停止 tomcat,然后删除 <TOMCAT_HOME>/work目录只是为了确保一切都消失了。

然后,检查以确保 RPCServlet.java 位于名为 assign1a 的文件夹中并确保包定义为:

package assign1a;

重新编译/重建 war ,你应该处于更好的状态。也许尝试在 Eclipse(或 Netbeans)中构建 war ,因为这样它不会让您编译到与类文件包名称不匹配的文件夹中。

祝你好运。- 戴夫

关于tomcat - 即使类在包中,也无法从 tomcat 服务器运行我的 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com