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

= Adding Support For A Web Framework
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Adding Support For A Web Framework - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Adding Support For A Web Framework

This document provides a general description of how to add support for a web framework in NetBeans IDE. The steps provided show how you can add support by installing a web framework plugin into the IDE using the Plugins manager. After you install the plugin you will be able to select the framework in the New Project wizard when you create a web project. The new web project that you create will contain the necessary infrastructure specific to the chosen framework.

The easiest way to add support for a particular web framework is by installing a NetBeans plugin using the IDE's Plugins manager if the plugin is available. This is convenient if you have Internet access while working in the IDE. Plugins for many web frameworks are also available via the link:http://plugins.netbeans.org/PluginPortal/[+NetBeans Plugin Portal+]. If you do not have regular Internet access, you can download the plugin modules (e.g., from the Plugin Portal) when you have the opportunity, then install them into the IDE at a later time.

In this tutorial you will add support for the Apache Struts 2 framework by downloading a plugin from the NetBeans Plugin Portal and installing the plugin using the Plugins manager.

*Note: *The IDE bundles support for the link:../../docs/web/jsf20-support.html[+JavaServer Faces 2.x+] and link:../../docs/web/quickstart-webapps-struts.html[+Struts 1.3.10+] and link:../../docs/web/quickstart-webapps-spring.html[+Spring 3.x and 4.x+] frameworks. The specific version of the bundled framework depends upon the version of the IDE.


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 complete this tutorial, you need the following software and resources.*

|===
|Software or Resource |Version Required 

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

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

*Notes:*

* The Web and Java EE installation enables you to optionally install the Apache Tomcat 7.x servlet container, and the GlassFish server 3.1. Depending on the framework you plan to use, you must install one of these to work through this tutorial.
* You must also have an Internet connection to download necessary plugins and/or access them via the IDE's Plugins Manager.


== Installing Framework Support Plugins

You can add support for a specific framework by installing the appropriate framework support plugin into the IDE. To do so, you can either download the plugin modules from an external site such as the link:http://plugins.netbeans.org/PluginPortal/[+NetBeans Plugin Portal+] then install the plugin via the Plugins Manager, or, if the plugin is maintained by an update center, you can register the update center with the IDE's Plugins Manager and then download and install the plugin directly through the Plugins Manager.

* <<manually,Downloading Manually>>
* <<updateCenter,Installing from an Update Center>>

Some plugins are available for download from sites such as the link:http://plugins.netbeans.org/PluginPortal/[+NetBeans Plugin Portal+] or directly from the site of the plugin developer. The following table provides links to locations where you can download some plugins for frameworks.

|===
|Framework |Plugin Location |Download Location 

|link:http://struts.apache.org/[+Apache Struts 2+] |link:http://java.net/projects/nbstruts2support/[+http://java.net/projects/nbstruts2support/+] |link:http://plugins.netbeans.org/plugin/39218/struts2-support-repack-for-nb-7-0[+ http://plugins.netbeans.org/plugin/39218/struts2-support-repack-for-nb-7-0+] 

|link:http://wicket.apache.org/[+Wicket+] |link:http://nbwicketsupport.dev.java.net/[+https://nbwicketsupport.dev.java.net+] |link:http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=3586[+ http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=3586+] 

|link:http://www.icefaces.org/main/home/[+ICEfaces 2.0+] |link:http://www.icefaces.org/main/home/[+http://www.icefaces.org/main/home/+] |link:http://www.icefaces.org/main/downloads/[+ http://www.icefaces.org/main/downloads/+] 
|===


=== Downloading and Installing the Apache Struts2 Support Plugin

For the purpose of demonstration, this section will describe how to download and install the link:http://plugins.netbeans.org/plugin/39218/struts2-support-repack-for-nb-7-0[+Apache Struts2 Support Repack for NB 7.0+] plugin from the NetBeans Plugin Portal. This plugin installs the libraries and UI support for Apache Struts 2.

*Note.* The plugin repackages the link:http://java.net/projects/nbstruts2support/[+NetBeans Struts2 Support plugin+] because the NetBeans Struts2 Support plugin has not been updated for NetBeans IDE 7.0. For additional information about each of the plugins, see the respective plugin details pages.

1. Download the zip archive that contains the required Apache Struts 2 plugins from the link:http://plugins.netbeans.org/plugin/39218/struts2-support-repack-for-nb-7-0[+ Struts2 Support Repack for NB 7.0 page+] on the link:http://plugins.netbeans.org/PluginPortal/[+NetBeans Plugin Portal+] and extract the contents to your computer.

When you extract the contents, you will see that the archive contains three files.

*  ``org-netbeans-modules-web-frameworks-struts2.nbm`` 
*  ``org-netbeans-modules-web-frameworks-struts2lib218.nbm`` 
*  ``org-netbeans-modules-web-frameworks-struts2lib20011.nbm`` 

NetBeans plugins can be identified by the  ``.nbm``  extension.



. From the IDE's main menu, choose Tools > Plugins to open the Plugin Manager.


. Select the Downloaded tab, then click the Add Plugins button.


. In the Add Plugins dialog, navigate to the directory that contains the plugins and select the NetBeans plugins. Click Open.

image::images/plugin-archive-contents.png[title="The zip archive contains the NetBeans plugins"]

Hold down the Ctrl key to select multiple items.



. In the Plugins manager, select each of the Struts2 plugins.

A description of the selected plugin is displayed in the right pane of the Plugins manager.

[.feature]
--

image::images/add-plugins-sm.png[role="left", link="images/add-plugins.png"]

--


. Click Install to open the NetBeans IDE Installer, then click Next and accept the license agreement.

*Note.* If you receive a validation warning, click Continue to install the plugin. A validation warning occurs if you attempt to install a plugin that has not been signed. While you can generally trust all plugins, when you install a plugin that has not been signed, you are doing so at your own risk.



. Restart the IDE to allow changes to take effect.

After you install the plugin and restart the IDE, you can confirm that the plugin was installed by opening the Plugins manager, clicking the Installed tab and locating the plugin in the list of installed plugins.


=== Installing from an Update Center

If the framework support plugin is maintained by an update center, you should consider installing the update center into the IDE. This enables you to then install the framework support plugin directly through the Plugins manager. The Plugins manager also logs any updates made to plugins maintained by update centers, providing you with a simple and effective means of keeping installed plugins up-to-date.

Various update centers are already registered with the IDE by default. To see a list of the update centers that are currently registered, open the Plugins manager (Tools > Plugins) and choose the Settings tab.

[.feature]
--

image::images/pluginsmanager-settings-sm.png[role="left", link="images/pluginsmanager-settings.png"]

--

If you want to register a new update center, click the Add button in the Settings tab and supply the details in the Update Center Customizer.

image::images/uc-customizer.png[title="Update Center Customizer dialog box"] 


=== Registering the NetBeans Plugin Portal Update Center

The Plugin Portal update center that is registered with the IDE by default contains a subset of the plugins that are contributed by the community and that are known to be compatible with the version of the IDE that you installed. If you want to use the Plugins manager to browse all the plugins that are available from the link:http://plugins.netbeans.org/[+NetBeans Plugin Portal+], you can perform the following steps to install a plugin to add the NetBeans Plugin Portal Update Center to the list of registered updated centers.

1. Download the link:http://plugins.netbeans.org/plugin/1616/plugin-portal-update-center[+NetBeans Plugin Portal Update Center plugin+].
2. Open the Downloaded tab in the Plugins manager.
3. Click Add Plugins and locate the  ``1252666924798_org-netbeans-pluginportaluc.nbm``  file that you downloaded. Click Install.

After you install the plugin, the NetBeans Plugin Portal Update Center is added to the list of registered update centers in the Settings tab of the Plugins manager

*Note.* You can deactivate an update center by deselecting the checkbox for the update center in the Active column of the Settings tab.

[.feature]
--

image::images/portal-uc-plugin-sm.png[role="left", link="images/portal-uc-plugin.png"]

--

If you click the Available Plugins tab you can see that all the plugins that have been contributed by the community to the NetBeans Plugin Portal have been added to the list of available plugins.

Click Reload Catalog to update the list of plugins.

[.feature]
--

image::images/portal-uc-list-sm.png[role="left", link="images/portal-uc-list.png"]

--

You can sort the list by clicking on a column heading and you can filter the list by entering terms in the Search field.

* The Plugin Portal Update Center lists all the plugins that are available from the link:http://plugins.netbeans.org/[+NetBeans Plugin Portal+]. Many of the plugins will be for older versions of the IDE and will be incompatible with the version of the IDE that you are using. Installing plugins for other versions of the IDE might cause your IDE installation to behave unreliably.* In many cases, but not all, there will be a message that informs you if a plugin cannot be installed. As with the installation of all software, you should exercise caution and carefully read the documentation before attempting to install a plugin.


== Working with Framework Support in the IDE

Framework support in the IDE is generally specific to the framework you are working with. For example, the Struts2 support provides wizards that enable you to easily create commonly-used Struts classes, as well as code completion in Struts configuration files.

You can add framework support to a web application either through the New Project wizard at the time that you create the application, or you can integrate support into an existing application.

* <<newProject,Creating a New Project with Framework Support>>
* <<existingProject,Adding Framework Support to an Existing Project>>


=== Creating a New Project with Framework Support

1. Choose File > New Project (Ctrl-Shift-N; ⌘-Shift-N on Mac) from the main menu. The New Project wizard opens. Select Web under Categories, then under Projects, select Web Application. Click Next.
2. Type a name for the Project Name and specify a location for the project on your computer.
3. Step through the wizard and accept any default settings. Specify a server to deploy the application to by choosing one that is already registered with the IDE (i.e., the GlassFish server or Tomcat).
4. In the Frameworks panel of the New Project wizard, choose the framework that you want to add. Click Finish. 

image::images/newproject-wizard-frameworks-sm.png[title="Struts 2 Support listed in Frameworks panel of the New Project wizard"]

In this example, support for the Struts2 framework is selected in the Frameworks panel. You can see that the Frameworks panel now offers the option to choose either Struts 1.3.8 (bundled with the IDE) or Struts2 (added by installing a plugin). The Struts 2 support plugin adds the Struts2 option to the New Projects wizard and displays tabs with options for Configuration and Libraries. The Configuration tab provides the option to create an example page in the project. The Libraries tab enables you to select the version of the Struts2 libraries that you want to add to the classpath.

When you click Finish, the IDE creates the web application. The additional files that the wizard creates will vary according to the framework. In this example, the wizard created the  ``struts.xml``  XML configuration file in the Source Packages folder and added the required Struts2 libraries to the classpath. The wizard also automatically added a Servlet filter class and a filter mapping to  ``web.xml`` .

image::images/project-structure-frameworks.png[title="Logical structure of Struts web application displayed in Projects window"]  


=== Adding Framework Support to an Existing Project

If you have an existing web project and you would like to add support for a framework to the project, you can use the Project Properties dialog box to add frameworks that are available in the IDE.

1. In the Projects window, right-click the web application project's node and choose Properties to open the Project Properties window.
2. Select Frameworks in the list of Categories.

When you select Frameworks, the right panel displays a Used Frameworks text area, which is empty if the application does not use a framework.



. Click the Add button, then select the framework you want to use and click OK. 

image::images/properties-add-framework.png[title="JavaServer Faces framework selected in the Add Framework dialog opened from the Project Properties window"]


. Depending on the chosen framework, you can specify further framework-specific configuration settings or components in the Project Properties window. 

image::images/add-icefaces.png[title="Adding a library for the ICEfaces component suite to the project"]

For example, if you want to specify the ICEfaces component suite you can select ICEfaces in the Components tab of the Project Properties window and specify the ICEfaces library.

*Notes.* The libraries for JSF components are not included with the IDE. To use a component suite you need to download the required libraries and then create a NetBeans library that you can then add to the project classpath in the Project Properties window.



. Click OK to confirm your selection and close the Project Properties window. The framework-specific artifacts and libraries are added to your project, which you can examine in the Projects window.
link:/about/contact_form.html?to=3&subject=Feedback:%20Adding%20Web%20Framework%20Support[+ Send Feedback on This Tutorial+]



== See Also

This document described how to add support for a web framework in NetBeans IDE. It demonstrated how to install framework support plugins by downloading manually as well as via an update center in the IDE's Plugin Manager. It also showed how to add an IDE-supported framework to both a new web application project and an existing project.

This tutorial focused on adding the Struts2 framework. If you would like to explore the other features offered by this framework, see link:../../docs/web/quickstart-webapps-struts.html[+Introduction to the Struts Web Framework+].

For more information about using other web frameworks in NetBeans IDE, see the following resources:

* link:../../docs/web/quickstart-webapps-spring.html[+Introduction to the Spring Web Framework+]
* link:../../docs/web/quickstart-webapps-struts.html[+Introduction to the Struts Web Framework+]
* link:../../docs/web/quickstart-webapps-wicket.html[+Introduction to the Wicket Web Framework+]
