Web 应用程序开发简介
本文档将向您介绍有关使用 NetBeans IDE 开发 Web 应用程序的基础知识。它将演示如何创建简单的 Web 应用程序,如何将该应用程序部署到服务器,以及如何在浏览器中查看该应用程序的表现形式。该应用程序采用一个 JavaServer Pages™ (JSP) 页来要求您输入自己的姓名。然后,使用 JavaBeans™ 组件在 HTTP 会话期间保留该姓名,并检索该姓名以输出到第二个 JSP 页上。
目录

要学习本教程,您需要具备以下软件和资源。
| NetBeans IDE |
Java 版本 |
| Java Development Kit (JDK) |
版本 6 |
GlassFish Server Open Source Edition
或
Tomcat Servlet 容器
或
Oracle Web Logic 服务器 |
3.x
版本 6.x (EE 5) 或 7.x(EE 5 或 EE 6)
11gR1 (10.3.3) 或更高版本 |
注意:
- Java EE 安装(不是 Java SE!)使您能够有选择地安装 GlassFish 服务器和 Apache Tomcat Servlet 容器。
- 如果需要将项目与工作解决方案进行比较,可以下载样例应用程序。
设置 Web 应用程序项目
- 从主菜单中选择 "File"(文件)> "New Project"(新建项目)(Ctrl-Shift-N)。在 "Categories"(类别)下,选择 "Java Web"。在 "Projects"(项目)下选择 "Web Application"(Web 应用程序),然后单击 "Next"(下一步)。
- 在步骤 2 中,在 "Project Name"(项目名称)文本框中输入 HelloWeb。
- 将 "Project Location"(项目位置)指定为计算机上的任意目录。在本教程中,将此目录称为 $PROJECTHOME。
- (可选)选中 "Use Dedicated Folder for Storing Libraries"(使用专用文件夹存储库)复选框,并指定库文件夹的位置。有关此选项的详细信息,请参见共享项目库。
- 单击 "Next"(下一步)。"Server Settings"(服务器和设置)面板打开。选择要与应用程序一起使用的 Java EE 版本。
- 选择要在其中部署应用程序的服务器。这里仅列出了已在 IDE 中注册的服务器。请注意,服务器上的上下文路径将变为 /HelloWeb(基于您在上一步中为项目指定的名称)。
- 单击 "Next"(下一步)。在 "Frameworks"(框架)面板中,单击 "Finish"(完成)以创建项目。
IDE 将创建 $PROJECTHOME/HelloWeb 项目文件夹。此项目文件夹包含所有源代码和项目 meta 数据,例如项目的 Ant 生成脚本。在 IDE 中,将打开 HelloWeb 项目。在主窗口的源代码编辑器中,将打开欢迎页 index.jsp。您可以在 "FIles"(文件)窗口 (Ctrl-2) 中查看项目的文件结构,在 "Projects"(项目)窗口 (Ctrl-1) 中查看其逻辑结构。

创建并编辑 Web 应用程序源文件
创建并编辑源文件是 IDE 所提供的最重要的功能。毕竟,这大概是您花费时间最多的工作。IDE 提供了各种工具来迎合任何开发者的个人风格,无论您是愿意手动编写所有代码,还是希望 IDE 为您生成大量代码。
创建 Java 包和 Java 源文件
- 在 "Projects"(项目)窗口中,展开 "Source Packages"(源包)节点。请注意,"Source Packages"(源包)节点仅包含一个空的缺省包节点。
- 右键单击 "Source Packages"(源包)节点,然后选择 "New"(新建)> "Java Class"(Java 类)。在 "Class Name"(类名)文本框中输入 NameHandler,并在 "Package"(包)组合框中键入 org.mypackage.hello。单击 "Finish"(完成)。请注意,将在源代码编辑器中打开新的 NameHandler.java 文件。
- 在源代码编辑器中,通过在紧靠类声明的下方键入以下代码行来声明一个 String 变量。
String name;
- 将以下构造函数添加到类中:
public NameHandler() { }
- 在 NameHandler() 构造函数中添加以下代码行:
name = null;
生成 getter 和 setter 方法
- 在源代码编辑器中右键单击 name 字段,然后选择 "Refactor"(重构)> "Encapsulate Fields"(封装字段)。将打开 "Encapsulate Fields"(封装字段)对话框,其中列出 name 字段。请注意,缺省情况下将 "Fields' Visibility"(字段的可视性)设置为 "private",将 "Accessors' Visibility"(存取方法的可视性)设置为 "public",这表示类变量声明的访问修饰符将被指定为 private,而 getter 和 setter 方法将分别以 public 和 private 修饰符生成。

- 单击 "Refactor"(重构)。将为 name 字段生成 getter 和 setter 方法。类变量的修饰符将被设置为 private,而 getter 和 setter 方法将以 public 修饰符生成。Java 类现在应该与以下代码类似。
package org.mypackage.hello;
/**
*
* @author nbuser
*/
public class NameHandler {
private String name;
/** Creates a new instance of NameHandler */
public NameHandler() {
name = null;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
编辑缺省的 JavaServer Pages 文件
- 通过单击在源代码编辑器顶部显示的 index.jsp 文件标签以重新选中该文件。
在位于源代码编辑器右侧的 "Palette"(组件面板)(Ctrl-Shift-8) 中,展开 "HTML Forms"(HTML 表单),然后将一个表单项拖至源代码编辑器中 <h1> 标记后的某个位置。
将显示 "Insert Form"(插入表单)对话框。
- 请指定以下值:
- Action(操作):response.jsp
- Method(方法):GET
- Name(名称):Name Input Form
单击 "OK"(确定)。将在 index.jsp 文件中添加一个 HTML 表单。

- 将一个 "Text Input"(文本输入)项拖至紧靠 </form> 标记前面的位置,然后指定以下值:
- Name(名称):name
- Type(类型):text
单击 "OK"(确定)。将在 <form> 标记之间添加一个 HTML <input> 标记。从此标记中删除 value 属性。
- 将一个按钮项拖至紧靠 </form> 标记前面的位置。请指定以下值:
- Label(标签):OK
- Type(类型):submit
单击 "OK"(确定)。将在 <form> 标记之间添加一个 HTML 按钮。
- 在紧靠第一个 <input> 标记前面的位置键入 Enter your name:,然后将 <h1> 标记之间的缺省 Hello World! 文本更改为 Entry Form。
- 在源代码编辑器中单击鼠标右键,然后选择 "Format"(格式化代码)(Alt-Shift-F) 以整理代码的格式。index.jsp 文件现在应该与以下代码类似:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Entry Form</h1>
<form name="Name Input Form" action="response.jsp">
Enter your name:
<input type="text" name="name" />
<input type="submit" value="OK" />
</form>
</body>
</html>
创建 JavaServer Pages 文件
- 在 "Projects"(项目)窗口中,右键单击 "HelloWeb" 项目节点,然后选择 "New"(新建)> "JSP"。“新建 JSP 文件”向导打开。将文件命名为 response,然后单击 "Finish"(完成)。请注意,在 "Projects"(项目)窗口中的 "index.jsp" 下方将显示 "response.jsp" 文件节点,并且会在源代码编辑器中打开新文件。
-
在位于源代码编辑器右侧的 "Palette"(组件面板)中,展开 "JSP",然后将一个使用 Bean 项拖至源代码编辑器中紧靠 <body> 标记下方的位置。将打开 "Insert Use Bean"(插入使用 Bean)对话框。指定下图中显示的值。
- ID:mybean
- Class(类):org.mypackage.hello.NameHandler
- Scope(范围):Session(会话)
单击 "OK"(确定)。请注意,将在 <body> 标记的下方添加 <jsp:useBean> 标记。
- 将一个设置 Bean 属性项从 "Palette"(组件面板)拖至紧靠 <h1> 标记前面的位置,然后单击 "OK"(确定)。在出现的 <jsp:setProperty> 标记中,删除空的 value 属性,然后将其编辑为以下代码。如果 IDE 创建了 value = "" 属性,请将其删除!否则,它会覆盖传递到 index.jsp 中的 name 的值。
<jsp:setProperty name="mybean" property="name" />
正如 <jsp:setProperty> 文档中所述,可以通过各种方法来设置属性值。在本例中,index.jsp 页上的用户输入将成为传递至 request 对象的名称/值对。当使用 <jsp:setProperty> 标记设置属性时,可以根据 request 对象中包含的属性名称来指定值。因此,通过将 property 设置为 name,可以检索由用户输入所指定的值。
- 更改 <h1> 标记之间的文本,以使其如下所示:
<h1>Hello, !</h1>
- 将一个获取 Bean 属性项从 "Palette"(组件面板)拖放至 <h1> 标记之间的逗号后面。在 "Insert Get Bean Property"(插入获取 Bean 属性)对话框中指定以下值:
- Bean Name(Bean 名称):mybean
- Property Name(属性名称):name
单击 "OK"(确定)。请注意,此时将在 <h1> 标记之间添加 <jsp:getProperty> 标记。
注意:属性名称区分大小写。"name" 属性在 response.jsp 和 index.jsp 的输入表单中必须具有相同的大小写形式。
- 在源代码编辑器中单击鼠标右键,然后选择 "Format"(格式化代码)(Alt-Shift-F) 以整理代码的格式。response.jsp 文件的 <body> 标记现在应该与以下代码类似:
<body>
<jsp:useBean id="mybean" scope="session" class="org.mypackage.hello.NameHandler" />
<jsp:setProperty name="mybean" property="name" />
<h1>Hello, <jsp:getProperty name="mybean" property="name" />!</h1>
</body>
运行 Web 应用程序项目
IDE 使用 Ant 生成脚本来生成和运行 Web 应用程序。此生成脚本是由 IDE 基于您在 "New Project"(新建项目)向导中指定的选项以及项目的 "Project Properties"(项目属性)对话框(在 "Projects"(项目)窗口中,右键单击项目节点,然后从出现的菜单中选择 "Properties"(属性))中的选项来生成的。
-
在 "Projects"(项目)窗口中,右键单击 "HelloWeb" 项目节点,然后选择 "Run"(运行)(F6)。在运行 Web 应用程序时,IDE 会执行以下步骤:
- 生成和编译应用程序代码(请参见下面的注释)。可以通过从项目节点上下文菜单中选择 "Build"(生成)或 "Clean and Build"(清理并生成)来单独执行此步骤。
- 启动服务器。
- 将应用程序部署至服务器。可以通过从项目节点上下文菜单中选择 "Deploy"(部署)来单独执行此步骤。
- 在浏览器窗口中显示应用程序。
注意:缺省情况下,将在启用“在保存时编译”功能的情况下创建项目,因此无需先编译代码即可在 IDE 中运行应用程序。有关“在保存时编译”功能的详细信息,请参见创建、导入和配置 Java 项目指南的“在保存时编译”部分。
-
IDE 将打开一个输出窗口,其中显示运行应用程序的进度。查看 "Output"(输出)窗口中的 "HelloWeb" 标签。在此标签中,您可以遵循 IDE 执行的所有步骤。如果出现问题,IDE 将在此窗口中显示错误信息。
- IDE 会打开一个显示服务器状态的输出窗口。在 "Output"(输出)窗口中查看具有服务器名称的标签。
重要信息:如果 GlassFish 服务器无法启动,请将其手动启动并再次运行该项目。可以手动启动该服务器,方法是:在 "Services"(服务)窗口中右键单击该服务器节点,然后选择 "Start"(启动)。
服务器输出窗口会提供有关运行 Web 应用程序时所遇到问题的大量信息。服务器的日志也会很有帮助。它们位于服务器的相关域目录中。通过选择 "View"(视图)> "IDE log"(IDE 日志)还可以查看可见的 IDE 日志。
-
将在缺省浏览器中打开 index.jsp 页。请注意,在 IDE 显示服务器输出之前,浏览器窗口可能会打开。

在文本框中输入您的姓名,然后单击 "OK"(确定)。将出现 response.jsp 页,并向您显示一条简单的问候语。

疑难解答
我已经生成并运行了项目。当我单击 index.jsp 中的 "OK" 按钮时,会显示一个指示 response.jsp 不可用的错误页。
您是否使用的是 JDK 版本 6?请从主菜单中选择 "Help"(帮助)> "About"(关于)以验证 IDE 所使用的 JDK 版本。您是否使用的是 Tomcat 版本 6.x 或更高版本?请从主菜单中选择 "Tools"(工具)> "Servers"(服务器)。选择项目所使用的服务器,并请注意在靠近该对话框顶部的 "Server Type"(服务器类型)中所显示的输入内容。您也可以尝试下载样例项目并将其与自己的项目进行比较。
我已经生成并运行了项目,但没有出现任何名称,只显示 "Hello, !"
<jsp:setProperty> 标记是否包含 value = "" 属性?此属性会覆盖传递到 index.jsp 表单中的值,并将该值替换为一个空字符串。删除 value 属性。
我已经生成并运行了项目,但却得到 "Hello, null!"
首先,检查 IDE 用于应用程序和服务器的 "Output"(输出)窗口以及服务器日志。服务器是否正在运行?服务器是否已部署?如果服务器正在运行并且已部署应用程序,您是否获取了 org.apache.jasper.JasperException: java.lang.NullPointerException?这通常表明代码中的值未正确初始化。在本教程中,这意味着在 JSP 文件的属性名称中可能某处存在输入错误。请记得,属性名称区分大小写!
另请参见
“Web 应用程序开发简介”教程到此结束。本文档演示了如何使用 NetBeans IDE 创建简单的 Web 应用程序,如何将该应用程序部署到服务器,以及如何在浏览器中查看该应用程序的表现形式。此外,还说明了如何在应用程序中使用 JavaServer Pages 和 JavaBeans 来收集、保留和输出用户数据。
有关在 NetBeans IDE 中开发 Web 应用程序的更深入的相关信息,请参见以下资源: