47、Java Web编程:Applet与Servlet入门指南

Java Web编程:Applet与Servlet入门指南

在Web编程领域,Java提供了多种强大的工具来开发丰富的Web应用程序。本文将重点介绍Java Applet和Servlet的基本概念、创建方法以及相关的配置和测试步骤。

1. Java Applet概述

Applet是一种专门设计在互联网用户计算机的浏览器窗口中运行的Java应用程序。当用户访问包含Applet的网页时,Java Applet类会被下载到用户计算机并在本地运行。Applet会占据网页的一部分区域,并在该区域内执行各种操作。

1.1 Applet与Swing应用程序的区别

Applet与Swing应用程序有一些关键区别:
- 继承类不同 :Applet继承 JApplet 类,而Swing应用程序通常继承 JFrame 类。 JFrame 提供的是由操作系统窗口系统管理的窗口,而 JApplet 提供的是由Web浏览器管理的网页矩形区域。
- 启动方式不同 :独立的Swing应用程序通过JVM调用静态 main 方法启动,通常会创建一个继承 JFrame 的类的实例。而Applet由浏览器在启动时自动创建继承 JApplet 的类的实例,没有静态 main 方法,而是通过 init 方法启动。
- 关闭方式不同 :独立的Swing应用程序通常需要提供退出按钮或菜单命令让用户关闭程序,而Applet只要包含它的页面显示就会一直运行。
- 显示方式不同 :Applet显示在网页区域内,不能设置标题栏文本和默认关闭操作,用户也不能调整其大小。
- 安全限制 :出于安全考虑,Applet不能执行影响客户端计算机文件系统的操作,如读写文件或运行程序。

1.2 JApplet类的常用方法

JApplet 类的大部分功能与 JFrame 类相似,可以添加面板和其他组件、创建菜单等。以下是 JApplet 类常用的构造函数和方法:
| 构造函数/方法 | 描述 |
| ---- | ---- |
| JApplet() | 创建一个新的Applet,通常由浏览器加载时自动调用,无需手动调用。 |
| void add(Component c) | 向Applet中添加指定的组件。 |
| void destroy() | 由浏览器调用,通知Applet其内存即将被JVM回收,大多数Applet不需要重写此方法。 |
| void init() | 由浏览器调用,通知Applet已加载,此方法替代了Swing应用程序中 JFrame 类的构造函数。 |
| void setLayout(LayoutManager layout) | 设置Applet显示时用于控制组件排列的布局管理器,默认是边界布局管理器。 |
| void setLocation(int x, int y) | 设置Applet在屏幕上的x和y坐标,屏幕左上角为(0, 0)。 |
| void setLocationRelativeTo(Component c) | 如果参数为 null ,则将Applet居中显示在屏幕上。 |
| void setSize(int width, int height) | 设置Applet的宽度和高度。 |
| void setJMenuBar(JMenuBar menu) | 设置Applet的菜单。 |
| void start() | 由浏览器调用,通知Applet开始执行。 |
| void stop() | 当Applet暂时离开视图时由浏览器调用,如果需要在Applet隐藏时停止活动,可以重写此方法。 |

1.3 示例Applet代码

以下是一个完整的Applet示例,允许用户选择三种尺寸(小、中、大)和三种配料(意大利辣香肠、蘑菇、凤尾鱼)来订购披萨:

import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.*;

public class PizzaApplet extends JApplet {
    private JButton buttonOK;
    private JRadioButton small, medium, large;
    private JCheckBox pepperoni, mushrooms, anchovies;

    public void init() {
        this.setSize(320, 200);
        ButtonListener bl = new ButtonListener();
        JPanel mainPanel = new JPanel();
        JPanel sizePanel = new JPanel();
        Border b1 = BorderFactory.createTitledBorder("Size");
        sizePanel.setBorder(b1);
        ButtonGroup sizeGroup = new ButtonGroup();

        small = new JRadioButton("Small");
        small.setSelected(true);
        sizePanel.add(small);
        sizeGroup.add(small);
        medium = new JRadioButton("Medium");
        sizePanel.add(medium);
        sizeGroup.add(medium);
        large = new JRadioButton("Large");
        sizePanel.add(large);
        sizeGroup.add(large);
        mainPanel.add(sizePanel);

        JPanel topPanel = new JPanel();
        Border b2 = BorderFactory.createTitledBorder("Toppings");
        topPanel.setBorder(b2);
        pepperoni = new JCheckBox("Pepperoni");
        topPanel.add(pepperoni);
        mushrooms = new JCheckBox("Mushrooms");
        topPanel.add(mushrooms);
        anchovies = new JCheckBox("Anchovies");
        topPanel.add(anchovies);
        mainPanel.add(topPanel);

        buttonOK = new JButton("OK");
        buttonOK.addActionListener(bl);
        mainPanel.add(buttonOK);

        this.add(mainPanel);
        this.setVisible(true);
    }

    private class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == buttonOK) {
                String tops = "";
                if (pepperoni.isSelected())
                    tops += "Pepperoni\n";
                if (mushrooms.isSelected())
                    tops += "Mushrooms\n";
                if (anchovies.isSelected())
                    tops += "Anchovies\n";
                String msg = "You ordered a ";
                if (small.isSelected())
                    msg += "small pizza with ";
                if (medium.isSelected())
                    msg += "medium pizza with ";
                if (large.isSelected())
                    msg += "large pizza with ";
                if (tops.equals(""))
                    msg += "no toppings.";
                else
                    msg += "the following toppings:\n" + tops;
                JOptionPane.showMessageDialog(buttonOK, msg, "Your Order", JOptionPane.INFORMATION_MESSAGE);
                pepperoni.setSelected(false);
                mushrooms.setSelected(false);
                anchovies.setSelected(false);
                small.setSelected(true);
            }
        }
    }
}

在这个示例中,需要注意以下几点:
- 类继承 JApplet 而不是 JFrame
- 重写 init 方法,并将通常放在 JFrame 类构造函数中的代码放在 init 方法中。
- 调用 setSize 方法设置Applet的大小。
- 移除了 setTitle setDefaultCloseAction 方法,因为这些方法不适用于Applet。

1.4 创建HTML页面显示Applet

要运行Applet,需要创建一个包含 APPLET 标签的HTML页面,指定Applet的名称和运行区域的大小。 APPLET 标签还可以包含在浏览器无法运行Applet时显示的文本。以下是一个示例HTML文件:

<html>
<head>
    <title>The Pizza Applet</title>
</head>
<body>
    <H1>Welcome to the Pizza Applet!</H1>
    <APPLET code="PizzaApplet" width="300" height="180">
        Sorry, your browser isn't able to run Java applets.
    </APPLET>
</body>
</html>
1.5 测试Applet

Java提供了一个名为 applet viewer 的特殊程序,可以在编译Applet后快速运行它。如果使用TextPad,可以在编译Applet后按 Ctrl+3 调用 applet viewer 。从命令提示符运行时,需要先创建一个HTML文件,然后导航到包含该HTML文件的目录,输入以下命令:

appletviewer filename

例如,要显示名为 PizzaApplet.html 的HTML文件中的披萨Applet,可以使用以下命令:

appletviewer PizzaApplet.html
2. Java Servlet概述

Servlet是当今开发Web应用程序最流行的方式之一,许多知名的网站都由Servlet提供支持。Servlet是一种扩展 javax.servlet.Servlet 类的Java程序,可以在Web服务器上响应用户请求,并将输出以HTML页面的形式返回给用户。

2.1 理解Servlet的工作原理

在了解Servlet之前,需要先了解Web服务器的基本工作原理。Web服务器使用HTTP协议向用户发送网页,HTTP采用请求/响应模型,客户端计算机通过URL向HTTP服务器发送请求消息,服务器接收请求后检索相应的文件,并以HTTP响应消息的形式将文件返回给客户端。

普通的Web交互是静态的,即发送给用户的文件内容始终相同。而Servlet提供了一种动态内容的实现方式。当用户请求的URL指向Servlet而不是文件时,服务器会接收Servlet请求,定位并运行相应的Java程序,将程序的输出以HTTP响应消息的形式返回给客户端。

2.2 使用Tomcat运行Servlet

要运行Servlet程序,需要安装一个Servlet引擎,将计算机转换为能够运行Servlet的服务器。最知名的Servlet引擎是Tomcat,可从Apache软件基金会的网站(jakarta.apache.org/tomcat)免费下载。

以下是在Windows XP系统上安装和配置Tomcat 5.5的步骤:
1. 下载Tomcat Zip文件 :从Apache网站下载Tomcat Zip文件,建议下载Zip文件而不是可执行安装文件。
2. 解压文件 :右键单击Zip文件,选择“Extract All”,将文件解压到 c:\ 目录。解压后,将生成的文件夹重命名为更易输入的名称,如 c:\tomcat
3. 创建环境变量 JAVA_HOME :打开控制面板,双击“System”图标,点击“Advanced”选项卡,然后点击“Environment Variables”。点击“New”,创建一个名为 JAVA_HOME 的变量,其值为JDK安装文件夹的完整路径,如 c:\Program Files\Java\jdk1.5.0
4. 复制 servlet-api.jar 文件 :将 c:\tomcat\common\lib 目录下的 servlet-api.jar 文件复制到JDK根目录的 jre\lib\ext 文件夹中。
5. 编辑 context.xml 配置文件 :打开 c:\tomcat\conf 目录下的 context.xml 文件,将第二行的 <Context> 改为 <Context reloadable="true">
6. 修改 web.xml 文件 :打开 c:\tomcat\conf 目录下的 web.xml 文件,找到并移除配置 invoker Servlet的两组注释行,以启用 invoker Servlet。
7. 创建 classes 目录 :在 c:\tomcat\webapps\ROOT\WEB-INF 目录下创建 classes 目录,Tomcat默认会在此目录中查找Servlet的类文件。

2.3 启动和停止Tomcat

安装和配置Tomcat后,可以通过以下步骤启动和停止Tomcat:
- 启动Tomcat :打开命令窗口,切换到 c:\tomcat\bin 目录,输入 startup 命令。如果看到类似“INFO: Server startup in 2817 ms”的消息,说明Tomcat已成功启动。
- 停止Tomcat :如果需要修改Tomcat的配置文件,可以在修改后通过运行 c:\tomcat\bin 目录下的 shutdown 命令停止Tomcat,然后再次运行 startup 命令启动。

如果Tomcat窗口出现几秒后关闭并显示异常消息,可能是因为系统中已经有一个Web服务器在运行,占用了Tomcat想要使用的HTTP通信端口。可以编辑 c:\tomcat\conf 目录下的 server.xml 文件,找到 <Connector port="8080" ... /> 标签,将端口号改为其他值,如 18080

2.4 测试Tomcat

要验证Tomcat是否安装正确,可以打开浏览器窗口,输入以下地址:

http://localhost:8080/servlets-examples/index.html

如果修改了端口号,需要使用修改后的端口号代替 8080 。如果页面正常显示,说明Tomcat安装成功。滚动页面可以找到各种示例Servlet的链接和源代码,通过运行这些示例可以了解Servlet的工作原理和使用方法。

通过以上介绍,你已经了解了Java Applet和Servlet的基本概念、创建方法以及相关的配置和测试步骤。Applet适用于在网页中嵌入小型的Java应用程序,但由于安全和兼容性问题,不是创建面向大众的Web应用程序的最佳选择。而Servlet提供了一种动态内容的实现方式,是开发Web应用程序的重要工具之一。希望这些内容对你的Web编程学习有所帮助。

Java Web编程:Applet与Servlet入门指南

3. 深入理解Servlet的应用场景与优势

Servlet在Web开发中有着广泛的应用场景,其优势也十分明显。

3.1 应用场景
  • 动态内容生成 :如电商网站的商品详情页,根据用户的不同选择和数据库中的数据动态生成页面内容。
  • 用户交互处理 :处理用户在表单中提交的数据,如注册、登录等操作。
  • 数据处理与业务逻辑实现 :对用户提交的数据进行验证、处理和存储,实现复杂的业务逻辑。
3.2 优势
  • 性能高效 :Servlet运行在服务器端,处理请求和生成响应的速度快,能够高效地处理大量并发请求。
  • 可扩展性强 :可以方便地与其他Java技术集成,如数据库、缓存等,实现更复杂的功能。
  • 安全性高 :Servlet可以对用户请求进行严格的验证和过滤,防止恶意攻击和数据泄露。
4. 创建简单Servlet示例

下面通过一个简单的示例来演示如何创建一个Servlet。

4.1 编写Servlet代码
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class SimpleServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>Welcome to the Simple Servlet!</h1>");
        out.println("</body></html>");
    }
}

在这个示例中, SimpleServlet 继承自 HttpServlet ,并重写了 doGet 方法。当用户通过GET请求访问该Servlet时,会返回一个包含欢迎信息的HTML页面。

4.2 配置Servlet

要让Tomcat能够识别和处理这个Servlet,需要在 web.xml 文件中进行配置。在 c:\tomcat\conf\web.xml 文件中添加以下内容:

<servlet>
    <servlet-name>SimpleServlet</servlet-name>
    <servlet-class>SimpleServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>SimpleServlet</servlet-name>
    <url-pattern>/simple</url-pattern>
</servlet-mapping>

上述配置将 SimpleServlet 映射到 /simple 这个URL模式,当用户访问 http://localhost:8080/simple 时,Tomcat会调用 SimpleServlet 来处理请求。

4.3 测试Servlet

将编译好的 SimpleServlet.class 文件复制到 c:\tomcat\webapps\ROOT\WEB-INF\classes 目录下,启动Tomcat后,在浏览器中输入 http://localhost:8080/simple ,如果看到欢迎信息的页面,说明Servlet配置和运行成功。

5. 处理表单数据的Servlet示例

除了简单的响应,Servlet还可以处理用户在表单中提交的数据。

5.1 创建HTML表单
<!DOCTYPE html>
<html>
<head>
    <title>Form Example</title>
</head>
<body>
    <form action="formServlet" method="post">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name"><br>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email"><br>
        <input type="submit" value="Submit">
    </form>
</body>
</html>

这个表单包含两个输入字段:姓名和邮箱,用户点击提交按钮后,表单数据将以POST请求的方式发送到 formServlet

5.2 编写处理表单数据的Servlet
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class FormServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String name = request.getParameter("name");
        String email = request.getParameter("email");
        out.println("<html><body>");
        out.println("<h1>Thank you for submitting the form!</h1>");
        out.println("<p>Name: " + name + "</p>");
        out.println("<p>Email: " + email + "</p>");
        out.println("</body></html>");
    }
}

FormServlet 中,重写了 doPost 方法,获取表单中提交的姓名和邮箱数据,并将其显示在响应页面中。

5.3 配置和测试

同样,需要在 web.xml 文件中配置 FormServlet

<servlet>
    <servlet-name>FormServlet</servlet-name>
    <servlet-class>FormServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>FormServlet</servlet-name>
    <url-pattern>/formServlet</url-pattern>
</servlet-mapping>

将编译好的 FormServlet.class 文件复制到 c:\tomcat\webapps\ROOT\WEB-INF\classes 目录下,启动Tomcat后,在浏览器中打开HTML表单页面,填写数据并提交,即可看到处理结果页面。

6. 总结

通过以上内容,我们详细介绍了Java Applet和Servlet的基本概念、创建方法、配置和测试步骤。Applet可以在网页中嵌入小型的Java应用程序,但由于兼容性和安全问题,使用场景逐渐减少。而Servlet作为一种强大的Web开发技术,能够高效地处理用户请求,实现动态内容生成和复杂的业务逻辑,在现代Web开发中有着广泛的应用。

以下是一个简单的流程图,展示了Servlet处理用户请求的基本流程:

graph LR
    A[用户发送请求] --> B[Web服务器接收请求]
    B --> C{请求是否指向Servlet?}
    C -- 是 --> D[Web服务器调用Servlet]
    C -- 否 --> E[Web服务器返回静态文件]
    D --> F[Servlet处理请求]
    F --> G[Servlet生成响应]
    G --> H[Web服务器将响应返回给用户]

希望本文能够帮助你快速入门Java Web编程,掌握Applet和Servlet的基本使用方法,为进一步学习和开发更复杂的Web应用程序打下坚实的基础。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值