【问题标题】:ClassNotFoundException (inner class) when I run my servlet from Tomcat当我从 Tomcat 运行我的 servlet 时,ClassNotFoundException(内部类)
【发布时间】:2016-12-03 23:33:22
【问题描述】:

我尝试部署 servlet。我有一个内部类,但编译器似乎找不到内部类。它会生成 java.lang.ClassNotFoundException 异常。下面是我的 servlets java 代码、web.xml、错误信息。希望有人可以帮助我。先感谢您。

Servlet java 代码

package com.tutorials;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.swing.JButton;
import javax.swing.JFrame;
    public class Dummy extends JFrame{  
        public static JButton play;
        public static JButton stop;
        public Dummy() {
            Container content = getContentPane();
            play = new JButton("play");
            play.setEnabled(true);
            PlayListener playListener = new PlayListener();
            play.addActionListener(playListener);
            content.add(play, BorderLayout.NORTH);
    }

    class PlayListener extends HttpServlet implements ActionListener {

        public ArrayList<String> fresh = new ArrayList<String>();

        public void actionPerformed(ActionEvent e) {

            fresh.add("what");
            fresh.add("the");
            fresh.add("hell");
            System.out.println("fresh size is " + fresh.size());
        }

        @Override
        public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            resp.setContentType("application/json");
            PrintWriter writer = resp.getWriter();
            if(fresh.size() == 0) {
                writer.println("freshsizeiszer0");

            } else {

                for(int i = 0; i < fresh.size(); i++) {
                    writer.print(fresh.get(i));
                }
            }
            writer.flush();
            writer.close();
        }
    }


    public static void main(String args[]) {
        JFrame frame = new Dummy();
        frame.pack();
        frame.show();
    }
}

XML

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>Tutorial2</display-name>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
</welcome-file-list>


<servlet>
    <servlet-name>PlayListener</servlet-name>
    <servlet-class>com.tutorials.Dummy.PlayListener</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>PlayListener</servlet-name>
    <url-pattern>/play</url-pattern>
</servlet-mapping>

</web-app>

【问题讨论】:

  • 好吧,不要将内部类用作 servlet。使用顶级公共课程。到底为什么要将 servlet 和 swing 代码混合在一起?
  • 尝试在构造函数旁边添加另一个结束括号。
  • @JBNizet 好吧,我也不喜欢这个,但我必须这样做。实际上,我的第一个想法是将 servlet 和 swing 代码分开,但我被困了两天。有兴趣请看stackoverflow.com/questions/40953052/…。
  • @Aaron 大括号是对的,是格式的问题。
  • Swing 用于制作图形化的桌面应用程序。 Servlet 用于使 Web 服务器响应 HTTP 请求。完全没有理由将它们混合在一起。更不用说将 JFrame 子类的内部类用作 servlet。这是没有意义的。你想达到什么目的?

标签: java servlets


【解决方案1】:

可能是因为PlayListener不是静态的,改成

public static class PlayListener ...

不得不说,这种 Swing 和 Servlet 的组合看起来很奇怪,并且可能无法按您的预期工作(不确定您想要完成什么)。 Servlet 实例和您的主实例会有所不同(即使在不同的 JVM 上),并且您在 actionPerformed 中更新的数据与 doGet 将访问的数据没有任何关系。

如果您计划使用 http 服务器和更新服务器上数据的独立 Java 客户端,则应该以不同的方式完成,即客户端将数据发布到服务器。

【讨论】:

  • 谢谢。我的第一个想法是将它们分开,但我被困了 2 天。请仅在您感兴趣的情况下查看此stackoverflow.com/questions/40953052/…。
  • 看看我对另一个问题的回答(没有这个问题,不清楚你在问什么)。如果您需要更多详细信息,请告诉我。
猜你喜欢
  • 2013-02-18
  • 1970-01-01
  • 2014-09-29
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多