Сервлет не может обслуживать простой апплет

У меня есть простой апплет, который я хочу показать на локальной веб-странице, связанной с моим сервером и сервлетом.

Код апплета:

public class MyApplet extends JApplet implements ActionListener {
    JPanel panel = new JPanel();
    JButton btnPush;

    public MyApplet() {}

    public void init() {
        createGUI();
    }

    public void createGUI() {
        getContentPane().add(panel, BorderLayout.CENTER);
        panel.setLayout(null);
        btnPush = new JButton("Push");
        btnPush.addActionListener(this);
        btnPush.setBounds(54, 94, 89, 23);
        panel.add(btnPush);
        setSize(200, 200);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == btnPush) {
            JOptionPane.showMessageDialog(this, "Button was pushed");
        }

    }
}

Вот код сервлета/сервера:

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;

public class MyServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html; chaset=utf-8");
        Writer writer = response.getWriter();

        writer.write("<applet codebase=\"bin\" code=\"MyApplet.class\" width=\"200\" height=\"200\">" + 
                "If your browser was Java-enabled, a button would appear here. </applet>");
    }

    public static void main(String... args) throws Exception {
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.addServlet(MyServlet.class, "/");

        MyApplet applet = new MyApplet();
        applet.init();
        applet.start();

        Server server = new Server(8080);
        server.setHandler(context);
        server.start();
        server.join();

    }
}

Я использую servlet-api3.0 и причал 8. Я могу подключиться к http://"localhost:8080", но когда мой апплет пытается загрузиться, он перестает загружаться. Когда я запускаю html-файл с тегом апплета, он работает без проблем. Так что похоже, что проблема здесь в сервлете. Я что-то забыл?


person Henrik    schedule 07.01.2013    source источник


Ответы (1)


Конфигурация вашего сервера может реагировать только на сам сервлет. Нет настройки DefaultServlet для фактического возврата запрошенного файла MyApplet.class.

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);

// Serve content from bin directory (where the classes are compiled into)
ServletHolder holder = context.addServlet(DefaultServlet.class,"/*");
holder.setInitParameter("resourceBase","bin");
holder.setInitParameter("pathInfoOnly","true");

// Serve some hello world servlets
context.addServlet(MyServlet.class,"/*");

См. встроенный пример для более полного примера 1 Servlet + 1 DefaultServlet. http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/example-jetty-embedded/src/main/java/org/eclipse/jetty/embedded/OneServletContext.java?h=jetty-8

Просто убедитесь, что ваш параметр инициализации resourceBase указывает на путь, по которому находятся ваши файлы классов.

person Joakim Erdfelt    schedule 07.01.2013
comment
Я пытался реализовать это, но все еще не работает. Та же проблема, что и раньше. :( - person Henrik; 08.01.2013