开发 Servlets

可以将使用component-based architecture设计的应用程序开发为 JavaServlets。考虑带有基于 Swing 的图形用户interface(GUI)的 Java applet 的示例。通过基于组件的设计,可以使用较小的构建块或组件来构建 GUI。以下一般步骤用于创建 ServletsGUI:

  • 创建一个类MyTopJPanel,它是javax.swing.JPanel的子类。在MyTopJPanel类的构造函数中布置 Servlets 的 GUI 组件。

  • 创建一个名为MyApplet的类,该类是javax.swing.JApplet的子类。

  • MyAppletinit方法中,实例化MyTopJPanel并将其设置为 Servlets 的内容窗格。

以下各节使用“动态树演示”Servlets 更详细地探讨了这些步骤。如果您不熟悉 Swing,请参阅使用 Swing 创建 GUI以了解有关使用 Swing GUI 组件的更多信息。

A browser with JavaScript enabled is required for this page to operate properly\.  

Note:

如果看不到示例正在运行,则可能需要在浏览器中启用 JavaScript 解释器,以便 Deployment Toolkit 脚本能够正常运行。

创建顶级 JPanel 类

创建一个类,该类是JPanel的子类。此顶部JPanel充当所有其他 UI 组件的容器。在下面的示例中,DynamicTreePanel类是最上面的JPanelDynamicTreePanel类的构造函数调用其他方法来正确创建和布置 UI 控件。

public class DynamicTreePanel extends JPanel implements ActionListener {
    private int newNodeSuffix = 1;
    private static String ADD_COMMAND = "add";
    private static String REMOVE_COMMAND = "remove";
    private static String CLEAR_COMMAND = "clear";
    
    private DynamicTree treePanel;

    public DynamicTreePanel() {
        super(new BorderLayout());
        
        //Create the components.
        treePanel = new DynamicTree();
        populateTree(treePanel);

        JButton addButton = new JButton("Add");
        addButton.setActionCommand(ADD_COMMAND);
        addButton.addActionListener(this);
        
        JButton removeButton = new JButton("Remove");
        
        // ...
        
        JButton clearButton = new JButton("Clear");
        
        // ...
        
        //Lay everything out.
        treePanel.setPreferredSize(
            new Dimension(300, 150));
        add(treePanel, BorderLayout.CENTER);

        JPanel panel = new JPanel(new GridLayout(0,3));
        panel.add(addButton);
        panel.add(removeButton); 
        panel.add(clearButton);
        add(panel, BorderLayout.SOUTH);
    }
    // ...
}

创建 Servlets

对于具有基于 Swing 的 GUI 的 Java applet,创建一个作为javax.swing.JApplet的子类的类。不包含基于 Swing 的 GUI 的 Servlets 可以扩展java.applet.Applet类。

重写 applet 的init方法以实例化您的顶级JPanel类并创建 applet 的 GUI。 DynamicTreeApplet类的init方法调用 AWT 事件分派器线程中的createGUI方法。

package appletComponentArch;

import javax.swing.JApplet;
import javax.swing.SwingUtilities;

public class DynamicTreeApplet extends JApplet {
    //Called when this applet is loaded into the browser.
    public void init() {
        //Execute a job on the event-dispatching thread; creating this applet's GUI.
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    createGUI();
                }
            });
        } catch (Exception e) { 
            System.err.println("createGUI didn't complete successfully");
        }
    }
    
    private void createGUI() {
        //Create and set up the content pane.
        DynamicTreePanel newContentPane = new DynamicTreePanel();
        newContentPane.setOpaque(true); 
        setContentPane(newContentPane);        
    }        
}

将核心功能与final部署机制分开的好处

创建 applet 的另一种方法是只除去抽象层(顶部 top JPanel分开),然后将 applet 的init方法本身中的所有控件布局。直接在 applet 中创建 GUI 的不利之处在于,如果您以后选择将功能部署为 Java Web Start 应用程序,现在将更加困难。

在“动态树演示”示例中,核心功能位于DynamicTreePanel类中。现在,将DynamicTreePanel类放入JFrame并作为 Java Web Start 应用程序进行部署很简单。

因此,要保持可移植性并保持部署选项处于打开状态,请按照本页上描述的基于组件的设计进行操作。

下载源代码用于* Dynamic Tree Demo Applet *示例,以进行进一步试验。