【问题标题】:Using JAR file in Servlet not working? [duplicate]在 Servlet 中使用 JAR 文件不起作用? [复制]
【发布时间】:2016-05-20 14:59:18
【问题描述】:

我在 jsp/servlet 中创建了简单的 Web 应用程序。

登录后,想通过 TCP/IP 与远程服务器建立套接字通信 [IP 和端口可用]

我已经创建了进行套接字通信的类的 jar 文件。

当我在 servlet 中使用 jar 文件时,我得到以下异常

Feb 10, 2016 3:28:40 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [com.Temp.ServerServlet] in context with path [/Temp_Hosting] threw exception [Servlet execution threw an exception] with root cause
java.lang.NoClassDefFoundError: TCPClient/TCPClient
	at com.temp.ServerServlet.doPost(ServerServlet.java:51)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)

但是,当我使用构建 jar 的同一个类文件时,它工作得非常好。

所以在 servlet 中,调用下面进行套接字通信的类的方法可以正常工作。

下面是方法定义是类

 public String initializeServer(String _ipAddress, int portNo){
        String msg = "Failure";
        BufferedReader br = null;
        BufferedOutputStream bos = null;
        byte buffer[] = null;
        String send;
        try {
               Socket socket = new Socket(_ipAddress, portNo);
               br  = new BufferedReader(
                            new InputStreamReader(socket.getInputStream(), "UTF-8"));
               bos  = new BufferedOutputStream(socket.getOutputStream());
               send = "hi server\r\n";
               buffer = send.getBytes("UTF-8");
               bos.write(buffer,0,buffer.length);
               bos.flush();
               msg = br.readLine();
               System.out.println("Msg is :"+msg);
               bos.close();
               br.close();
               socket.close();
        } catch (UnknownHostException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
        } catch (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
        }
        return msg;
        
 }

注意:

  1. jar 文件被复制到 WEB-INF/class 文件夹,甚至添加到 类路径也是,但仍然没有结果。
  2. 相同的 jar 文件在正常的 java 应用程序中正常工作。

提前感谢您的帮助..!!

【问题讨论】:

  • 您永远不要将 jar 文件复制到 WEB-INF/class(或 WEB-INF/classes,这是文件夹的正确名称)。将它们复制到 WEB-INF/lib 中。
  • @Michal:感谢您的反馈。抱歉打错了,那是类,我尝试使用 WEB-INF/lib 也无法正常工作。
  • 你能上传jar文件吗? jar 文件必须具有以下结构:名为 TCPClient 的文件夹和该文件夹中名为 TCPClient.class 的文件。
  • 二、如何启动应用程序?来自 Eclipse?从 cmd 行?什么正在部署到...Tomcat?
  • 是的 Eclipse/Tomcate。

标签: java exception servlets jar


【解决方案1】:

通过 Oracle 将 jar 放入 WEB-INF/libinstructed

【讨论】:

    猜你喜欢
    • 2017-01-05
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多