jaroslav@550
|
1 |
<!--
|
jaroslav@550
|
2 |
|
jaroslav@550
|
3 |
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
|
jaroslav@550
|
4 |
|
jaroslav@551
|
5 |
Copyright 2013-2014 Oracle and/or its affiliates. All rights reserved.
|
jaroslav@550
|
6 |
|
jaroslav@550
|
7 |
Oracle and Java are registered trademarks of Oracle and/or its affiliates.
|
jaroslav@550
|
8 |
Other names may be trademarks of their respective owners.
|
jaroslav@550
|
9 |
|
jaroslav@550
|
10 |
The contents of this file are subject to the terms of either the GNU
|
jaroslav@550
|
11 |
General Public License Version 2 only ("GPL") or the Common
|
jaroslav@550
|
12 |
Development and Distribution License("CDDL") (collectively, the
|
jaroslav@550
|
13 |
"License"). You may not use this file except in compliance with the
|
jaroslav@550
|
14 |
License. You can obtain a copy of the License at
|
jaroslav@550
|
15 |
http://www.netbeans.org/cddl-gplv2.html
|
jaroslav@550
|
16 |
or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
|
jaroslav@550
|
17 |
specific language governing permissions and limitations under the
|
jaroslav@550
|
18 |
License. When distributing the software, include this License Header
|
jaroslav@550
|
19 |
Notice in each file and include the License file at
|
jaroslav@550
|
20 |
nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
|
jaroslav@550
|
21 |
particular file as subject to the "Classpath" exception as provided
|
jaroslav@550
|
22 |
by Oracle in the GPL Version 2 section of the License file that
|
jaroslav@550
|
23 |
accompanied this code. If applicable, add the following below the
|
jaroslav@550
|
24 |
License Header, with the fields enclosed by brackets [] replaced by
|
jaroslav@550
|
25 |
your own identifying information:
|
jaroslav@550
|
26 |
"Portions Copyrighted [year] [name of copyright owner]"
|
jaroslav@550
|
27 |
|
jaroslav@550
|
28 |
Contributor(s):
|
jaroslav@550
|
29 |
|
jaroslav@550
|
30 |
The Original Software is NetBeans. The Initial Developer of the Original
|
jaroslav@551
|
31 |
Software is Oracle. Portions Copyright 2013-2014 Oracle. All Rights Reserved.
|
jaroslav@550
|
32 |
|
jaroslav@550
|
33 |
If you wish your version of this file to be governed by only the CDDL
|
jaroslav@550
|
34 |
or only the GPL Version 2, indicate your decision by adding
|
jaroslav@550
|
35 |
"[Contributor] elects to include this software in this distribution
|
jaroslav@550
|
36 |
under the [CDDL or GPL Version 2] license." If you do not indicate a
|
jaroslav@550
|
37 |
single choice of license, a recipient has the option to distribute
|
jaroslav@550
|
38 |
your version of this file under either the CDDL, the GPL Version 2 or
|
jaroslav@550
|
39 |
to extend the choice of license to its licensees as provided above.
|
jaroslav@550
|
40 |
However, if you add GPL Version 2 code and therefore, elected the GPL
|
jaroslav@550
|
41 |
Version 2 license, then the option applies only if the new code is
|
jaroslav@550
|
42 |
made subject to such option by the copyright holder.
|
jaroslav@550
|
43 |
|
jaroslav@550
|
44 |
-->
|
jaroslav@541
|
45 |
<!DOCTYPE html>
|
jaroslav@541
|
46 |
<html>
|
jaroslav@541
|
47 |
<head>
|
jaroslav@541
|
48 |
<title>HTML for Java APIs</title>
|
jaroslav@541
|
49 |
<meta charset="UTF-8">
|
jaroslav@541
|
50 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
jaroslav@541
|
51 |
</head>
|
jaroslav@541
|
52 |
<body>
|
jaroslav@541
|
53 |
<p>
|
jaroslav@543
|
54 |
Use Java to write application logic; Use HTML5 to render the UI;
|
jaroslav@630
|
55 |
{@link net.java.html.json.Model Animate an HTML page from Java}
|
jtulach@668
|
56 |
(see <a target="_blank" href="http://dew.apidesign.org/dew/#7212206">Duke being rotated</a> by CSS);
|
jaroslav@543
|
57 |
Use {@link net.java.html.json.OnReceive REST} or
|
jaroslav@543
|
58 |
<a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>;
|
jaroslav@543
|
59 |
interact with <a href="net/java/html/js/package-summary.html">JavaScript</a>;
|
jaroslav@543
|
60 |
Get the best of both worlds!
|
jaroslav@543
|
61 |
|
jaroslav@541
|
62 |
The goal of these APIs is to use full featured Java runtime
|
jaroslav@568
|
63 |
(like real <a href="http://wiki.apidesign.org/wiki/HotSpot">HotSpot VM</a>),
|
jaroslav@541
|
64 |
but still rely on a very lightweight rendering technology
|
jaroslav@541
|
65 |
(so it can potentially fit
|
jaroslav@541
|
66 |
<a href="http://bck2brwsr.apidesign.org">Bck2Brwsr</a> and definitely
|
jaroslav@541
|
67 |
to various types of phones). What can be more lightweight
|
jaroslav@541
|
68 |
(from a browser perspective) than
|
jaroslav@541
|
69 |
<a href="http://wiki.apidesign.org/wiki/HTML">HTML</a>!?
|
jaroslav@541
|
70 |
By default we use {@link net.java.html.boot.fx JavaFX's WebView}
|
jaroslav@541
|
71 |
component to display the <a href="http://wiki.apidesign.org/wiki/HTML">HTML</a>.
|
jaroslav@541
|
72 |
We eliminate the need to manipulate the DOM directly,
|
jaroslav@541
|
73 |
there is a special {@link net.java.html.json Java to Knockout.js binding}.
|
jaroslav@617
|
74 |
As a result the <a href="http://knockoutjs.com">HTML uses Knockout.js syntax</a>,
|
jaroslav@541
|
75 |
yet the application code can be written in Java.
|
jaroslav@541
|
76 |
</p>
|
jaroslav@541
|
77 |
|
jtulach@832
|
78 |
<h3>What's New in Version 1.0?</h3>
|
jtulach@832
|
79 |
|
jtulach@832
|
80 |
<p>
|
jtulach@832
|
81 |
{@link net.java.html.json.Property#array() Array properties} are now
|
jtulach@832
|
82 |
mutable from the <a href="http://knockoutjs.com">knockout.js</a>
|
jtulach@838
|
83 |
point of view (required {@link org.netbeans.html.json.spi.Proto.Type#replaceValue one SPI change}).
|
jtulach@834
|
84 |
The page lookup mechanism can use {@link net.java.html.boot.BrowserBuilder#locale(java.util.Locale) locale}
|
jtulach@834
|
85 |
to load localized a page with appropriate suffix.
|
jtulach@832
|
86 |
</p>
|
jtulach@832
|
87 |
|
jtulach@771
|
88 |
<h3>What's New in Version 0.9?</h3>
|
jtulach@771
|
89 |
|
jtulach@771
|
90 |
<p>
|
jtulach@771
|
91 |
System can run in {@link net.java.html.boot.BrowserBuilder#classloader(java.lang.ClassLoader) Felix OSGi container} (originally only Equinox).
|
jtulach@788
|
92 |
{@link net.java.html.json.ComputedProperty Derived properties}
|
jtulach@788
|
93 |
now deeply check changes in other {@link net.java.html.json.Model model
|
jtulach@788
|
94 |
classes} they depend on and recompute their values accordingly.
|
jtulach@810
|
95 |
<a target="_blank" href="http://knockoutjs.com">Knockout.js</a> library has been updated
|
jtulach@810
|
96 |
to version 3.2.0.
|
jtulach@771
|
97 |
</p>
|
jtulach@771
|
98 |
|
jtulach@771
|
99 |
<h3>What's New in 0.8.x Versions?</h3>
|
jaroslav@720
|
100 |
|
jaroslav@720
|
101 |
<p>
|
jaroslav@720
|
102 |
Setters or array properties on classes generated by {@link net.java.html.json.Model}
|
jtulach@838
|
103 |
annotation can be accessed from any thread. {@link org.netbeans.html.sound.spi.AudioEnvironment}
|
jtulach@747
|
104 |
can be registered into {@link net.java.html.BrwsrCtx}. There is
|
jtulach@747
|
105 |
a {@link net.java.html.json.Models#parse(net.java.html.BrwsrCtx, java.lang.Class, java.io.InputStream, java.util.Collection) method}
|
jtulach@747
|
106 |
to parse a JSON array and convert it into
|
jtulach@747
|
107 |
{@link net.java.html.json.Model model classes}.
|
jtulach@758
|
108 |
Improved behavior of <code>enum</code> values in
|
jtulach@758
|
109 |
{@link net.java.html.json.Model knockout bindings}.
|
jaroslav@720
|
110 |
</p>
|
jaroslav@720
|
111 |
|
jtulach@702
|
112 |
<p>
|
jtulach@702
|
113 |
Few bugfixes for better portability.
|
jtulach@702
|
114 |
New API for {@link net.java.html.boot.script.Scripts headless execution}
|
jtulach@703
|
115 |
on top of <em>Nashorn</em> - does not run <em>knockout for Java</em>
|
jtulach@702
|
116 |
fully yet
|
jtulach@702
|
117 |
(reported as <a href="https://bugs.openjdk.java.net/browse/JDK-8046013">JDK-8046013</a>),
|
jtulach@702
|
118 |
however even in current state it is quite
|
jtulach@703
|
119 |
{@link net.java.html.boot.script.Scripts useful for testing}
|
jtulach@702
|
120 |
of
|
jtulach@703
|
121 |
{@link net.java.html.js Java/JavaScript interactions}.
|
jtulach@702
|
122 |
</p>
|
jtulach@702
|
123 |
|
jtulach@654
|
124 |
<p>
|
jtulach@656
|
125 |
{@link net.java.html.boot.fx.FXBrowsers} has been extended
|
jtulach@656
|
126 |
with new helper methods to make it easier to use HTML+Java
|
jtulach@656
|
127 |
API in existing JavaFX applications.
|
jtulach@656
|
128 |
The annotation processor is made
|
jtulach@654
|
129 |
more robust with respect to errors in callback syntax of
|
jtulach@654
|
130 |
{@link net.java.html.js.JavaScriptBody} body parameter.
|
jtulach@654
|
131 |
Javadoc of {@link net.java.html.BrwsrCtx#execute} method
|
jtulach@654
|
132 |
has been improved based on a failure of its usability study.
|
jtulach@654
|
133 |
There can be additional parameters to methods annotated by
|
jtulach@654
|
134 |
{@link net.java.html.json.OnReceive} that allows one to
|
jtulach@654
|
135 |
pass state when a JSON call is made and use it when it finishes.
|
jtulach@654
|
136 |
The mechanism of discovery of sibling HTML page has been
|
jtulach@654
|
137 |
extended to work on systems that don't support
|
jtulach@654
|
138 |
{@link java.lang.Class#getProtectionDomain}.
|
jtulach@654
|
139 |
</p>
|
jtulach@654
|
140 |
|
jaroslav@617
|
141 |
<p>
|
jtulach@650
|
142 |
The first argument of method annotated by
|
jtulach@650
|
143 |
{@link net.java.html.json.OnReceive} annotation has to
|
jtulach@650
|
144 |
be the associated {@link net.java.html.json.Model model class}.
|
jtulach@650
|
145 |
</p>
|
jtulach@650
|
146 |
|
jtulach@650
|
147 |
<p>
|
jtulach@647
|
148 |
{@link net.java.html.json.OnReceive} annotation now accepts
|
jtulach@647
|
149 |
{@link java.util.List} of data values as second argument
|
jtulach@647
|
150 |
(previously required an array).
|
jtulach@647
|
151 |
</p>
|
jtulach@647
|
152 |
|
jtulach@647
|
153 |
|
jtulach@647
|
154 |
<h3>What's New in Older Versions?</h3>
|
jtulach@647
|
155 |
|
jtulach@647
|
156 |
<p>
|
jaroslav@617
|
157 |
{@link net.java.html.js.JavaScriptBody} annotation has new attribute
|
jaroslav@617
|
158 |
{@link net.java.html.js.JavaScriptBody#wait4js()} which allows
|
jaroslav@617
|
159 |
asynchronous execution. Libraries using
|
jaroslav@617
|
160 |
{@link net.java.html.js.JavaScriptBody} are urged to use this
|
jaroslav@617
|
161 |
new attribute as much as possible, as it can speed up execution
|
jaroslav@617
|
162 |
in certain environments.
|
jaroslav@617
|
163 |
</p>
|
jaroslav@617
|
164 |
|
jaroslav@617
|
165 |
<p>
|
jaroslav@617
|
166 |
Use {@link net.java.html.BrwsrCtx#execute(java.lang.Runnable)} in
|
jaroslav@617
|
167 |
multi-threaded environment to execute your code on the browser thread.
|
jaroslav@617
|
168 |
See example
|
jaroslav@617
|
169 |
{@link net.java.html.BrwsrCtx#execute(java.lang.Runnable) using Java timer}.
|
jaroslav@617
|
170 |
</p>
|
jaroslav@617
|
171 |
|
jaroslav@541
|
172 |
<h3>Interesting Entry Points</h3>
|
jaroslav@541
|
173 |
|
jaroslav@541
|
174 |
<p>Learn how to {@link net.java.html.json.Model animate an HTML page from Java}
|
jaroslav@541
|
175 |
without referencing single HTML element from the Java code.
|
jaroslav@541
|
176 |
</p>
|
jaroslav@541
|
177 |
<p>Use {@link net.java.html.json.OnReceive JSON} to communicate
|
jaroslav@541
|
178 |
with REST based server API.
|
jaroslav@541
|
179 |
</p>
|
jaroslav@541
|
180 |
<p>Use <a href="net/java/html/json/doc-files/websockets.html">WebSockets</a>
|
jaroslav@541
|
181 |
and JSON.
|
jaroslav@541
|
182 |
</p>
|
jaroslav@541
|
183 |
<p>Call JavaScript methods from Java and vice versa, via
|
jaroslav@541
|
184 |
<a href="net/java/html/js/package-summary.html">JavaScriptBody</a>.
|
jaroslav@541
|
185 |
</p>
|
jaroslav@541
|
186 |
|
jaroslav@541
|
187 |
<h3>Getting Started</h3>
|
jaroslav@541
|
188 |
|
jtulach@759
|
189 |
There are <a href="http://wiki.apidesign.org/wiki/DukeScriptInNetBeans">many ways</a>
|
jtulach@759
|
190 |
to start developing
|
jaroslav@541
|
191 |
<a href="http://html.java.net">Html for Java</a> application.
|
jaroslav@541
|
192 |
However to be sure one chooses the most recent setup, it is recommended
|
jaroslav@541
|
193 |
to switch to good old command line and use a
|
jaroslav@541
|
194 |
<a href="http://wiki.apidesign.org/wiki/Knockout4Java">Maven archetype</a>
|
jaroslav@610
|
195 |
associated with every version of this project. Make sure at least
|
jaroslav@610
|
196 |
<em>JDK7</em> is your installed Java and type:
|
jaroslav@541
|
197 |
<pre>
|
jaroslav@541
|
198 |
$ mvn archetype:generate \
|
jaroslav@541
|
199 |
-DarchetypeGroupId=org.apidesign.html \
|
jaroslav@541
|
200 |
-DarchetypeArtifactId=knockout4j-archetype \
|
jtulach@759
|
201 |
-DarchetypeVersion=0.8 <em># or newer version, if available</em>
|
jaroslav@541
|
202 |
</pre>
|
jaroslav@611
|
203 |
Answer few questions (for example choose myfirstbrwsrpage as artifactId)
|
jaroslav@611
|
204 |
and then you can:
|
jaroslav@541
|
205 |
<pre>
|
jaroslav@541
|
206 |
$ cd myfirstbrwsrpage
|
jaroslav@541
|
207 |
$ mvn process-classes exec:java
|
jaroslav@541
|
208 |
</pre>
|
jaroslav@541
|
209 |
In a few seconds (or minutes if
|
jaroslav@541
|
210 |
<a href="http://wiki.apidesign.org/wiki/Maven">Maven</a>
|
jaroslav@541
|
211 |
decides to download the whole Internet of dependencies) you should
|
jaroslav@611
|
212 |
see a sample Hello World application rendered in a
|
jaroslav@611
|
213 |
<a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
|
jaroslav@611
|
214 |
web view component (that of course requires your JDK to come
|
jaroslav@611
|
215 |
with <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>;
|
jaroslav@611
|
216 |
<a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK7
|
jaroslav@611
|
217 |
and JDK8 from Oracle</a> contain everything that is needed).
|
jaroslav@611
|
218 |
The generated application is built around one
|
jaroslav@611
|
219 |
Java source (uses the {@link net.java.html.json.Model} annotation to
|
jaroslav@611
|
220 |
auto-generate another <code>Data.java</code> class during compilation)
|
jaroslav@611
|
221 |
and one HTML file (uses the <a href="http://knockoutjs.com">Knockout</a>
|
jaroslav@611
|
222 |
syntax to <code>data-bind</code> the HTML elements to the
|
jaroslav@611
|
223 |
generated <code>Data</code> model):
|
jaroslav@541
|
224 |
<pre>
|
jaroslav@541
|
225 |
$ ls src/main/java/**/DataModel.java
|
jaroslav@541
|
226 |
$ ls src/main/webapp/pages/index.html
|
jaroslav@541
|
227 |
</pre>
|
jaroslav@611
|
228 |
That is all you need to get started. Play with the sources,
|
jaroslav@611
|
229 |
modify them and enjoy
|
jaroslav@541
|
230 |
<a href="http://html.java.net">Html for Java</a>!
|
jaroslav@541
|
231 |
|
jaroslav@614
|
232 |
<h2>IDE Support</h2>
|
jaroslav@614
|
233 |
|
jaroslav@614
|
234 |
<p>
|
jaroslav@614
|
235 |
This API is part of <a target="_blank"
|
jaroslav@614
|
236 |
href="http://netbeans.org">NetBeans.org</a> project and as such
|
jaroslav@614
|
237 |
it works naturally with the <a target="_blank"
|
jaroslav@614
|
238 |
href="https://netbeans.org/features/index.html">NetBeans IDE</a>.
|
jaroslav@614
|
239 |
On the other hand, the API is using nothing NetBeans specific,
|
jaroslav@614
|
240 |
it builds on standard Java6 APIs and as such it shall work fine
|
jaroslav@614
|
241 |
in any IDE.
|
jaroslav@614
|
242 |
</p>
|
jaroslav@614
|
243 |
|
jaroslav@614
|
244 |
<p>
|
jaroslav@614
|
245 |
A lot of work is done by
|
jaroslav@614
|
246 |
<a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">
|
jaroslav@614
|
247 |
annotation processors</a>
|
jaroslav@614
|
248 |
that generate various boiler plate code during compilation. This
|
jaroslav@614
|
249 |
is a standard part of Java since JDK6, but for example Eclipse
|
jaroslav@614
|
250 |
is known not to deal with processors well and developers using
|
jaroslav@614
|
251 |
it need to be careful. IntelliJ users hasn't reported any issues
|
jaroslav@614
|
252 |
and of course, NetBeans IDE support for
|
jaroslav@614
|
253 |
<a href="http://wiki.apidesign.org/wiki/AnnotationProcessor">processors</a>
|
jaroslav@614
|
254 |
is outstanding.
|
jaroslav@614
|
255 |
</p>
|
jaroslav@614
|
256 |
|
jaroslav@614
|
257 |
<p>
|
jaroslav@614
|
258 |
When using {@link net.java.html.js.JavaScriptBody} annotation, it is
|
jaroslav@614
|
259 |
useful to do a bit of post processing of classes. There is a
|
jaroslav@614
|
260 |
<a href="http://wiki.apidesign.org/wiki/Maven">Maven</a>
|
jaroslav@614
|
261 |
plugin for that.
|
jaroslav@614
|
262 |
NetBeans IDE will invoke it when doing a build. Other IDEs may
|
jaroslav@614
|
263 |
need some hint to do so.
|
jaroslav@614
|
264 |
Anyway: If one does not see all (generated) sources or is getting
|
jaroslav@614
|
265 |
{@link java.lang.LinkageError}s when executing the application,
|
jaroslav@614
|
266 |
switch to command line and do clean build
|
jaroslav@614
|
267 |
from there:
|
jaroslav@614
|
268 |
</p>
|
jaroslav@614
|
269 |
<pre>$ mvn clean install</pre>
|
jaroslav@614
|
270 |
<p>
|
jaroslav@614
|
271 |
If that succeeds, your IDE of choice will hopefully
|
jaroslav@614
|
272 |
pick the generated sources up and present the result of the build
|
jaroslav@614
|
273 |
properly. If not,
|
jaroslav@614
|
274 |
<a href="https://netbeans.org/downloads/">download NetBeans</a>,
|
jaroslav@614
|
275 |
you will be pleasantly
|
jaroslav@614
|
276 |
surprised - for example with our excellent
|
jaroslav@614
|
277 |
<a href="net/java/html/js/package-summary.html#debugging">Java/JavaScript
|
jaroslav@614
|
278 |
debugging</a> support.
|
jaroslav@614
|
279 |
</p>
|
jaroslav@614
|
280 |
|
jaroslav@615
|
281 |
<a name="deploy">
|
jaroslav@615
|
282 |
<h2>Deploy Your Application</h2>
|
jaroslav@615
|
283 |
</a>
|
jaroslav@615
|
284 |
|
jaroslav@615
|
285 |
<p>
|
jaroslav@615
|
286 |
It is not goal of this documentation to list all possible ways
|
jaroslav@615
|
287 |
to package and deploy applications which use this API. However it is
|
jaroslav@615
|
288 |
important for new comers to see the benefits of using the
|
jaroslav@615
|
289 |
<a href="http://html.java.net">HTML for Java</a> API and as such
|
jaroslav@615
|
290 |
let's list at least few bundling options, known to work at the time of writing
|
jaroslav@615
|
291 |
this documentation.
|
jaroslav@615
|
292 |
</p>
|
jaroslav@615
|
293 |
|
jaroslav@615
|
294 |
<p>
|
jaroslav@615
|
295 |
First of all, this is a <em>client technology</em>. You write client applications
|
jaroslav@615
|
296 |
with it which may, but need not connect to a server. You don't need
|
jaroslav@615
|
297 |
Tomcat or WebLogic to deploy
|
jaroslav@615
|
298 |
<a href="http://html.java.net">HTML for Java</a> applications.
|
jaroslav@615
|
299 |
</p>
|
jaroslav@615
|
300 |
|
jaroslav@615
|
301 |
<p>
|
jaroslav@615
|
302 |
<img src='resources/javafx_logo.jpg' width="64"
|
jaroslav@615
|
303 |
height="64" align="left"/>
|
jaroslav@615
|
304 |
The sample project generated by
|
jaroslav@615
|
305 |
<code>org.apidesign.html knockout4j-archetype</code> is configured
|
jaroslav@615
|
306 |
to use <a href="http://wiki.apidesign.org/wiki/JavaFX">JavaFX</a>
|
jaroslav@615
|
307 |
as the rendering technology. This setup is primarily suitable for
|
jaroslav@615
|
308 |
development - it needs no special packaging, starts quickly and
|
jaroslav@615
|
309 |
allows you to use classical HotSpot VM debuggers. A final
|
jaroslav@615
|
310 |
artifact from the build is also a ZIP file which you can use
|
jaroslav@615
|
311 |
and distribute to your users. Good for desktop applications.
|
jaroslav@615
|
312 |
</p>
|
jaroslav@615
|
313 |
|
jaroslav@615
|
314 |
<p>
|
jaroslav@615
|
315 |
<img src='resources/netbeans_logo.jpg' width="64"
|
jaroslav@615
|
316 |
height="64" align="right"/>
|
jaroslav@615
|
317 |
<img src='resources/eclipse_logo.png' width="64"
|
jaroslav@615
|
318 |
height="64" align="right"/>
|
jaroslav@615
|
319 |
All the <a href="http://html.java.net">HTML for Java</a> libraries
|
jtulach@638
|
320 |
are packaged as <a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
|
jaroslav@615
|
321 |
bundles and as such they can easily be run in NetBeans as well as
|
jaroslav@615
|
322 |
in Eclipse. As a result one can use
|
jaroslav@615
|
323 |
<a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a>
|
jtulach@638
|
324 |
and have a common module system for both platforms. In addition to that
|
jtulach@638
|
325 |
one can render using
|
jaroslav@615
|
326 |
HTML and have a common UI in both platforms. In such case
|
jaroslav@615
|
327 |
your application would be packaged as a set of
|
jaroslav@615
|
328 |
<a href="http://wiki.apidesign.org/wiki/OSGi">OSGi</a> bundles.
|
jaroslav@615
|
329 |
Read
|
jaroslav@615
|
330 |
<a href="http://wiki.apidesign.org/wiki/HTML">more</a>...
|
jaroslav@615
|
331 |
</p>
|
jaroslav@615
|
332 |
|
jaroslav@615
|
333 |
<p>
|
jaroslav@615
|
334 |
<img src='resources/chrome_logo.png' width="64"
|
jaroslav@615
|
335 |
height="64" align="left"/>
|
jaroslav@615
|
336 |
<img src='resources/safari_logo.png' width="64"
|
jaroslav@615
|
337 |
height="64" align="left"/>
|
jaroslav@615
|
338 |
<img src='resources/ie_logo.png' width="64"
|
jaroslav@615
|
339 |
height="64" align="left"/>
|
jaroslav@615
|
340 |
<img src='resources/firefox_logo.png' width="64"
|
jaroslav@615
|
341 |
height="64" align="left"/>
|
jaroslav@615
|
342 |
|
jaroslav@615
|
343 |
There is more and more attempts to execute Java bytecode
|
jtulach@638
|
344 |
in a browser, without any special Java plugin installed.
|
jaroslav@615
|
345 |
The <a href="http://html.java.net">HTML for Java</a> is
|
jaroslav@615
|
346 |
carefully designed to produce lightweight, well performing
|
jaroslav@615
|
347 |
applications even on such restricted environments. It uses
|
jaroslav@615
|
348 |
no reflection calls and that allows to statically pre-compile
|
jaroslav@615
|
349 |
the applications into JavaScript. One of such environments
|
jtulach@638
|
350 |
is called <a href="http://wiki.apidesign.org/wiki/Bck2Brwsr">Bck2Brwsr</a>,
|
jtulach@638
|
351 |
another <a href="http://wiki.apidesign.org/wiki/TeaVM">TeaVM</a>. Both support the
|
jaroslav@615
|
352 |
{@link net.java.html.js.JavaScriptBody} annotation. Read
|
jaroslav@615
|
353 |
<a href="http://wiki.apidesign.org/wiki/Bck2BrwsrViaCLI">more</a> or play
|
jaroslav@616
|
354 |
a minesweeper game packaged for your browser
|
jaroslav@616
|
355 |
(of course <a target="_blank"
|
jaroslav@616
|
356 |
href="http://source.apidesign.org/hg/html~demo/file/ea79b73d590a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java">
|
jaroslav@616
|
357 |
written</a> in Java):
|
jaroslav@615
|
358 |
</p>
|
jaroslav@616
|
359 |
|
jaroslav@616
|
360 |
<script type="text/html" id="field">
|
jaroslav@616
|
361 |
<table class="field">
|
jaroslav@616
|
362 |
<tbody>
|
jaroslav@616
|
363 |
<!-- ko foreach: rows -->
|
jaroslav@616
|
364 |
<tr>
|
jaroslav@616
|
365 |
<!-- ko foreach: columns -->
|
jaroslav@616
|
366 |
<td data-bind="css: style, click: $parents[1].click" >
|
jaroslav@616
|
367 |
<div data-bind='html: html'></div>
|
jaroslav@616
|
368 |
</td>
|
jaroslav@616
|
369 |
<!-- /ko -->
|
jaroslav@616
|
370 |
</tr>
|
jaroslav@616
|
371 |
<!-- /ko -->
|
jaroslav@616
|
372 |
</tbody>
|
jaroslav@616
|
373 |
</table>
|
jaroslav@616
|
374 |
</script>
|
jaroslav@616
|
375 |
|
jaroslav@616
|
376 |
<div data-bind="template: { name : 'field', if: fieldShowing }"></div>
|
jaroslav@616
|
377 |
|
jaroslav@616
|
378 |
<!-- boot bck2brwsr -->
|
jaroslav@616
|
379 |
<script type="text/javascript" src="resources/teavm.js"></script>
|
jaroslav@616
|
380 |
<script>
|
jaroslav@616
|
381 |
var vm = new VM();
|
jaroslav@616
|
382 |
vm.loadClass('org.apidesign.demo.minesweeper.MainBrwsr');
|
jaroslav@616
|
383 |
</script>
|
jaroslav@616
|
384 |
|
jaroslav@615
|
385 |
<p>
|
jtulach@654
|
386 |
<img src='resources/ios_logo.jpg' width="64"
|
jtulach@654
|
387 |
height="64" align="right"/>
|
jaroslav@615
|
388 |
<img src='resources/android_logo.jpg' width="64"
|
jaroslav@615
|
389 |
height="64" align="right"/>
|
jaroslav@615
|
390 |
|
jaroslav@615
|
391 |
Now when we have seen that the
|
jaroslav@615
|
392 |
<a href="http://html.java.net">HTML for Java</a> applications
|
jaroslav@615
|
393 |
can run on any modern browser, we can ask whether they can also
|
jaroslav@615
|
394 |
fit into a phone!? Yes, they can and especially to phones
|
jaroslav@615
|
395 |
that can execute Java code already! Just by changing your
|
jaroslav@615
|
396 |
packaging you can create an APK file and deploy it to your
|
jaroslav@615
|
397 |
Android phone.
|
jtulach@624
|
398 |
Read <a target="_blank" href="http://wiki.apidesign.org/wiki/DlvkBrwsr">more</a>...
|
jtulach@654
|
399 |
In case you'd like your application to reach out to second biggest
|
jtulach@654
|
400 |
group of smartphone users, don't despair: It
|
jtulach@654
|
401 |
seems the set of devices that can execute
|
jtulach@654
|
402 |
<a href="http://html.java.net">HTML for Java</a> applications
|
jtulach@654
|
403 |
has been extended to <em>iPads</em> and <em>iPhones</em>. Get the
|
jtulach@654
|
404 |
<a target="_blank" href="http://wiki.apidesign.org/wiki/IBrwsr">details here</a>
|
jtulach@654
|
405 |
and deploy everywhere!
|
jaroslav@615
|
406 |
</p>
|
jaroslav@615
|
407 |
<p>
|
jaroslav@615
|
408 |
Convinced it makes sense to use
|
jaroslav@615
|
409 |
<a href="http://html.java.net">HTML for Java</a>
|
jaroslav@615
|
410 |
APIs for writing applications that are
|
jaroslav@615
|
411 |
<em>written once, displayed anywhere</em>? Or do you have an
|
jaroslav@615
|
412 |
environment which is not supported? In such case you can bring
|
jaroslav@615
|
413 |
<a href="http://html.java.net">HTML for Java</a>
|
jaroslav@615
|
414 |
to your environment yourself. Just implement your own
|
jtulach@838
|
415 |
{@link org.netbeans.html.boot.spi.Fn.Presenter}!
|
jaroslav@615
|
416 |
</p>
|
jaroslav@615
|
417 |
|
jaroslav@607
|
418 |
<h2>Other Resources</h2>
|
jaroslav@607
|
419 |
|
jaroslav@607
|
420 |
<img src="net/java/html/json/doc-files/DukeHTML.png" width="256" height="184" alt="Duke and HTML5. Together at last!" align="right"/>
|
jaroslav@607
|
421 |
|
jaroslav@607
|
422 |
The javadoc for latest and previous versions is also available
|
jaroslav@607
|
423 |
online:
|
jaroslav@607
|
424 |
<ul>
|
jaroslav@607
|
425 |
<li>Current <a target="_blank" href="http://bits.netbeans.org/html+java/dev/">development</a> version
|
jtulach@771
|
426 |
<li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.3">0.8.3</a>
|
jtulach@757
|
427 |
<li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.2">0.8.2</a>
|
jtulach@757
|
428 |
<li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8.1">0.8.1</a>
|
jtulach@654
|
429 |
<li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.8">0.8</a>
|
jaroslav@607
|
430 |
<li>Version <a target="_blank" href="http://bits.netbeans.org/html+java/0.7.5">0.7.5</a>
|
jaroslav@607
|
431 |
</ul>
|
jaroslav@616
|
432 |
|
jaroslav@616
|
433 |
<style type="text/css">
|
jaroslav@616
|
434 |
table.field td {
|
jaroslav@616
|
435 |
padding: 4px;
|
jaroslav@616
|
436 |
width: 18px;
|
jaroslav@616
|
437 |
height: 18px;
|
jaroslav@616
|
438 |
font-size: 1.5em;
|
jaroslav@616
|
439 |
border: 1px solid black;
|
jaroslav@616
|
440 |
}
|
jaroslav@616
|
441 |
table.field td.UNKNOWN {
|
jaroslav@616
|
442 |
background-color: #D6E4E1;
|
jaroslav@616
|
443 |
cursor: pointer;
|
jaroslav@616
|
444 |
}
|
jaroslav@616
|
445 |
table.field td.EXPLOSION {
|
jaroslav@616
|
446 |
background-color: #A31E39;
|
jaroslav@616
|
447 |
}
|
jaroslav@616
|
448 |
table.field td.DISCOVERED {
|
jaroslav@616
|
449 |
background-color: #9DB2B1;
|
jaroslav@616
|
450 |
}
|
jaroslav@616
|
451 |
</style>
|
jaroslav@541
|
452 |
</body>
|
jaroslav@541
|
453 |
</html>
|