blob: 39f3926b93262ac898458871c484edaec425d40d [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8">
<TITLE>Developing Mobile Websites with NetBeans IDE and Netbiscuits</TITLE>
<META NAME="AUTHOR" CONTENT="Martin Schreiner, Lars Hartkopf, Netbiscuits GmbH">
<link rel="stylesheet" href="../../netbeans.css" type="text/css">
</HEAD>
<BODY>
<H1>Developing Mobile Websites with NetBeans IDE and Netbiscuits</H1>
<p><em>by Martin Schreiner, Mobile Application Developer, Netbiscuits</em></p>
<!--<div style="float:right"><p><a href="http://www.netbiscuits.com/c/document_library/get_file?folderId=17218&name=DLFE-4201.pdf">Download article (PDF)</a></p></div>-->
<H2>Requirements</H2>
<OL>
<LI><P><A HREF="https://netbeans.org/downloads/index.html">NetBeans IDE for Java</A></P>
<LI><P>Local application server, externally accessible</P>
<LI><P><A HREF="http://www.netbiscuits.com/freetrial">Netbiscuits account</A></P>
</OL>
<H2>The Mobile Internet</H2>
<P>
The mobile Internet is one of the most important growth markets of
the future. For developers, however, the medium does have its
pitfalls. In contrast to the &quot;PC Web&quot;, they are faced with a
virtually incalculable number of hardware and software platforms in
the mobile channel. This fragmentation might encourage some to limit
their projects to specific platforms and end devices. The all too
frequent result is an application developed with great expense, which
can only be displayed optimally on a very limited number of devices.</P>
<P>
In order to develop <I>one</I> application for <I>all</I>
end devices, a new technology platform is required that automatically
adapts the mobile websites and content to the specific form factors
and software environments of the various mobile devices and as many
of the world’s mobile phones as possible. The following article
describes the development of a mobile website with the aid of
NetBeans and Netbiscuits, a software platform that enables the
development and delivery of mobile websites for virtually all end
devices worldwide.</P>
<H2>Developing Mobile Websites</H2>
<P>
Basically, there is no fundamental difference between the development
of a mobile portal and a standard web application. In the simplest
form, an XHTML page is created with a very modest design, which looks
good, above all, on low resolution devices. However, this would
exclude older devices that can only interpret WML based on the WAP
protocol instead of XHTML. Other problems, such as the lack of
support for certain graphics formats on some devices, are also not
taken into account. Consequently, manual optimization for a broad set
of mobile devices quickly becomes very expensive and, in the
best-case scenario, requires a database with information on all
devices that are supported.</P>
<P>
When creating a mobile website using BiscuitML and delivering it via
the Netbiscuits platform, the latter makes adjustments for virtually
all available end devices. This means the developer can create a page
using an XML-compliant markup language, without having to worry about
the supported output or graphics formats. The device database
underlying the Netbiscuits platform contains all the essential
information on more than 6,000 end devices worldwide.</P>
<P>
Although newer devices no longer have any limitations when it comes
to XHTML support or various graphics formats, it still makes sense to
include device-specific differences on the portal pages that are
created. For instance, when using Rich Internet Features (RIF) or
incorporating multimedia content (e.g. video streaming vs. video
download).</P>
<P>
The development of a mobile portal is illustrated
below using a practical example. For this purpose, a popular <I>Java
web project</I> will be created in NetBeans
first of all. JSP pages will be created later on for the content,
which will deliver BiscuitML. One of the web servers integrated into
NetBeans can be used for this purpose without the need for any
special configuration. The individual steps are described in detail
in the following sections.</P>
<P class="valign-middle, align-center"><IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_m28baf924.png" alt="New Web Application Project dialog" ALIGN=BOTTOM BORDER=0><br><em>Creating a familiar web application</em></P>
<P class="valign-middle, align-center"><IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_m7cfb0c3b.png" alt="Server and Settings dialog" ALIGN=BOTTOM BORDER=0><br><em>Select
the desired server as well as the content path</em></P>
<H2>Developing a JSPX Portal Page</H2>
<P>
In order to construct a new portal page (here: <tt>category_1.jspx</tt>),
a JSP file must first be created in the Web Pages folder. We will use
the XML model (JSPX) for our example, the standard model would also
work though. It is important, however, to use <tt>text/xml</tt> as the content
type and <tt>UTF-8</tt> encoding in order to ensure international
compatibility. Furthermore, the file in the <tt>web.xml</tt>
must be set as a welcome file, so that it will be shown as the first
page when accessing the portal later on.</P>
<p>
<pre>&lt;welcome-file-list&gt;
&lt;welcome-file&gt;category_1.jspx&lt;/welcome-file&gt;
&lt;/welcome-file-list&gt;</pre><br><em>Listing: extract from the web.xml file</em></P>
<p><br></p>
<P class="valign-middle, align-center">
<IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_23cd3501.png" NAME="Grafik 12" ALIGN=BOTTOM BORDER=0><br>Project structure after creating the first page
</P>
<P>
The following code shows a blank page template with a simple
container structure:</P>
<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;jsp:root xmlns:jsp=&quot;http://java.sun.com/JSP/Page&quot; version=&quot;2.0&quot;&gt;
&lt;jsp:directive.page contentType=&quot;text/xml&quot; pageEncoding=&quot;UTF-8&quot;/&gt;
&lt;page title=&quot;My Mobile Portal&quot; paging=&quot;true&quot;&gt;
&lt;container&gt;
&lt;column&gt;
&lt;!-- content biscuits --&gt;
&lt;/column&gt;
&lt;/container&gt;
&lt;/page&gt;
&lt;/jsp:root&gt;</pre>
<P><em>Listing: category_1.jspx</em></P>
<P>
Typically, a page contains a header, content and a
footer. In most cases, navigation elements are located in the header
or footer area so that the desired content can be called up. Texts,
images, rich media content, such as video or maps,
as well as tables or forms can be displayed and linked to in the
content area.
</P>
<P><A NAME="OLE_LINK1"></A>
Netbiscuits provides special &quot;biscuits&quot; for all common content
and functional elements of a website. Each biscuit has a special
number of degradation levels, which ensure the content of each
individual biscuit can be optimally adapted to virtually any end
device. This ensures that the one and the same mobile website will be
displayed optimally on both the latest iPhone as well as on the
oldest Motorola Razr.</P>
<P class="valign-middle, align-center"><IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_154ecbb9.jpg" alt="screen content of mobile devices" ALIGN=BOTTOM BORDER=0><br><em>Degradation of a mobile website across several end devices</em></P>
<P>
The distribution of content across several pages is something else
that the developer does not need to worry about. If the requesting
end device encounters any limitations with regard to the maximum data
volume that can be displayed, the Netbiscuits platform automatically
inserts a navigation element for paging and distributes the content
across several sub-pages.</P>
<H2>Code Templates for Content Biscuits</H2>
<P>
The <em>Code Template</em>
functionality of NetBeans is recommended in order to ensure the
desired content can be created quickly and easily. Several templates
can be applied via the Code Templates tab under <I>Tools
-&gt; Options -&gt; Editor.</I> These can
be inserted into the page later on using a key combination. If you
create your own template for the common biscuits, this will not only
reduce the amount of writing considerably when creating the JSP
pages, the risk of errors will also be limited because the most
important attributes will already have been created in the nodes with
the correct names, and all you will need to do is assign values.</P>
<P class="valign-middle, align-center">
<IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_m5a3411d5.png" alt="new code template dialog" ALIGN=BOTTOM BORDER=0><br><em>Creating
a new template</em></P>
<P>
To create such templates, select JSP as the
programming language in the above-mentioned window, then create an
empty template using the New button (a prefix, such as &quot;nb&quot;,
could be used in order to ensure consistent naming of the biscuit
templates : nbtext, nbarticle...). All you need to do now is insert
and save the code of the desired biscuit as &quot;expanded text&quot;.
The BiscuitML reference (<A HREF="http://www.netbiscuits.com/biscuitmlreference">http://www.netbiscuits.com/biscuitmlreference</A>)
provides information on how to complete this. Each individual
developer can decide whether the content and attributes of the
biscuit will remain empty or if default values will be allocated to
them.
</P>
<P>
The templates that have been created will be available after
restarting NetBeans.</P>
<p class="valign-middle, align-center"><IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_3e109465.png" alt="Option &gt; Editor &gt; Code Templates window" ALIGN=BOTTOM BORDER=0><br><em>Creating template text</em></P>
<P>
The example illustrated in this article should contain a home page
with a header and footer as well as a few teasers as content. The
latter will be linked to article pages later on in order to
illustrate the navigation between pages. A few teasers will be
inserted into the page first of all via the code template; this is
completed by entering the predefined abbreviation for the teaser
template and pressing the tab key. All you need to do now is enter
the actual values and attributes; the page will then contain its
initial content.
</P>
<P class="valign-middle, align-center">
<a href="../../images_www/articles/netbiscuits/Netbiscuits_html_574223ea.png"><IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_574223ea.png" alt="netbeans editor window" ALIGN=BOTTOM BORDER=0></a><br><em>The first portal page (click to enlarge)</em></P>
<H2>Storing Reusable Code Segments</H2>
<P>
If parts of the code are to be used equally on several pages, these
segments should be placed in separate files and incorporated using
the Include command for reasons of structuring and maintainability.
As a result of this, subsequent alterations to the design or changes
to the text or links need only be made once, they will however affect
the entire portal.</P>
<P>
To that end, the '<tt>/includes</tt>' subfolder will be created in
Web Pages. In our example, we will create a file with the name of
<tt>footer.jspx</tt> in this folder, which
contains the following code:</P>
<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;jsp:root xmlns:jsp=&quot;http://java.sun.com/JSP/Page&quot; version=&quot;2.0&quot;&gt;
&lt;!-- Use items below as footer on all pages --&gt;
&lt;PAGEBEGINFOOTER /&gt;
&lt;!-- Footer menu --&gt;
&lt;PIPEDMENU&gt;
&lt;items&gt;
&lt;item&gt;
&lt;link href=&quot;category_1.jspx&quot;&gt;Home&lt;/link&gt;
&lt;/item&gt;
&lt;item&gt;
&lt;link href=&quot;imprint.jspx&quot;&gt;Imprint&lt;/link&gt;
&lt;/item&gt;
&lt;item&gt;
&lt;link href=&quot;contact.jspx&quot;&gt;Contact&lt;/link&gt;
&lt;/item&gt;
&lt;/items&gt;
&lt;/PIPEDMENU&gt;
&lt;!-- Copyright part --&gt;
&lt;PAGEFOOTER&gt;
&lt;item position=&quot;3&quot;&gt;
&lt;text&gt;&amp;#169;Netbiscuits, 2009.&lt;/text&gt;
&lt;/item&gt;
&lt;/PAGEFOOTER&gt;
&lt;/jsp:root&gt;</pre>
<P><em>Listing: footer.jspx</em></P>
<P>
This code generates two biscuits, which should be
displayed as the footer below the page’s current content (a small
menu and the portal’s copyright reference in our example).
Furthermore, the <tt>&lt;PAGEBEGINFOOTER&gt;</tt> tag will be used to ensure
that all subsequent biscuits will be placed as footers below the
separated content for all paginated pages. That way, every partial
page will have the same footer, not only the last one.</P>
<P>
After that, an Include command must be placed in the <tt>home.jspx,</tt>
below the previously created teasers, in order to ensure the footer’s
content is also inserted on the page:
<pre>&lt;jsp:include page=&quot;includes/footer.jspx&quot; /&gt;</pre>
</P>
<P>
The same steps must then be repeated for the header, the first page
will then be complete.
</P>
<H2>Design and Layout</H2>
<P>
The page’s design is defined via style attributes that are based on
cascading style sheets (CSS). They can be assigned to both complete
pages as well as individual biscuits. Depending on the specific
biscuit in use, additional attributes are also available that enhance
the standard style set (e.g. active color with tabbed menus or
bgcolor2/bgcolor3 for alternating background colors with lists).
</P>
<pre>&lt;styles&gt;
&lt;style name=&quot;padding-top&quot; value=&quot;10px&quot; /&gt;
&lt;style name=&quot;padding-bottom&quot; value=&quot;10px&quot; /&gt;
&lt;style name=&quot;margin-bottom&quot; value=&quot;10px&quot; /&gt;
&lt;style name=&quot;color&quot; value=&quot;#0000FF&quot; /&gt;
&lt;style name=&quot;link-color&quot; value=&quot;#0000FF&quot; /&gt;
&lt;style name=&quot;text-align&quot; value=&quot;center&quot; /&gt;
&lt;style name=&quot;active-color&quot; value=&quot;#FFFFFF&quot; /&gt;
&lt;style name=&quot;active-bgcolor&quot; value=&quot;#C71722&quot; /&gt;
&lt;style name=&quot;active-border&quot; value=&quot;#C71722&quot; /&gt;
&lt;style name=&quot;inactive-color&quot; value=&quot;#FFFFFF&quot; /&gt;
&lt;style name=&quot;inactive-bgcolor&quot; value=&quot;#CCCCCC&quot; /&gt;
&lt;style name=&quot;inactive-border&quot; value=&quot;#C71722&quot; /&gt;
&lt;/styles&gt;</pre>
<p><em>Listing: Menu styles</em></p>
<P>
The code example above shows the design of the header menu. This is
illustrated in the following image:</P>
<P class="valign-middle, align-center">
<IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_m501ba3fc.png" alt="styled text boxes" ALIGN=BOTTOM BORDER=0><br><em>The styled header menu</em></P>
<P>
With regard to page styles, it can be useful &mdash; as with some code
parties as well &mdash; to place them elsewhere and incorporate them
using the Include command. That way, the basic design of the page can
be adjusted once without having to change each individual page.
</P>
<H2>The Finished Web Project</H2>
<P>
After a few more overview and article pages have been added to the
project, the sample portal is complete. The markup has been prepared
and we can take a look at the first edition.
</P>
<P class="valign-middle, align-center">
<IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_m35b1b846.png" alt="Project structure in netbeans window" ALIGN=BOTTOM BORDER=0><br><em>Page structure of the finished example portal</em></P>
<P>
The application can be deployed on an application
server integrated into NetBeans, regardless of whether it is Apache
Tomcat or the GlassFish server. This means no additional server needs to be
installed and configured. The external accessibility of the server is
the only prerequisite. If this is not possible (e.g. for security
reasons), the project has to be set up on a system, which is
accessible from the Netbiscuits platform via http.</P>
<P>
When the local application server
is used the project can be launched easily using the Run command and
the corresponding URL is called up in the browser.
</P>
<p class="valign-middle, align-center"><a href="../../images_www/articles/netbiscuits/Netbiscuits_html_564d71b6.png"><IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_564d71b6.png" alt="web browser window" ALIGN=BOTTOM BORDER=0></a><br><em>BiscuitML in the browser (click to enlarge)</em></p>
<H2>Delivery Via a Netbiscuits Custom Application</H2>
<P>
A Netbiscuits custom application is required to
transform the BiscuitML code into the final XHTML or WML for the
mobile devices. To complete this, register and log in at
<A HREF="http://www.netbiscuits.com/">www.netbiscuits.com</A>
and navigate to <I>My Netbiscuits -&gt; My
Applications</I>. A new custom application
can now be created via the &quot;Create&quot; tab. Initially, only the
name, programming language and backend address need to be entered. If
the backend is password protected, the required access data can be
stored under &quot;Extended Backend Parameters&quot;.
</P>
<P class="valign-middle, align-center">
<a href="../../images_www/articles/netbiscuits/Netbiscuits_html_1e99604e.png"><IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_1e99604e.png" alt="My Netbiscuits home page" ALIGN=BOTTOM BORDER=0></a><br><em>Creating a Netbiscuits custom application (Click to enlarge)</em></P>
<P>
During the development phase, the local server can be entered as the
backend with the externally accessible IP address. After saving the
custom application, the page is immediately accessible via a default
URL. As soon as the application has been set up on the productive
server, one or more friendly URLs can also be added when creating the
Netbiscuits application. Such URLs can then be used to deliver the
application, if the desired URL is registered and points towards
Netbiscuits.</P>
<P>
If everything has been configured and implemented correctly, the
mobile portal page will be retrieved and, depending on the respective
end device, may look like this:</P>
<TABLE WIDTH=631 border=0 CELLPADDING=7 CELLSPACING=0 valgin="center" align="center">
<TR VALIGN=TOP>
<TD WIDTH="32%">
<P ALIGN=CENTER>
<IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_43020165.png" NAME="Grafik 20" ALIGN=BOTTOM BORDER=0></P>
<P ALIGN=CENTER>Version Apple iPhone</P>
</TD>
<TD WIDTH="32%">
<P ALIGN=CENTER>
<IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_m3e0ab7d6.png" NAME="Grafik 19" ALIGN=BOTTOM BORDER=0></P>
<P ALIGN=CENTER>Version Nokia N70</P>
</TD>
<TD WIDTH="32%">
<P ALIGN=CENTER>
<IMG SRC="../../images_www/articles/netbiscuits/Netbiscuits_html_mf6909df.png" NAME="Grafik 18" ALIGN=BOTTOM BORDER=0></P>
<P ALIGN=CENTER>Version Samsung D600</P>
</TD>
</TR>
</TABLE>
<H2>Conclusion</H2>
<P>
The combination of NetBeans and Netbiscuits allows mobile Internet
applications to be realized easily and efficiently and delivered
optimally to more than 6,000 different end devices worldwide. In
doing so, developers can fall back on their experience in the area of
web applications and XML, without having to worry about the
restrictions posed by different devices. Even testing on various
devices is just a pro-forma issue.</P>
<P>
At <A HREF="http://www.netbiscuits.com/">www.netbiscuits.com</A>
you can register for a free 30-day trial account. The account will
provide you with access to all of the platform’s functionalities.
After that, those who do not wish to invest in one of Netbiscuits’
three premium accounts can use the free &quot;developer account&quot;,
which offers access to all of the technology platform’s basic
functions and includes the delivery of 1,000 mobile page visits per
month.</P>
<P>
Additional articles on designing sophisticated mobile web services
with NetBeans and Netbiscuits explain how to prepare content for a
mobile portal using Struts, enhance the portal for various languages,
implement interfaces to external applications such as content
management systems, ad servers or web tracking tools, and develop
applications for the latest generation of smartphones using
Netbiscuits.</P>
<H2>Related Links</H2>
<OL>
<LI><P><A HREF="http://www.netbiscuits.com/freetrial">Netbiscuits 30 day trial access</A></P>
<LI><P><A HREF="http://www.netbiscuits.com/biscuitmlreference">Netbiscuits BiscuitML Reference</A></P>
<LI><P><A HREF="http://www.netbiscuits.com/downloads">Netbiscuits download area with additional code examples and tutorials</A></P>
</OL>
</BODY>
</HTML>