NetBeans IDE 4.0 Web 应用程序 Starter kit

推荐的 NetBeans 文章!
此 Web 应用程序深受 Jayson falkner 和 Kevin R Jones 合著的精品图书"Servlets and JSP the J2EE Web Tier"(Servlet 和 JSP - J2EE Web 层)的启发。

如果您对这本书感兴趣,请到
Amazon.com
http://www.amazon.com/exec/obidos/ASIN/0321136497/102-1831065-4468902 购买。

简介

本教程旨在指导您完成使用 NetBeans 4.0 开发模型视图控制 Web 应用程序的基本过程,以使您在此基础上继续进行开发。我们首先设计一个 POJO 对象以作为我们的模型,然后设计一组视图文件和一个控制器。完成后,我们将扩展该项目以使用 JDBC 与基础 MySQL 数据存储进行交互。

下载文件和源代码


开始


创建新的 Web 应用程序

  1. 选择 "File"(文件)> "New Project"(新建项目)。在 "Categories"(类别)中,选择 "Web"。在 "Projects"(项目)列表中,选择 "Web Application"(Web 应用程序),然后单击 "Next"(下一步)按钮。
Wizard2
  1. 在 "Project Name"(项目名称)中,输入 Netbeans4Tutorial。

Wizard1
  1. 将 "Set as Main Project"(设置为主项目)复选框保留为选中状态。请注意,上下文路径为 /Netbeans4Tutorial
  2. 注意:"Description"(描述)面板中描述的是 Servlet 规范 2.4,我们必须满足该要求,因为将在此项目中大量使用 EL(表达式语言)。
  3. 单击 "Finish"(完成)。IDE 将创建 $PROJECTHOME/Netbeans4Tutorial 项目文件夹。此项目文件夹包含所有源代码和项目 meta 数据,例如项目的 Ant 脚本。在 IDE 中,将打开 HelloWeb 项目。您可以在 "Projects"(项目)窗口中查看其逻辑结构,在 "Files"(文件)窗口中查看其文件结构。

创建 POJO 模型


创建模型

  1. 展开项目节点和 "Source Packages"(源包)节点。请注意,"Source Packages"(源包)节点仅包含一个空的缺省包节点。
  2. 右键单击 "Source Packages"(源包)节点,然后选择 "New"(新建)> "Java Class"(Java 类)。
  3. 在 "Class Name"(类名)文本框中输入 StarterModel,然后在 "Package"(包)组合框中输入 org.netbeans.starttutorial.model
  4. 单击 "Finish"(完成)。
StarterModel

添加字段和方法

  1. 现在,Netbeans 生成了一个空类定义,该使用一些字段名称填充该类定义了。
  2. 在模型中键入或复制这些字段名称。
  3. 右键单击字段名称,然后从 "Refactoring"(重构)菜单中选择“封装”。
  4. private int id;
    private String authour;
    private String summary;
    private String story;
    private String topic;
    private java.sql.Timestamp date;
  5. 它应该如下所示。启用所有复选框,然后按 "Next >"(下一步 >)。
encapsulate.jpg

该图显示选择了所有字段,以便为这些字段生成取值方法和赋值方法。

metodes.jpg


最后,添加 import 语句,并将下面的方法添加到 starterModel 类中以完成该类。
import java.util.ArrayList;
import java.util.List;




public List getpopulateStarterModelArray ()
{

List starterModelarray = new ArrayList ();
StarterModel s =
getModel (1, "Hello World ", "The First part of ", "the tutorial is ", "over",new java.util.Date ());


StarterModel st =
getModel (2, "now ", "it is ", "time to ", "add some more pages ",new java.util.Date ());

StarterModel stu =
getModel (3, "But first we have ", "to discuss", "what actually", "happened here dont you think",new java.util.Date ());

starterModelarray.add (s);
starterModelarray.add (st);
starterModelarray.add (stu);
return starterModelarray;
}

private StarterModel getModel (int a, String b,String c,String d,String e,java.util.Date f )
{
StarterModel sModel = new StarterModel ();
sModel.setId (a);
sModel.setAuthour (b);
sModel.setStory (c);
sModel.setTopic (d);
sModel.setSummary (e);
sModel.setDate (new java.sql.Timestamp (new java.util.Date ().getTime ()));
return sModel;
}

生成控制器


重命名字段

  1. 展开项目节点和 "Source Packages"(源包)节点。请注意,"Source Packages"(源包)节点仅包含一个空的缺省包节点。
  2. 右键单击 "Source Packages"(源包)节点,然后选择 "New"(新建)> "Java Class"(Java 类)。
  3. 在 "Class Name"(类名)文本框中输入 "FrontControllerFilter",然后在 "Package"(包)组合框中输入 org.netbeans.starttutorial.controller
  4. 单击 "Finish"(完成)。

生成 getter 和 setter 方法

  1. 此处列出了 FrontControllerFilter 类以便于您进行复制。
     package org.netbeans.starttutorial.controller;

    import java.io.*;

    import javax.servlet.*;
    import javax.servlet.http.*;
    import org.netbeans.starttutorial.interfaces.PageProcessImplementation;
  2. public class FrontControllerFilter implements Filter
    {
    protected FilterConfig config = null;

    public void init (FilterConfig filterConfig)
    {
    config = filterConfig;
    }

    public void doFilter ( ServletRequest req, ServletResponse res,
    FilterChain chain ) throws IOException, ServletException
    {
    if (!(req instanceof HttpServletRequest))
    {
    throw new ServletException ("Filter requires a HTTP request.");
    }


    HttpServletRequest request = (HttpServletRequest)req;
    HttpServletResponse response = (HttpServletResponse)res;
    String uri = request.getRequestURI ();


    int begin = uri.lastIndexOf ("/")+1;
    int end = uri.lastIndexOf (".");

    String name = "pageholder";
    if (begin < end)
    {
    name = uri.substring (begin, end);
    }

    boolean doFilter = true;

    // try to load and run an implicit MVC control component.
    try
    {
    Object o = Class.forName ("org.netbeans.starttutorial.viewimplementation."+name).newInstance ();
    if (!(o instanceof PageProcessImplementation))
    {
    throw new ServletException ("no interface");
    }

    PageProcessImplementation control = (PageProcessImplementation)o;
    doFilter = control.processPageRequest (request, response);
    }
    catch (ClassNotFoundException e)
    {
    System.out.print ("\nClassNotFoundException \n" + e);
    }
    catch (InstantiationException e)
    {
    System.out.print ("\nInstantiationException \n" + e);
    }
    catch (IllegalAccessException e)
    {
    System.out.print ("\nIllegalAccessException \n" + e);
    }

    if (doFilter)
    {
    chain.doFilter (request, response);
    }
    }

    public void destroy ()
    {
    }
    }

请注意,此处出现了 import 语句错误。这是因为我们还没有创建该特定接口,我们将在后面进行创建。
错误


使用类似下面的包名和类名生成一个新的 Java 类:
package org.netbeans.starttutorial.interfaces;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import javax.servlet.ServletException;


/**
* a public interfaqce for everyone to use
* todays task: See controller to figure out why we use this interface in the first plase
*/
public interface PageProcessImplementation
{
public boolean processPageRequest (HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException;
}

创建视图页面


编辑缺省 JavaServer Pages 文件和创建类基础代码

  1. 展开项目节点和 "Web Pages"(Web 页)节点。请注意,IDE 创建了缺省 JavaServer Pages 页 index.jsp。我们不使用此页面。
  2. 右键单击 "Web Pages"(Web 页)节点,然后选择 "New"(新建)> "JSP"。
  3. 在“JSP 文件名”文本框中输入 "pageholder",然后在 "Folder"(文件夹)字段中输入 view
  4. 单击 "Finish"(完成)。
  5. pageholder
  6. 粘贴或键入内容,以使 pageholder.jsp 文件如下所示。

    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>

    <%--
    下面的 taglib 指令导入 JSTL 库。如果您取消注释该指令,
    则还必须将 JSTL 库添加到项目中。在 "Project Properties"(项目属性)中,
    选择 "Build"(生成)-> "Compiling"(编译源代码),然后使用 "Add Libray... "(添加库...)按钮添加
    JSTL 1.1 库。
    --%>

    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>


    <html>
    <body>
    <c:forEach var="starterModel" begin="0" items="${arrayofstarterobjects}">
    <c:out value="${starterModel.id}" />
    <br>
    <c:out value="${starterModel.authour}" />
    <c:out value="${starterModel.story}" />
    <c:out value="${starterModel.summary}" />
    <c:out value="${starterModel.topic}" />
    <p>
    </c:forEach>

    Lets print out todays date to:
    <c:forEach var="starterModel" begin="0" end ="0" items="${arrayofstarterobjects}">
    ${starterModel.date}
    </c:forEach>
    </body>
    </html>

  1. 展开项目节点和 "Source Packages"(源包)节点。
  2. 右键单击 "Web Pages"(Web 页)节点,然后选择 "New"(新建)> "JSP"。
  3. 在“JSP 文件名”文本框中输入 "pageholder",然后在 "Folder"(文件夹)字段中输入 view
  4. 单击 "Finish"(完成)。

  5. pageholder.jpg
  6. package org.netbeans.starttutorial.viewimplementation;

    import java.io.IOException;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.netbeans.starttutorial.controller.*;
    import org.netbeans.starttutorial.model.*;
    import org.netbeans.starttutorial.interfaces.PageProcessImplementation;


    /**
    *
    * @author
    */
    public class pageholder implements PageProcessImplementation
    {
    public boolean processPageRequest (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
    ServletContext sc = request.getSession ().getServletContext ();
    try
    {
    StarterModel starterModel = new StarterModel ();

    request.setAttribute ("arrayofstarterobjects", starterModel.getpopulateStarterModelArray ());
    }
    catch(Exception e)
    {
    System.out.print ("Exception in class pageholder");
    }
    return true;
    }
    }

更改 web.xml 文件

  1. 展开项目节点和 "Web-INF" 节点。
  2. 双击以在编辑器中打开 web.xml 文件。
  3. 粘贴或键入内容,以使 web.xml 文件如下所示。
  4.      <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
    <filter>
    <filter-name>ControlFilter</filter-name>
    <filter-class>org.netbeans.starttutorial.controller.FrontControllerFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>ControlFilter</filter-name>
    <url-pattern>/view/*</url-pattern>
    </filter-mapping>
    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>
    <welcome-file-list>
    <welcome-file>
    index.html
    </welcome-file>
    <welcome-file>
    index.htm
    </welcome-file>
    <welcome-file>
    view/pageholder.jsp
    </welcome-file>
    </welcome-file-list>
    </web-app>

编译和运行项目


添加所需的库

  • 右键单击项目节点,然后选择 "Properties"(属性)。
  • 选择 "Build"(生成)| "Compiling Sources"(编译源代码)。
  • 单击 "Add Library"(添加库)。
  • 选择 "JSTL 1.1",然后单击 "Add Library"(添加库)。
  • 单击 "OK"(确定)。

  • libs.jpg

生成项目

  • 选择 "Build"(生成)> "Build Main Project (F11)"(生成主项目 (F11))。将生成项目。

运行主项目

  • 从 "Run"(运行)菜单中选择 "Run"(运行)> "Run Main Project (F6)"(运行主项目 (F6))。双击 "Output"(输出)窗口标题栏以将其最大化,以便查看所有输出。请注意,Ant 先生成 Netbeans4Tutorial.war,然后使用它编译 Netbeans4Tutorial。最后,它使用缺省服务器部署 Web 应用程序。再次双击 "Output"(输出)窗口标题栏以将其最小化。
  • 选择 "Files"(文件)窗口,然后展开 HelloWeb 项目节点。生成类文件位于 build 文件夹中。生成 WAR 文件位于 dist 文件夹中。
  • 按 F6 键以再次运行该程序。不需要编译任何新内容,只是运行该程序而已。

  • 运行

第 2 部分 - 添加数据库


创建数据库/数据存储

  1. 如果您未安装 MySQL 数据库,则需要完成此操作。
  2. 确保从以下网址中下载最新的 mysql jdbc 连接器:http://dev.mysql.com/downloads/connector/j/3.1.html
  3. 启动 mysql
  4. 在 Netbeans 中打开 "Runtime"(运行环境)标签,展开 "Database"(数据库)> "Drivers"(驱动程序)节点。
  5. 右键单击,然后选择 "Add Driver"(添加驱动程序)。
  6. 找到 mysql_connector.jar 文件,然后选择 "Add"(添加)。
  7. 按 "OK"(确定)以完成操作。
  8. 现在,选择新创建的 mysql 节点,右键单击,然后选择 "Connect Using"(连接设置)。
  9. 选择刚创建的 mysql 连接。
  10. 输入 jdbc:mysql://localhost/ 作为数据库 URL,并提供您的数据库用户名和口令(视情况而定)。按 "OK"(确定)。
  11. 右键单击 jdbc:mysql/localhost 节点,选择 "Execute Command"(执行命令),然后插入并执行 CREATE DATABASE nbstarterkit 命令。您现在已创建了自己的小数据库。
  12. 接下来,断开连接并删除 mysql 节点。
  13. 重复步骤 8 到 10,但改用以下 URL:jdbc:mysql://localhost/nbstarterkit。
  14. 执行以下命令以生成一个表:CREATE TABLE `content` (
      `id` int(11) NOT NULL auto_increment,
      `author` varchar(50) default NULL,
      `summary` text,
      `story` text,
      `topic` varchar(50) default NULL,
      `date` datetime default NULL,
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM;
  15. 然后,执行以下命令以填充该表:

    INSERT INTO `content` (`id`,`author`,`summary`,`story`,`topic`,`date`) VALUES ("1","Jan John Jullion-Ceccarelli","This guide is designed to help you transition your applications and IDE settings from NetBeans IDE 3.6 to NetBeans IDE 4.0, and to show you how to be even more productive with the new NetBeans IDE projects system.","This guide is designed to help you transition your applications and IDE settings from NetBeans IDE 3.6 to NetBeans IDE 4.0, and to show you how to be even more productive with the new NetBeans IDE projects system.","NEWS","2005-01-30 21:39:39");

运行支持 JDBC 的完整项目

  1. 确保 MySQL 已启动并正在运行。
  2. 将 mysql-connector.jar 添加到项目中。
  3. 从 "Run"(运行)菜单中选择 "Run"(运行)> "Run Main Project (F6)"(运行主项目 (F6))。双击 "Output"(输出)窗口标题栏以将其最大化,以便查看所有输出。请注意,Ant 先生成 Netbeans4Tutorial.war,然后使用它编译 Netbeans4Tutorial。最后,它使用缺省服务器部署 Web 应用程序。再次双击 "Output"(输出)窗口标题栏以将其最小化。
  4. 选择 "Files"(文件)窗口,然后展开 HelloWeb 项目节点。生成类文件位于 build 文件夹中。生成 WAR 文件位于 dist 文件夹中。
  5. 按 F6 键以再次运行该程序。不需要编译任何新内容,只是运行该程序而已。
final.jpg