src/main/javadoc/overview.html
author Jaroslav Tulach <jaroslav.tulach@netbeans.org>
Sat, 15 Mar 2014 16:48:38 +0100
changeset 616 5c2f2f7bd238
parent 615 b9d3832309ad
child 617 9ecac1653f55
permissions -rw-r--r--
Showing live demo of the minesweeper game.
     1 <!--
     2 
     3     DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     4 
     5     Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
     6 
     7     Oracle and Java are registered trademarks of Oracle and/or its affiliates.
     8     Other names may be trademarks of their respective owners.
     9 
    10     The contents of this file are subject to the terms of either the GNU
    11     General Public License Version 2 only ("GPL") or the Common
    12     Development and Distribution License("CDDL") (collectively, the
    13     "License"). You may not use this file except in compliance with the
    14     License. You can obtain a copy of the License at
    15     http://www.netbeans.org/cddl-gplv2.html
    16     or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
    17     specific language governing permissions and limitations under the
    18     License.  When distributing the software, include this License Header
    19     Notice in each file and include the License file at
    20     nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
    21     particular file as subject to the "Classpath" exception as provided
    22     by Oracle in the GPL Version 2 section of the License file that
    23     accompanied this code. If applicable, add the following below the
    24     License Header, with the fields enclosed by brackets [] replaced by
    25     your own identifying information:
    26     "Portions Copyrighted [year] [name of copyright owner]"
    27 
    28     Contributor(s):
    29 
    30     The Original Software is NetBeans. The Initial Developer of the Original
    31     Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
    32 
    33     If you wish your version of this file to be governed by only the CDDL
    34     or only the GPL Version 2, indicate your decision by adding
    35     "[Contributor] elects to include this software in this distribution
    36     under the [CDDL or GPL Version 2] license." If you do not indicate a
    37     single choice of license, a recipient has the option to distribute
    38     your version of this file under either the CDDL, the GPL Version 2 or
    39     to extend the choice of license to its licensees as provided above.
    40     However, if you add GPL Version 2 code and therefore, elected the GPL
    41     Version 2 license, then the option applies only if the new code is
    42     made subject to such option by the copyright holder.
    43 
    44 -->
    45 <!DOCTYPE html>
    46 <html>
    47     <head>
    48         <title>HTML for Java APIs</title>
    49         <meta charset="UTF-8">
    50         <meta name="viewport" content="width=device-width, initial-scale=1.0">
    51     </head>
    52     <body>
    53         <p>
    54          Use Java to write application logic; Use HTML5 to render the UI; 
    55          {@link net.java.html.json.Model Animate an HTML page from Java};
    56          Use {@link net.java.html.json.OnReceive REST} or
    57          <a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>;
    58          interact with <a href="net/java/html/js/package-summary.html">JavaScript</a>;
    59          Get the best of both worlds!
    60          
    61          The goal of these APIs is to use full featured Java runtime 
    62          (like real <a href="http://wiki.apidesign.org/wiki/HotSpot">HotSpot VM</a>), 
    63          but still rely on a very lightweight rendering technology 
    64          (so it can potentially fit 
    65          <a href="http://bck2brwsr.apidesign.org">Bck2Brwsr</a> and definitely
    66          to various types of phones). What can be more lightweight 
    67          (from a browser perspective) than 
    68          <a href="http://wiki.apidesign.org/wiki/HTML">HTML</a>!?
    69          By default we use {@link net.java.html.boot.fx JavaFX's WebView} 
    70          component to display the <a href="http://wiki.apidesign.org/wiki/HTML">HTML</a>. 
    71          We eliminate the need to manipulate the DOM directly, 
    72          there is a special {@link net.java.html.json Java to Knockout.js binding}. 
    73          As a result the <a href="http://wiki.apidesign.org/wiki/Knockout4Java">HTML uses Knockout.js syntax</a>, 
    74          yet the application code can be written in Java.
    75         </p>
    76         
    77         <h3>Interesting Entry Points</h3>
    78         
    79         <p>Learn how to {@link net.java.html.json.Model animate an HTML page from Java}
    80             without referencing single HTML element from the Java code.
    81         </p>
    82         <p>Use {@link net.java.html.json.OnReceive JSON} to communicate
    83             with REST based server API.
    84         </p>
    85         <p>Use <a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>
    86             and JSON.
    87         </p>
    88         <p>Call JavaScript methods from Java and vice versa, via
    89             <a href="net/java/html/js/package-summary.html">JavaScriptBody</a>.
    90         </p>
    91 
    92         <h3>Getting Started</h3>
    93 
    94         There are many ways to start developing 
    95         <a href="http://html.java.net">Html for Java</a> application. 
    96         However to be sure one chooses the most recent setup, it is recommended
    97         to switch to good old command line and use a 
    98         <a href="http://wiki.apidesign.org/wiki/Knockout4Java">Maven archetype</a>
    99         associated with every version of this project. Make sure at least 
   100         <em>JDK7</em> is your installed Java and type:
   101         <pre>      
   102 $ mvn archetype:generate \
   103  -DarchetypeGroupId=org.apidesign.html \
   104  -DarchetypeArtifactId=knockout4j-archetype \
   105  -DarchetypeVersion=0.7.5 <em># or newer version, if available</em>
   106         </pre>
   107         Answer few questions (for example choose myfirstbrwsrpage as artifactId) 
   108         and then you can:
   109         <pre>
   110 $ cd myfirstbrwsrpage
   111 $ mvn process-classes exec:java
   112         </pre>
   113         In a few seconds (or minutes if 
   114         <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a>
   115         decides to download the whole Internet of dependencies) you should 
   116         see a sample Hello World application rendered in a 
   117         <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
   118         web view component (that of course requires your JDK to come
   119         with <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>; 
   120         <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK7 
   121             and JDK8 from Oracle</a> contain everything that is needed). 
   122         The generated application is built around one 
   123         Java source (uses the {@link net.java.html.json.Model} annotation to
   124         auto-generate another <code>Data.java</code> class during compilation)
   125         and one HTML file (uses the <a href="http://knockoutjs.com">Knockout</a>
   126         syntax to <code>data-bind</code> the HTML elements to the 
   127         generated <code>Data</code> model):
   128         <pre>
   129 $ ls src/main/java/**/DataModel.java
   130 $ ls src/main/webapp/pages/index.html
   131         </pre>
   132         That is all you need to get started. Play with the sources, 
   133         modify them and enjoy
   134         <a href="http://html.java.net">Html for Java</a>!
   135         
   136         <h2>IDE Support</h2>
   137         
   138         <p>
   139             This API is part of <a target="_blank"
   140             href="http://netbeans.org">NetBeans.org</a> project and as such
   141             it works naturally with the <a target="_blank"
   142             href="https://netbeans.org/features/index.html">NetBeans IDE</a>.
   143             On the other hand, the API is using nothing NetBeans specific,
   144             it builds on standard Java6 APIs and as such it shall work fine
   145             in any IDE.
   146         </p>
   147         
   148         <p>
   149             A lot of work is done by 
   150             <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">
   151             annotation processors</a>
   152             that generate various boiler plate code during compilation. This
   153             is a standard part of Java since JDK6, but for example Eclipse
   154             is known not to deal with processors well and developers using
   155             it need to be careful. IntelliJ users hasn't reported any issues
   156             and of course, NetBeans IDE support for 
   157             <a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">processors</a>
   158             is outstanding.
   159         </p>
   160         
   161         <p>
   162             When using {@link net.java.html.js.JavaScriptBody} annotation, it is
   163             useful to do a bit of post processing of classes. There is a
   164             <a href="http://wiki.apidesign.org/wiki/Maven">Maven</a> 
   165             plugin for that.
   166             NetBeans IDE will invoke it when doing a build. Other IDEs may 
   167             need some hint to do so. 
   168             Anyway: If one does not see all (generated) sources or is getting
   169             {@link java.lang.LinkageError}s when executing the application, 
   170             switch to command line and do clean build
   171             from there:
   172         </p>
   173         <pre>$ mvn clean install</pre>
   174         <p>
   175             If that succeeds, your IDE of choice will hopefully
   176             pick the generated sources up and present the result of the build 
   177             properly. If not, 
   178             <a href="https://netbeans.org/downloads/">download NetBeans</a>, 
   179             you will be pleasantly 
   180             surprised - for example with our excellent 
   181             <a href="net/java/html/js/package-summary.html#debugging">Java/JavaScript 
   182             debugging</a> support.
   183         </p>
   184         
   185         <a name="deploy">
   186         <h2>Deploy Your Application</h2>
   187         </a>
   188         
   189         <p>
   190         It is not goal of this documentation to list all possible ways
   191         to package and deploy applications which use this API. However it is 
   192         important for new comers to see the benefits of using the
   193         <a href="http://html.java.net">HTML for Java</a> API and as such
   194         let's list at least few bundling options, known to work at the time of writing 
   195         this documentation.
   196         </p>
   197         
   198         <p>
   199         First of all, this is a <em>client technology</em>. You write client applications
   200         with it which may, but need not connect to a server. You don't need
   201         Tomcat or WebLogic to deploy 
   202         <a href="http://html.java.net">HTML for Java</a> applications.
   203         </p>
   204         
   205         <p>
   206             <img src='resources/javafx_logo.jpg' width="64"
   207                  height="64" align="left"/>
   208             The sample project generated by
   209             <code>org.apidesign.html knockout4j-archetype</code> is configured
   210             to use <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
   211             as the rendering technology. This setup is primarily suitable for 
   212             development - it needs no special packaging, starts quickly and
   213             allows you to use classical HotSpot VM debuggers. A final 
   214             artifact from the build is also a ZIP file which you can use
   215             and distribute to your users. Good for desktop applications.
   216         </p>
   217         
   218         <p>
   219             <img src='resources/netbeans_logo.jpg' width="64"
   220                  height="64" align="right"/>
   221             <img src='resources/eclipse_logo.png' width="64"
   222                  height="64" align="right"/>
   223             All the <a href="http://html.java.net">HTML for Java</a> libraries
   224             are package as <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
   225             bundles and as such they can easily be run in NetBeans as well as
   226             in Eclipse. As a result one can use 
   227             <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
   228             and have a common module system for both platforms and render using
   229             HTML and have a common UI in both platforms. In such case
   230             your application would be packaged as a set of
   231             <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a> bundles.
   232             Read 
   233             <a href="http://wiki.apidesign.org/wiki/HTML">more</a>...
   234         </p>
   235         
   236         <p>
   237             <img src='resources/chrome_logo.png' width="64"
   238                  height="64" align="left"/>
   239             <img src='resources/safari_logo.png' width="64"
   240                  height="64" align="left"/>
   241             <img src='resources/ie_logo.png' width="64"
   242                  height="64" align="left"/>
   243             <img src='resources/firefox_logo.png' width="64"
   244                  height="64" align="left"/>
   245             
   246             There is more and more attempts to execute Java bytecode
   247             in any browser, without any special Java plugin installed.
   248             The <a href="http://html.java.net">HTML for Java</a> is
   249             carefully designed to produce lightweight, well performing
   250             applications even on such restricted environments. It uses
   251             no reflection calls and that allows to statically pre-compile
   252             the applications into JavaScript. One of such environments
   253             is called <em>Bck2Brwsr</em>, another <em>TeaVM</em>. Both support the
   254             {@link net.java.html.js.JavaScriptBody} annotation. Read 
   255             <a href="http://wiki.apidesign.org/wiki/Bck2BrwsrViaCLI">more</a> or play
   256             a minesweeper game packaged for your browser 
   257             (of course <a target="_blank"
   258                 href="http://source.apidesign.org/hg/html~demo/file/ea79b73d590a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java">
   259                 written</a> in Java):
   260         </p>
   261         
   262         <script type="text/html" id="field">
   263             <table class="field">
   264                 <tbody>
   265                     <!-- ko foreach: rows -->
   266                     <tr>
   267                         <!-- ko foreach: columns -->
   268                         <td data-bind="css: style, click: $parents[1].click" >
   269                             <div data-bind='html: html'></div>
   270                         </td>
   271                         <!-- /ko -->
   272                     </tr>
   273                     <!-- /ko -->
   274                 </tbody>
   275             </table>
   276         </script>
   277 
   278         <div data-bind="template: { name : 'field', if: fieldShowing }"></div>
   279 
   280         <!-- boot bck2brwsr -->
   281         <script type="text/javascript" src="resources/teavm.js"></script>
   282         <script>
   283             var vm = new VM();
   284             vm.loadClass('org.apidesign.demo.minesweeper.MainBrwsr');
   285         </script>
   286 
   287         <p>
   288             <img src='resources/android_logo.jpg' width="64"
   289                  height="64" align="right"/>
   290             
   291             Now when we have seen that the 
   292             <a href="http://html.java.net">HTML for Java</a> applications 
   293             can run on any modern browser, we can ask whether they can also
   294             fit into a phone!? Yes, they can and especially to phones 
   295             that can execute Java code already! Just by changing your
   296             packaging you can create an APK file and deploy it to your
   297             Android phone. 
   298             Read <a href="http://wiki.apidesign.org/wiki/DlvkBrwsr">more</a>...
   299         </p>
   300         <p>
   301             Convinced it makes sense to use 
   302             <a href="http://html.java.net">HTML for Java</a>
   303             APIs for writing applications that are 
   304             <em>written once, displayed anywhere</em>? Or do you have an
   305             environment which is not supported? In such case you can bring
   306             <a href="http://html.java.net">HTML for Java</a>
   307             to your environment yourself. Just implement your own
   308             {@link org.apidesign.html.boot.spi.Fn.Presenter}!
   309         </p>
   310         
   311         <h2>Other Resources</h2>
   312         
   313         <img src="net/java/html/json/doc-files/DukeHTML.png" width="256" height="184" alt="Duke and HTML5. Together at last!" align="right"/>
   314         
   315         The javadoc for latest and previous versions is also available
   316         online:
   317         <ul>
   318             <li>Current <a target="_blank" href="http://bits.netbeans.org/html+java/dev/">development</a> version
   319             <li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.7.5">0.7.5</a>
   320         </ul>
   321         
   322 <style type="text/css">
   323 table.field td {
   324     padding: 4px;
   325     width: 18px;
   326     height: 18px;
   327     font-size: 1.5em;
   328     border: 1px solid black;
   329 }
   330 table.field td.UNKNOWN {
   331     background-color: #D6E4E1;
   332     cursor: pointer;
   333 }
   334 table.field td.EXPLOSION {
   335     background-color: #A31E39;
   336 }
   337 table.field td.DISCOVERED {
   338     background-color: #9DB2B1;
   339 }
   340 </style>        
   341     </body>
   342 </html>