// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Introduction to Developing Web Applications
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Introduction to Developing Web Applications - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Introduction to Developing Web Applications

This document takes you through the basics of using NetBeans IDE to develop web applications. It demonstrates how to create a simple web application, deploy it to a server, and view its presentation in a browser. The application employs a link:http://www.oracle.com/technetwork/java/javaee/jsp/index.html[+JavaServer Pages+]™ (JSP) page to ask you to input your name. It then uses a JavaBeans component to persist the name during the HTTP session, and retrieves the name for output on a second JSP page.


image::images/netbeans-stamp-80-74-73.png[title="Content on this page applies to the NetBeans IDE 7.2, 7.3, 7.4 and 8.0"]


*To follow this tutorial, you need the following software and resources.*

|===
|Software or Resource |Version Required 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |7.2, 7.3, 7.4, 8.0, Java EE version 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java Development Kit (JDK)+] |version 7 or 8 

|GlassFish Server Open Source Edition 
_or_ 
Tomcat servlet container 
_or_ 
Oracle Web Logic server |4.x 
_ _ 


.x or 8.x

11gR1 (10.3.3) or later 
|===

*Notes:*

* The Java EE installation (not Java SE!) enables you to optionally install the GlassFish server and the Apache Tomcat servlet container.
* If you would like to compare your project with a working solution, you can link:https://netbeans.org/projects/samples/downloads/download/Samples/Java%20Web/HelloWebEE6.zip[+download the sample application+].


== Setting Up a Web Application Project

1. Choose File > New Project (Ctrl-Shift-N) from the main menu. Under Categories, select Java Web. Under Projects, select Web Application then click Next.
2. In Step 2, enter  ``HelloWeb``  in the Project Name text box.
3. Specify the Project Location to any directory on your computer. For purposes of this tutorial, this directory is referred to as  ``_$PROJECTHOME_`` .
4. (Optional) Select the Use Dedicated Folder for Storing Libraries checkbox and specify the location for the libraries folder. See link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG366[+Creating Java Projects+] in _Developing Applications with NetBeans IDE_ for more information on this option.
5. Click Next. The Server and Settings panel opens. Select the version of Java EE you want to use with your application.
6. Select the server to which you want to deploy your application. Only servers that are registered with the IDE are listed. Note that the Context Path (i.e., on the server) becomes  ``/HelloWeb`` , which is based on the name you gave the project in a previous step.
7. Click Finish.

The IDE creates the  ``_$PROJECTHOME_/HelloWeb``  project folder. You can view the project's file structure in the Files window (Ctrl-2), and its logical structure in the Projects window (Ctrl-1).

image::images/projects-window.png[]

The project folder contains all of your sources and project metadata, such as the project's Ant build script. The HelloWeb project opens in the IDE. The welcome page,  ``index.jsp`` , opens in the Source Editor in the main window.

*Note.* Depending on the server and Java EE version that you specified when you created the project, the IDE might generate  ``index.html``  as the default welcome page for the web project. You can perform the steps in this tutorial and use the  ``index.html``  file or you can use the New File wizard to generate an  ``index.jsp``  file to use as the welcome page, in which case you should delete the  ``index.html``  file.


== Creating and Editing Web Application Source Files

Creating and editing source files is the most important function that the IDE serves. After all, that is probably what you spend most of your day doing. The IDE provides a wide range of tools that can compliment any developer's personal style, whether you prefer to code everything by hand or want the IDE to generate large chunks of code for you.


=== Creating a Java Package and a Java Source File

1. In the Projects window, expand the Source Packages node. Note the Source Packages node only contains an empty default package node.
2. Right-click the Source Packages node and choose New > Java Class. Enter  ``NameHandler``  in the Class Name text box and type  ``org.mypackage.hello``  in the Package combo box. Click Finish. Notice that the new  ``NameHandler.java``  file opens in the Source Editor.
3. In the Source Editor, declare a  ``String``  variable by typing the following line directly below the class declaration.

[source,java]
----

String name;
----


. Add the following constructor to the class:

[source,java]
----

public NameHandler() { }
----


. Add the following line in the  ``NameHandler()``  constructor:

[source,java]
----

name = null;
----


=== Generating Getter and Setter Methods

1. Right-click the  ``name``  field in the Source Editor and choose Refactor > Encapsulate Fields.

The Encapsulate Fields dialog opens, listing the  ``name``  field. Notice that Fields' Visibility is by default set to private, and Accessors' Visibility to public, indicating that the access modifier for class variable declaration will be specified as private, whereas getter and setter methods will be generated with  ``public``  and  ``private``  modifiers, respectively.

image::images/encapsulatefields-dialog.png[]


. Click Refactor.

Getter and setter methods are generated for the  ``name``  field. The modifier for the class variable is set to  ``private``  while getter and setter methods are generated with public modifiers. The Java class should now look similar to the following.


[source,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;
    }

}
----


=== Editing the Default JavaServer Pages File

1. Refocus the  ``index.jsp``  file by clicking its tab displayed at the top of the Source Editor.
2. 
In the Palette (Ctrl-Shift-8) located to the right of the Source Editor, expand HTML Forms and drag a Form item to a point after the  ``<h1>``  tags in the Source Editor.

The Insert Form dialog box displays.



. Specify the following values:
* *Action: *response.jsp
* *Method: *GET
* *Name: *Name Input Form

Click OK. An HTML form is added to the  ``index.jsp``  file.

image::images/input-form.png[]


. Drag a Text Input item to a point just before the  ``</form>``  tag, then specify the following values:
* *Name: *name
* *Type: *text
Click OK. An HTML  ``<input>``  tag is added between the  ``<form>``  tags. Delete the  ``value``  attribute from this tag.


. Drag a Button item to a point just before the  ``</form>``  tag. Specify the following values:
* *Label: *OK
* *Type: *submit
Click OK. An HTML button is added between the  ``<form>``  tags.


. Type  ``Enter your name:``  just before the first  ``<input>``  tag, then change the default  ``Hello World!``  text between the  ``<h1>``  tags to  ``Entry Form`` .


. Right-click within the Source Editor and choose Format (Alt-Shift-F) to tidy the format of your code. Your  ``index.jsp``  file should now appear similar to the following:

[source,xml]
----

<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>
----


=== Creating a JavaServer Pages File

1. In the Projects window, right-click the HelloWeb project node and choose New > JSP. The New JSP File wizard opens. Name the file  ``response`` , and click Finish. Notice that a  ``response.jsp``  file node displays in the Projects window beneath  ``index.jsp`` , and the new file opens in the Source Editor.
2. 
In the Palette to the right of the Source Editor, expand JSP and drag a Use Bean item to a point just below the  ``<body>``  tag in the Source Editor. The Insert Use Bean dialog opens. Specify the values shown in the following figure.

image::images/usebean-dialog.png[]

* *ID: *mybean
* *Class: *org.mypackage.hello.NameHandler
* *Scope: *session
Click OK. Notice that the  ``<jsp:useBean>``  tag is added beneath the  ``<body>``  tag.


. Drag a Set Bean Property item from the Palette to a point just before the  ``<h1>``  tag and click OK. In the  ``<jsp:setProperty>``  tag that appears, delete the empty  ``value``  attribute and edit as follows. Delete the  ``value = ""``  attribute if the IDE created it! Otherwise, it overwrites the value for  ``name``  that you pass in  ``index.jsp`` .

[source,java]
----

<jsp:setProperty name="mybean" property="name" />
----

As indicated in the

 ``<jsp:setProperty>``  documentation, you can set a property value in various ways. In this case, the user input coming from  ``index.jsp``  becomes a name/value pair that is passed to the  ``request``  object. When you set a property using the  ``<jsp:setProperty>``  tag, you can specify the value according to the name of a property contained in the  ``request``  object. Therefore, by setting  ``property``  to  ``name`` , you can retrieve the value specified by user input.



. Change the text between the <h1> tags so that it looks like this:

[source,xml]
----

<h1>Hello, !</h1>
----


. Drag a Get Bean Property item from the Palette and drop it after the comma between the  ``<h1>``  tags. Specify the following values in the Insert Get Bean Property dialog:
* *Bean Name: *mybean
* *Property Name: *name

Click OK. Notice that  ``<jsp:getProperty>``  tag is now added between the  ``<h1>``  tags.

*Caution:* Property names are case-sensitive. The "name" property must be in the same case in  ``response.jsp``  and in the input form in  ``index.jsp`` .



. Right-click within the Source Editor and choose Format (Alt-Shift-F) to tidy the format of your code. The  ``<body>``  tags of your  ``response.jsp``  file should now appear similar to the following:

[source,xml]
----

<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>
----


== Running a Web Application Project

The IDE uses an Ant build script to build and run your web applications. The IDE generates the build script based on the options you specify in the New Project wizard, as well as those from the project's Project Properties dialog box (In the Projects window, choose Properties from the project node's right click menu).

1. In the Projects window, right-click the HelloWeb project node and choose Run (F6). When you run a web application, the IDE performs the following steps:

* Building and compiling the application code (see note below). You can perform this step in isolation by selecting Build or Clean and Build from the project node context menu.
* Launching the server.
* Deploying the application to the server. You can perform this step in isolation by selecting Deploy from the project node context menu.
* Displaying the application in a browser window.

*Note:* By default, the project has been created with the Compile on Save feature enabled, so you do not need to compile your code first in order to run the application in the IDE.



. The IDE opens an output window that shows the progress of running the application. Look at the HelloWeb tab in the Output window. In this tab, you can follow all the steps that the IDE performs. If there is a problem, the IDE displays error information in this window.

image::images/app-output-tab.png[]


. The IDE opens an output window showing the server status. Look at the tab in the Output window with the name of your server.

*Important:* If the GlassFish server fails to start, start it manually and run the project again. You can start the server manually from the Services window, by right-clicking the server node and selecting Start.

The server output window is very informative about problems running Web applications. The server's logs can also be helpful. They are located in the server's relevant domain directory. You can also view the IDE log, visible by selecting View > IDE log.

image::images/gf-output-tab.png[]


. 
The  ``index.jsp``  page opens in your default browser. Note that the browser window may open before the IDE displays the server output.

image::images/result1.png[]


. 
Enter your name in the text box, then click OK. The  ``response.jsp``  page displays, providing you with a simple greeting.

image::images/result2.png[]


== Troubleshooting

_I've built and run the project. When I click the OK button for  ``index.jsp`` , an error page displays indicating that  ``response.jsp``  is not available._

Have you looked in the IDE's Output window (Ctrl-4) in the project tab or in the server tab? What error messages are there? What JDK does your project use? What server? JDK 7 requires GlassFish 3.x or Tomcat 7.x. Right-click the project's node in the Projects window and select Properties. The JDK is in the Libraries category, in the Java Platform field. The server version is in the Run category. Lastly, download link:https://netbeans.org/projects/samples/downloads/download/Samples/Java%20Web/HelloWebEE6.zip[+ the sample project+] and compare it with your own.

_I've built and run the project but no name appears, only "Hello, !"_

Does your <jsp:setProperty> tag contain a  ``value = ""``  attribute? This overwrites the value you passed in the  ``index.jsp``  form and replaces it with an empty string. Delete the  ``value``  attribute.

_I've built and run the project but get "Hello, null!"_

First, check the IDE's Output windows for both application and server, and the server log. Is the server running? Was the application deployed? If the server is running and the application was deployed, are you getting an  ``org.apache.jasper.JasperException: java.lang.NullPointerException?``  This usually means that a value in your code is not initialized correctly. In this tutorial, it means that you probably have a typo somewhere in a property name in your JSP files. Remember that property names are case-sensitive!

link:/about/contact_form.html?to=3&subject=Feedback:%20Introduction%20to%20Developing%20Web%20Applications[+Send Feedback on This Tutorial+]



== See Also

This concludes the Introduction to Developing Web Applications tutorial. This document demonstrated how to create a simple web application using NetBeans IDE, deploy it to a server, and view its presentation in a browser. It also showed how to use JavaServer Pages and JavaBeans in your application to collect, persist, and output user data.

For related and more advanced information about developing web applications in NetBeans IDE, see the following resources:

* link:quickstart-webapps-struts.html[+Introduction to the Struts Web Framework+]. Describes the basics of using NetBeans IDE to develop web applications using the Struts framework.
* link:../../trails/java-ee.html[+Java EE &amp; Java Web Learning Trail+]
