我想在一个Java servlet运行UADetector,但我得到的错误:SLF4J ClassNotFoundException的
java.lang.NoClassDefFoundError: net/sf/uadetector/service/UADetectorServiceFactory
test.doGet(test.java:158)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
不过,我已经将jar文件添加到我的图书馆,我看到他们在项目文件夹(我使用Eclipse )。
这是我的代码:
import java.lang.*;
import java.io.IOException;
import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import net.sf.uadetector.service.UADetectorServiceFactory;
import net.sf.uadetector.UserAgent;
import net.sf.uadetector.UserAgentStringParser;
import net.sf.uadetector.ReadableUserAgent;
/**
* Servlet implementation class test
*/
@WebServlet("/test")
public class test extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
PrintWriter out = response.getWriter();
// Get an UserAgentStringParser and analyze the requesting client
UserAgentStringParser parser = UADetectorServiceFactory.getResourceModuleParser();
ReadableUserAgent agent = parser.parse(request.getHeader("User-Agent"));
out.append("You're a <em>");
out.append(agent.getName());
out.append("</em> on <em>");
out.append(agent.getOperatingSystem().getName());
out.append("</em>!");
}
}
没有任何人有过这样的问题吗?
编辑: 后也把罐子的WEB-INF/lib文件夹中的错误已更改为:
exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.NoClassDefFoundError: net/sf/uadetector/service/UADetectorServiceFactory
test.doGet(test.java:158)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1305)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1157)
net.sf.uadetector.datareader.XmlDataReader.<clinit>(XmlDataReader.java:85)
net.sf.uadetector.service.UADetectorServiceFactory$ResourceModuleXmlDataStore.<clinit>(UADetectorServiceFactory.java:62)
net.sf.uadetector.service.UADetectorServiceFactory.<clinit>(UADetectorServiceFactory.java:92)
test.doGet(test.java:158)
javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
EDIT2: 看来我需要更具体一点我怎么加的jar文件。
我去文件 - >属性 - > Java构建路径 - >“添加外部JAR”
这为我的其他罐的工作,以及(如MySQL连接器的Java)
编辑3 : 因此编译和运行时的类路径可能不同。我不知道哪些罐子在运行时是必须的,哪些只用于编译。所以我复制了也在WEB-INF/lib文件夹中使用的所有jar。在部署大会,我有以下:
来源
- /src目录
- /的WebContent
部署路径
- /WEB-INF/classes中
- /
WEB-INF位于WebContent中,所以我认为这应该是正确的。
但为什么类org.slf4j.LoggerFactory缺失?
您的项目>属性>部署程序集>在表中您应该有/ WebContent – 2015-02-06 08:51:24
@ToKra对不起,但我不明白我需要做什么。/WebContent已经在表中,不是吗? – user3605780 2015-02-06 09:23:52
好的,另一个问题:你在./WEB-INF/lib中有什么SLF4J&Log4j(或LogBack)库? – 2015-02-06 10:41:52