Lê đình Thanh, Triển khai ứng dụng Java Nội dung Ớ Tệp jar Ớ Java Network Launch Protocol JNLP Ớ Java Web Start Ớ Applet 4 Tệp jar... Lê đình Thanh, Triển khai ứng dụng Java đóng gói ch
Trang 1Lê đình Thanh, Triển khai ứng dụng Java
Lê đình Thanh
Bộ môn Mạng và Truyền thông Máy tắnh Khoa Công nghệ Thông tin Trường đại học Công nghệ, đHQGHN
Bài giảng
LẬP TRÌNH JAVA
Triển khai ứng dụng
Bài 9
Trang 2Lê đình Thanh, Triển khai ứng dụng Java
Nội dung
Ớ Tệp jar
Ớ Java Network Launch Protocol (JNLP)
Ớ Java Web Start
Ớ Applet
4
Tệp jar
Trang 3Lê đình Thanh, Triển khai ứng dụng Java
đóng gói chương trình với tệp jar
Ớ để triển khai ứng dụng ựược viết bằng java, người ta
thường ựóng gói các tệp chương trình (.class) cùng các tệp tài nguyên cần cho chương trình dưới dạng tệp JAR (Java Archive)
Ớ Chương trình jar.exe trong jdk/bin cung cấp các chức
năng tạo lập tệp jar
Ớ Tạo tệp jar: jar cf jar-file input-file(s)
Ớ Xem nội dung tệp jar: jar tf jar-file
Ớ Giải nén tệp jar: jar xf jar-file
Ớ Giải nén một vài tệp trong tệp jar: jar xf jar-file archived-file(s)
Chạy chương trình với tệp jar
Ớ Dòng lệnh (cần Main-class manifest)
java -jar app.jar
Ớ Sử dụng Java Web Start
Ớ Chạy applet
Trang 4Lê đình Thanh, Triển khai ứng dụng Java
jar manifest
Ớ Tệp manifest là một tệp văn bản mô tả về các tệp ựược
ựóng gói trong tệp jar
Ớ Khi tạp tệp jar, tệp manifest ựược tạo tự ựộng và gói vào jar với nội dung
Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Ớ Sửa nội dung tệp manifest
jar cfm jar-file manifest-addition-file input-file(s)
trong ựó manifest-addition-file là tệp văn bản chứa nội dung
ựược ựưa thêm vào manifest
8
Thiết lập Main-class manifest
Ớ Sửa nội dung tệp manifest
jar cfm jar-file manifest-addition-file input-file(s)
trong ựó manifest-addition-file là tệp văn bản chứa nội dung
Main-Class: MyPackage.MyClass
Trang 5Lê đình Thanh, Triển khai ứng dụng Java
Thiết lập thông tin phiên bản
Ớ Sửa nội dung tệp manifest
jar cfm jar-file manifest-addition-file input-file(s)
trong ựó manifest-addition-file là tệp văn bản chứa nội dung
về
Name:
Specification-Title:
Specification-Version:
Specification-Vendor:
Implementation-Title:
Implementation-Version:
Implementation-Vendor:
Java Network
Launch Protocol
(JNLP)
Trang 6Lê đình Thanh, Triển khai ứng dụng Java
JNLP
Ớ để triển khai ứng dụng qua mạng, java sử dụng JNLP
Ớ Các bước triển khai
Ớ Tạo tệp.jnlp (dạngXML) mô tả về tệp jar chứa mã chương trình và các tài nguyên cần thiết
Ớ Tạo liên kết trên trên trang web trỏ tới tệp jnlp, Java Web Start sẽ download và chạy chương trình
ựược mô tả trong tệp jnlp
Ớ Sử dụng applet với mô tả jnlp
12
Nội dung tệp jnlp cho ứng dụng
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+Ộ>
<information>
<title>Some Title</title>
<vendor>Some Team</vendor>
</information>
<resources>
<j2se version="1.6+"
href="http://java.sun.com/products/autodl/j2se"/>
<jar href="DynamicTreeDemo.jar" main="true" />
</resources>
<application-desc name="Application Name"
main-class=ỘPackageName.ClassName" width="300" height="300">
</application-desc>
</jnlp>
Trang 7Lê đình Thanh, Triển khai ứng dụng Java
Nội dung tệp jnlp cho applet
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+">
<information>
<title>Dynamic Tree Demo</title>
<vendor>Dynamic Team</vendor>
</information>
<resources>
<j2se version="1.6+"
href="http://java.sun.com/products/autodl/j2se" />
<jar href="DynamicTreeDemo.jar" main="true" />
</resources>
<applet-desc name="Applet Name"
main-class="components.DynamicTreeApplet" width="300"
height="300">
</applet-desc>
</jnlp>
Java Web Start
Trang 8Lê đình Thanh, Triển khai ứng dụng Java
Java Web Start
Ớ Java Web Start cung cấp khả năng triển khai ứng dụng java một cách ựơn giản, hiệu quả bằng cách download và chạy
Ớ Client: Cần cài J2SE
Ớ Server: Cần choapplication/x-java-jnlp-file JNLP
trong MIME type
16
Chạy ứng dụng Java Web Start
Ớ Sử dụng tiện ắch triển khai ứng dụng
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var dir = location.href.substring(0,
location.href.lastIndexOf('/')+1);
var url = dir + "webstart-desc.jnlp";
deployJava.launchButtonPNG = Ộbutton.gifỢ;
deployJava.createWebStartLaunchButton(url, '1.6.0');
</script>
Ớ Hoặc tạo link ựến tệp jnlp
<a href="/some/path/Notepad.jnlp">Launch Notepad Application</a> Có thể download deployJava.js
ựể triển khai tại máy chủ của mình
Trang 9Lê đình Thanh, Triển khai ứng dụng Java
Applet
Applet
Ớ Applet là ứng dụng java có thể nhúng vào trang web
và hiển thị trên trình duyệt
Ớ Một applet chỉ chứa một lớp ựược kế thừa từ
java.applet.Applet hoặcjavax.swing.JAppletvới các phương thức
Trang 10Lê đình Thanh, Triển khai ứng dụng Java
Tạo applet
import javax.swing.JApplet;
import javax.swing.SwingUtilities;
import javax.swing.JLabel;
public class HelloWorld extends JApplet {
public void init() {
try {
SwingUtilities.invokeAndWait(
new Runnable() {
public void run() { JLabel lbl = new JLabel("Hello World"); add(lbl); }
}
);
} catch (Exception e) { System.err.println("createGUI didn't complete successfully"); } } }
20
Nhúng applet vào trang web
Ớ Applets có thể ựược chúng vào
trang web và tương tác với các
ựối tượng tài liệu của trang
web thông qua javascript
Ớ để applet chạy ựược, trình
duyệt phải ựược cài Java
Plug-in
Ớ Browser gửi ựoạn mã nhúng
applet cho Java Plug-in
Java Plug-in chịu trách
nhiệm gọi và thực thi applet
Trang 11Lê đình Thanh, Triển khai ứng dụng Java
Nhúng applet vào trang web
Ớ Sử dụng thẻ <applet>
<applet code=AppletClassName.class
archive="JarFileName.jar" width=width height=height>
</applet>
hoặc
<applet code = 'AppletName' jnlp_href =
Ổapplet-desc.jnlp', width = 300, height = 300 />
Ớ Sử dụng tiện ắch nhúng applet
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = { code:'AppletName', width:300, height:300} ;
var parameters = {jnlp_href: Ổapplet-desc.jnlp'} ; deployJava.runApplet(attributes, parameters, '1.6');
</script>
Url của applet
Ớ getCodeBase() - URL của applet
Ớ getDocumentBase() Ờ url của trang web chứa applet
Ớ Vắ dụ:
Image image = getImage(getCodeBase(), "imgDir/a.gif");
Trang 12Lê đình Thanh, Triển khai ứng dụng Java
Sử dụng tham số với applet
Ớ Triển khai bằng thẻ applet
<applet>
<PARAM NAME = parameter VALUE = value >
</applet>
Ớ Triển khai bằng jnlp
<applet-desc>
< PARAM NAME = parameter VALUE = value >
</applet-desc>
và
var parameters = {jnlp_href: 'applettakesparams.jnlp',
paramOutsideJNLPFile: 'fooOutsideJNLP'} ;
deployJava.runApplet(attributes, parameters, 1.4);
Ớ Nhận và xử lý tham số trong applet
paramValue = getParameter("paramName");
24
Hiển thị trạng thái và mở trang web
Ớ Hiển thị trạng thái
showStatus(ỘNội dung hiển thị trên thanh trạng tháiỢ);
Ớ Mở trang web
AppletContext appletContext = getAppletContext() ;
appletContext.showDocument(java.net.URL url);
appletContext.showDocument(java.net.URL url, String
targetWindow);
Trang 13Lê đình Thanh, Triển khai ứng dụng Java
Truy cập mã javascript từ applet
Ớ Lấy ựối tượng window
JSObject window = JSObject.getWindow(this);
Ớ Truy cập biến javascript
userName = window.getMember("userName");
Ớ Cập nhật biến javascript
window.setMember("userName", userName);
Ớ Gọi hàm javascript
Number age = (Number) window.eval("getAge()"); window.call("writeSummary", new Object[] {summary}) ;
Truy cập thành viên của applet bằng javascript
Ớ Quy tắc: ựịnh danh của applet ựược dùng như một tham chiếu ựến ựối tượng applet
Ớ <script
src="http://www.java.com/js/deployJava.js"></script>
<script> var attributes = { id:'mathApplet',
Trang 14Lê đình Thanh, Triển khai ứng dụng Java
Duyệt DOM
public void start() {
try {
Class c =
Class.forName("com.sun.java.browser.plugin2.DOM"); Method m = c.getMethod("getDocument", new Class[] { java.applet.Applet.class });
HTMLDocument doc = (HTMLDocument) m.invoke(null, new Object[] { this });
HTMLBodyElement body = (HTMLBodyElement)
doc.getBody();
dump(body, INDENT);
} catch (Exception e) { System.out.println("New Java Plug-In not available");} }
28
Duyệt DOM
private void dump(Node root, String prefix) {
if (root instanceof Element) {
System.out.println(prefix + ((Element) root).getTagName() + " / " + root.getClass().getName()); } else if (root instanceof CharacterData) {
String data = ((CharacterData) root).getData().trim();
if (!data.equals("")) { System.out.println(prefix + "CharacterData: " + data); } }
else { System.out.println(prefix + root.getClass().getName()); }
NamedNodeMap attrs = root.getAttributes();
if (attrs != null) {
int len = attrs.getLength();
for (int i = 0; i < len; i++) {
Node attr = attrs.item(i);
System.out.print(prefix + HALF_INDENT + "attribute " + i + ": " + attr.getNodeName());
if (attr instanceof Attr) { System.out.print(" = " + ((Attr) attr).getValue()); } System.out.println(); } }
if (root.hasChildNodes()) {
NodeList children = root.getChildNodes();
if (children != null) {
int len = children.getLength();
for (int i = 0; i < len; i++) { dump(children.item(i), prefix + INDENT); } } }
}
Trang 15Lê đình Thanh, Triển khai ứng dụng Java
Giao tiếp giữa các applets
Ớ Các applets có thể giao tiếp với nhau thông qua javascript
Ớ Applet1 javascript Applet2