【发布时间】: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。这是没有意义的。你想达到什么目的?