這裡蒐索程式師資訊,查找有用的技術資料
當前位置:首頁 » 網頁前端 » javaweb啟動初始化
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

javaweb啟動初始化

發布時間: 2022-09-06 18:50:46

1. java的web配置文件的「<load-on-startup>0</load-on-startup>」一個問題

  1. load-on-startup標記容器是否在啟動的時候實例化並調用其init()方法的優先順序。

  2. 它的值表示 servlet應該被載入的順序。

  3. 當值為0或者大於0時,表示容器在應用啟動時就載入並初始化這個servlet。

  4. .如果值小於0或未指定時,則表示只有在第一次請求的容器才在該servlet調用初始化函數。

  5. 正值越小,servlet的優先順序越高,應用啟動時就越先載入。

  6. 值相同時,容器就會自己選擇順序來載入。

2. javaweb 普通工具類 如何在web啟動初始化時獲取web根目錄,項目中只有spring框架

使用Spring,就可以用一種比較優雅的方式來獲取了。
在web.xml中的<web-app>節點內加入:

<context-param>
<param-name>webAppRootKey</param-name>
<param-value>tansungWeb.root</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.WebAppRootListener</listener-class>
</listener>

然後在普通的Java類中(不是action中),就可以通過System.getProperty("tansungWeb.root")獲取了web根目錄了。
然後再拼湊路徑的時候,最好不要直接使用/或者\,最好使用File.separatorChar

3. java web Service類的初始化問題

UserService ue;

改為
UserService ue = new UserService();

4. java Web 啟動時自動執行代碼的幾種方式

Web容器啟動後執行代碼的幾種方式
其執行順序為:

4===>5===>1===>2===>3
即指定init-method的Bean開始執行
接著實現spring的Bean後置處理器開始執行
然後是Servlet的監聽器執行
再接下來是Servlet的過濾器執行
最後才是Servlet執行

1、實現Servlet監聽器介面ServletContextListener

[java] view plain
public class InitListener implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent context) {

}

@Override
public void contextInitialized(ServletContextEvent context) {
// 上下文初始化執行
System.out.println("================>[ServletContextListener]自動載入啟動開始.");
SpringUtil.getInstance().setContext(
<span style="white-space:pre"> </span>WebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext())
<span style="white-space:pre"> </span>);
}

}
然後在web.xml文件配置該監聽器

[html] view plain
<listener>
<listener-class>com.test.init.InitListener</listener-class>
</listener>

2、實現Servlet的過濾器Filter

[html] view plain
public class InitFilter implements Filter {

@Override
public void destroy() {

}

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException,
ServletException {

}

@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("================>[Filter]自動載入啟動開始.");
// 讀取Spring容器中的Bean[此時Bean已載入,可以使用]
//寫啟動需要執行的代碼
System.out.println("================>[Filter]自動載入啟動結束.");
}

}
然後在web.xml文件配置過濾器即可

[html] view plain
<filter>
<filter-name>InitFilter</filter-name>
<filter-class>com.test.init.InitFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>InitFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>

3、編寫一個Servlet,在web.xml裡面配置容器啟動後執行即可

[html] view plain
public class InitServlet extends HttpServlet {

/**
*/
private static final long serialVersionUID = 1L;

@Override
public void init(ServletConfig config) {
try {
super.init();
} catch (ServletException e) {
e.printStackTrace();
}
System.out.println("================>[Servlet]自動載入啟動開始.");
// 讀取Spring容器中的Bean[此時Bean已載入,可以使用]
//執行想要的代碼
System.out.println("================>[Servlet]自動載入啟動結束.");
}
}

然後在web.xml文件配置該Servlet的啟動方式為:容器啟動後執行
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.test.init.InitServlet</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>test</param-value>
</init-param>
<!-- 此處指定載入順序為2,表明還有優先順序更高的Servlet要先執行 -->
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>InitServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
關於啟動後執行,由load-on-startup指定:
(1)當值為0或者大於0時,表示容器在應用啟動時就載入這個servlet。值越小,啟動優先順序越高;
(2)當是一個負數時或者沒有指定時,表示該servlet被調用時才載入。

4、如果你使用Spring IOC作為Bean管理容器,那麼可以指定init-method其中init-method表示bean載入成功後,立即執行某個方法。配置如下:start為要執行的方法名稱

[html] view plain
<!-- service -->
<bean id="shopService" class="com.test.teach.service.ShopService" <span style="color:#33ffff;">init-method="start"</span>>
<property name="shopDao" ref="shopDao" />
</bean>

5. 發布webservice,java類初始化問題

發布成webservice後,我發現,不管是調用其中的get,set,方法,構造函數都要被調用一次,而且每次get,set里列印的地址也不一樣,怎麼能使得set以後,能get到set的字元串呢?謝謝

這說明每次你調用webservice都會實例化一個Test對象
所以你第二次get調用時 也會觸發構造方法 也就是說這時候的Test已經是一個新的實體類了和你set的時候不是一個對象了

你的需求用一般的servlet就行了 每次用戶通過你開發servlet開遠程式控制制socket伺服器

6. java web項目初始化問題

那就放進Session里唄

7. 為什麼我的電腦不能運行java web start

Java Web Start 是幫助客戶機端應用程序開發的一個新技術,它的獨特之處在於將您從關心客戶機是如何啟動的(從 Web 瀏覽器或是桌面)中解放出來。另外,該技術提供了一個使 Web 伺服器能獨立的分發和更新客戶機代碼的集合部署方案。軟體工程師 Steve Kim 介紹了該新技術(該技術預定將集成進Java 1.4 的最終發行版),並從開發者和用戶的角度進行了描述。您可以在 討論論壇與作者和其他讀者分享您對這篇文章的看法。
在現今的不斷發展的軟體業市場,用戶強烈要求客戶機應用程序不但能運行在台式機環境,還能運行在網際網路。用戶希望他們從基於 Web 的應用程序獲得與從台式機獲得的相同的功能和支持,而且最好是用瘦客戶機介面打包。目前,最通用的解決方案是開發兩個獨立的 Java 應用程序:一個作為台式機應用程序執行,另一個模仿台式機應用程序的多數功能,但是通過 Web 訪問。這對開發者是個負擔,開發者要寫兩個獨立的在不同的執行環境執行相同的功能的應用程序,然而對軟體公司也是個財政負擔,軟體公司被迫為兩個獨立的應用程序提供支持。為緩解該問題,Sun Microsystems 引進了 Java Web Start,它是個使 Java 應用程序可以從台式機或 Web 頁面啟動的客戶機端技術。這消除了為 Web 應用程序開發 Java 支持的需要,而且還提供了一個有效方式來升級、維護和管理任何通用的 Web 伺服器都支持的客戶端的 Java 應用程序。

什麼是 Java Web Start?

Java Web Start 是一個軟體技術,它包含了 applet 的可移植性、Servlet 和 JavaServer Pages (JSP)的可維護性以及象 XML 和 HTML 這樣的標記語言的簡易性。它是基於 Java 的應用程序,允許從標準的 Web 伺服器啟動、部署和更新功能完全的 Java 2 客戶機應用程序。在第一次啟動 Java Web Start 時,用戶可以從 Web 下載新的客戶機應用程序;之後這些應用程序可以通過 Web 頁面的鏈接或(Windows 中的)桌面圖標或「開始」菜單初始化。應用程序在 Java Web Start 下快速初始化,被高速緩存在客戶機,並且可以遠程的離線啟動。另外,因為 Java Web Start 是從 Java 2 技術建立起來的,所以它繼承了 Java 平台的完整的安全性體系結構。

由於 Java Web Start 自身是一個 Java 應用程序,所以該軟體是平台獨立的,並且支持 Java 2 平台的任何客戶機系統都支持該軟體。當客戶機應用程序啟動時,Java Web Start 自動執行更新,在從原來的高速緩存(倘若存在高速緩存)裝入應用程序的同時,從 Web 下載最新的代碼。Java Web Start 還提供了一個 Java 應用程序管理器(Java Application Manager)實用程序,既提供了多種選項,如清除下載的應用程序的高速緩存、指定多種 JRE 的使用、設置 HTTP 代理,還允許最終用戶組織他們的 Java 應用程序。

回頁首

Java Web Start 對 Java 插件

Java Web Start 和 Java 插件的一個共同作用是:允許 Java 程序從任何地方、在任何平台安全運行。兩種 Java 技術都提供了可以啟動和執行 Java 程序的「沙箱(sandbox)」安全環境,還具有高速緩存應用程序和指定使用的 JRE 的能力。Java Web Start 和 Java 插件的根本不同是 Java 插件限於在 Web 瀏覽器環境中運行的 Java applet。Java 插件嚴重的依賴於 Web 瀏覽器的 JRE,並且如果沒有瀏覽器就不能運行。另一方面,Java Web Start 可以在 Web 頁面單擊鏈接或是單擊 Java 應用程序管理器來啟動 Java 應用程序。在 Windows 操作系統中,用戶可以從開始菜單或是只要雙擊桌面圖標來啟動應用程序。如果瀏覽器窗口被關閉,從 Web 瀏覽器啟動的客戶機應用程序不會受到影響。

盡管 Java Web Start 確實支持 Java applet,而且確實包含內置的 Appletviewer,但這個技術的最初目的是啟動和部署 Java 客戶機應用程序。某些約束,如 applet 的策略文件不受支持。

回頁首

用戶觀點的 Java Web Start

Java Web Start 不僅允許開發者開發可從 Web 頁面啟動和執行的應用程序(不只是 applet),還強調了無需任何用戶交互就可以為現存的客戶機代碼提供透明更新的部署方案。為幫助您理解這個過程、幫助您決定是否為與 Java Web Start 的兼容性而開發自己的應用程序,我們將從用戶的觀點來看這個產品。我將從兩個基本的用戶場景(安裝 Java Web Start 和從使用 Java Web Start 的 Web 下載和啟動應用程序)的基本解釋開始。

首次安裝 Java Web Start

Java 插件無需用戶在客戶機安裝任何的應用程序,與 Java 插件不同,Java Web Start 必須要安裝在每台用於從 Web 來啟動 Java 應用程序的客戶機。當用戶試圖用 Java Web Start 啟動一個基於 Web 的應用程序時,Web 瀏覽器將啟動 Java Web Start 從而開始下載適當的文件。

如果 Java Web Start 安裝在本地機的話,那麼需要的應用程序將正常的啟動和進行。另一方面,如果 Java Web Start 還沒安裝,用戶將被提示要下載該程序。一旦用戶同意下載 Java Web Start 並且已經下載了該文件,用戶就必須運行程序來安裝 Java Web Start,如圖 1 所示。

圖 1. 安裝 Java Web Start

在安裝過程中,Java Web Start 安裝程序將判斷在客戶機上是否安裝了 Java 2 環境。如果未安裝,將出現一個安裝對話框,如圖 2 所示。

圖 2. Java Web Start 搜索 Java 2 環境

一旦裝好了 Java Web Start,就必須關閉所有的打開的 Web 瀏覽器。新的 MIME 標記(帶有 jnlp 擴展名)是為 Web 瀏覽器定義的,用於 Web 瀏覽器啟動自身(Web 伺服器)和 Java Web Start 之間的聯系。(JNLP 是 Java Network Launching Protocol 的首字母縮略字。JNLP 文件確定哪些 JAR 文件和資源有助於客戶端的 Java 應用程序。)一旦 Web 瀏覽器被關閉並重新啟動,用戶可以再次單擊相同的鏈接來啟動所要的應用程序。Web 瀏覽器然後將與 Java Web Start 聯系,並且應用程序將開始啟動過程。

「Developer's Guide for Java Web Start」 (請參閱 參考資料)包含能夠查出本地是否安裝了 Java Web Start 的 JavaScript 和 Visual Basic 腳本

用 Java Web Start 啟動應用程序

當用戶首次單擊一個鏈接來啟動一個客戶端的 Java 應用程序時,發生下面的過程:

Web 瀏覽器被指示運行 Java Web Start。
Java Web Start 以啟動閃屏開始
然後 Java Web Start 與指定的 Web 伺服器聯系,並且確定是否為所要的 Java 應用程序下載了所有的文件。
把適當的文件下載到本地機。
Java Web Start 運行下載的應用程序。
在整個安裝和啟動過程中,Java Web Start 與 Java Web Start 應用程序管理器一起提供了一個外觀和感覺一致的界面,同時還向用戶提供了反饋。圖 3 表示了當 Java Web Start 首次試圖啟動一個客戶機 Java 應用程序時出現的窗口。

圖 3. Java Web Start 下載客戶機 JAR 文件

Java Web Start 把一個應用程序下載到了本地機之後,客戶機程序就被執行了。將來,當程序再次從 Java Web Start 啟動時,Java Web Start 將試圖判定客戶機是否有應用程序的最新版本。在此過程中,用戶將可以看到一個與圖 4 所示的相似的窗口。

圖 4. Java Web Start 檢查應用程序的版本

從用戶的觀點來看,該窗口提供了該 Java 應用程序是在啟動過程還是在更新過程的可視化反饋。另外,進度條和文本反饋不僅通知用戶每個過程所需的時間,還讓用戶可以了解更新或啟動什麼時候將完成。這也許是該產品的最有用的特性之一,它可以確保在應用程序的啟動過程的每一步都通知了用戶正在發生什麼。

回頁首

圖形用戶界面(GUI)

應用程序管理器的 GUI (圖形用戶界面)提供了一個簡單的卻合理的界面,該界面允許用戶在啟動應用程序時可以指定多種的選項。每次啟動應用程序管理器時,出現一個閃屏,如圖 5 所示。

圖 5. 應用程序管理器閃屏

一旦閃屏消失,應用程序管理器的主窗口就顯示出來,如圖 6 所示。

圖 6. 應用程序管理器的主窗口

在 Applications 框中,可以看到和啟動所有的從 Java Web Start 啟動的應用程序。在下面的框中,提供了關於選中的 Java 應用程序的附加信息(在圖 6 中,即為 Draw 4),如供應商、可以獲得關於該應用程序的更多信息的主頁以及程序的描述。這條信息是直接從該應用程序的 JNLP 文件(稍後有更多關於 JNLP 的介紹)派生的。

在 File Preferences,有讓用戶調整和校準的多種設置。盡管大多數設置已經由 Java Web Start 自動配置了,但仍然允許用戶覆蓋不同的設置,如代理設置,如下面的圖 7 所示。

圖 7. 應用程序管理器的 Preferences 選項卡

用戶還可以指定當啟動應用程序時使用 JRE 的什麼版本,如圖 8 所示。

圖 8. 指定 JRE

本質上,應用程序管理器的目的在於為管理所有的遵照 Java Web Start 指導方針和策略的應用程序提供了一個統一的實用程序。另外,應用程序管理器允許有經驗的用戶配置一些應用程序設置。這樣免除了一些開發者將在其它方面需要做的工作,比如寫腳本或批處理文件來啟動或配置應用程序。要注意應用程序管理器僅對為 Java 2 平台編寫的而且與 Java Web Start 兼容的應用程序有用,注意到這一點是很重要的。實用程序不能查出駐留在本地機的其它 Java 應用程序。

要考慮的問題

當選擇是否為與 Java Web Start 兼容而開發應用程序時,明智的做法是對用戶體驗做全面考慮。

Java Web Start 必須安裝在每台從 Web 或從 Java 應用程序管理器啟動客戶機 Java 應用程序的機器上。所以,雖然客戶機 Java 應用程序可以從 Web 頁面啟動,但如果最初沒有 Java Web Start 安裝在本地機上的話,該應用程序本身是不能啟動的;這樣 Web 瀏覽器僅提供啟動程序的方便的鏈接 ― 不多不少。
Java Web Start 僅對正確打包的並且依照 Java Web Start 指導方針的應用程序有用。另外,需要 Web 伺服器,而且 Web 伺服器必須正確的配置來解釋 所有的JNLP 和 MIME 標記。所以,除非下載的或是從 Web 啟動的所有的客戶機 Java 應用程序滿足了這些要求,每個客戶機 Java 應用程序才能從 Java Web Start 被啟動和被管理的。

在用戶中也許有點關於 Java Web Start 和 Java 插件的應用程序與 applet 間的不同之處的困惑。用戶可能理解或還不理解為什麼 Java Web Start 能管理和啟動許多的客戶機 Java 應用程序,卻不能與以 Java 插件運行的 Java Applets 建立任何連接,盡管事實是任一程序都可以從 Web 瀏覽器啟動。
對於被要求去為僅僅一個客戶機應用程序而下載 Java Web Start 的用戶來說,可能又認為對一個客戶機 Java 應用程序的執行來說,Java Web Start 應用程序管理器的特性很累贅,安裝過程「麻煩」太多。
Java Web Start 僅能用於為 Java 2 平台編寫的客戶機 Java 應用程序。
當前,Java Web Start 可在 Windows 95/98/NT/2000、Linux 和 Solaris 操作系統上執行。

回頁首

為 Java Web Start 做開發

從開發的觀點,您應該能象為常規的客戶端應用程序一樣能為與 Java Web Start 的兼容性編寫和設計代碼。您應該相對的不用擔心更新現存的客戶機代碼所需的打包問題和變通技術。下面是您在開發和部署 Java Web Start 的客戶端 Java 應用程序時需要依照的一些簡單的規則:

應用程序可以作為針對 Java 2 平台的獨立的應用程序正常的編寫。
如果您的應用程序需要訪問本地系統,那麼 JAR 文件中的每個條目都必須被簽名。
應用程序的所有的文件必須保存在一個 JAR 文件集中,該文件集包含如圖像和聲音文件等資源。
裝入資源(如圖像)的任何訪問都必須使用有類裝載器的 getResource 方法。請參閱下面的使用 getResource 方法示例的清單 1。

清單 1. 使用 ClassLoader 對象從 JAR 文件裝入資源
//Obtain the current classloader
ClassLoader classLoader = this.getClass().getClassLoader();
//Load the company logo image
Image companyLogo = classLoader.getResource("images/companyLogo.gif");

更新應用程序代碼

從 Web 伺服器首次下載一個應用程序時,應用程序的所有的相關的 JAR 文件被下載到了本地機。Java Web Start 將自動決定該把這些文件下載到何處,這是因為預設的安全性協議(如本地磁碟存取)在起作用。下面將進一步討論安全性。

從應用程序開發和維護的觀點來看,Java Web Start 使更新應用程序代碼很容易。因為下載的應用程序的所有文件必須包含在客戶機的 JAR 文件集中,您只需更新存儲在 Web 伺服器的 JAR 文件集。Java Web Start 將根據下面將討論的版本編號方案來決定當應用程序最初被啟動時需要下載和更新客戶機的哪些文件和資源。每次用戶啟動一個應用程序時,Java Web Start 將與包含 JAR 文件集的 Web 伺服器連接,並將下載適當的文件。注意客戶機可以下載的資源僅為 JAR 文件、圖像和 JNLP 文件。

Java Web Start 使用 HTTP 請求來從 Web 伺服器獲得資源文件,並且允許客戶機端 Java 應用程序從代理伺服器或防火牆後執行。最初,Java Web Start 將既使用通用的代理自動配置腳本也試著檢測本地機的預設 Web 瀏覽器中定義的代理設置。如果需要附加信息,可用應用程序管理器使用 Preferences 部分來指定埠和代理。

回頁首

Java Web Start 的核心:JNLP

為使 Java 應用程序能用 Java Web Start 執行,您必須為應用程序創建一個 Java 網路語言協議(Java Networking Language Protocol,JNLP)文件。JNLP 是一個為應用程序提供基本的元素和描述的 XML 文件。JNLP 符合規范號為 JSR 000056(請參閱 參考資料)的 Java Community Process (JCP)。

JNLP 文件的目的如下:

指定從 Web 伺服器下載的 JAR 文件
提供其它的可能的包需要
指定系統屬性
考慮到任何必要的運行時參數
指定使用哪個版本的 Java 2 平台
JNLP 文件的一個示例

JNLP 文件以一種與 Web 瀏覽器相似的方式(僅用 URL 而不是特定的文件名)來獲得並定位文件。清單 2 表示了 JNLP 文件的一個示例。

清單 2. JNLP 文件的一個示例:clientApp.jnlp
<?xml version="1.0" encoding="UTF-8"?>
<jnlp codebase=http://www.companySite.com/javaApp>
<href="clientApp.jnlp">
<information>
<title>This is my company's Java client application</title>
<vendor>Company name</vendor>
<icon href="companyLogo.gif"/>
<homepage ref="reference/tips.html">
<offline-allowed/>
</information>
<resources>
<j2se version=1.3/>
<jar href="companySong.jar" part="music" download="lazy"/>
</resources>
<resources os="Windows"/>
<nativelib="windowIconsForWindowOS.jar" part="windowIcons"
download="eager"/>
<application-desc main-class="com.company.ui.Client"/>
<security>
<all-permissions/>
</security>
</jnlp>

清單 2 的注釋

接下來對 JNLP 文件的示例的評述也許在您創建自己的文件時對您有所幫助:

第一行,您可以看到文件的編碼是 UTF-8 字元編碼。所以,當編輯 JNLP 文件時,最終文件要用與 JDK 一起提供的 native2ascii工具轉換來確保文件的編碼正確。

jnlp codebase 屬性用於在 JNLP 文件中指定所有的相關 URL。 href 屬性設置(要求的)是為了讓應用程序並入 Java Web Start 應用程序管理器。

information 標記(如 title、vendor 等)用於提供來自 Java Web Start 應用程序管理器的關於應用程序的附加信息。 homepage ref 屬性是專門用於指向 Web URL 從而用戶可以去提供了關於應用程序的更多的信息的 Web 頁面。最有趣的 information 標記是 offline-allowed 屬性;該屬性決定了客戶機 Java 應用程序是否能離線啟動。當離線運行客戶機 Java 應用程序時,Java Web Start 將繼續判定來自 Web 伺服器的最新的文件;在多數情況下,這個方案將引起快速的超時(因為位置被指定要離線啟動),並且應用程序從本地高速緩存啟動。

resource 標記考慮到 JNLP 文件指定應用程序使用哪些 JAR 文件和如何下載 JAR 文件;即,是急切的還是不緊不慢的。這個特性在當用戶要下載大量的文件而對用戶來說不是所有的文件都是客戶機執行所需要的時是非常有幫助的。預設的,多數資源是急切的下載的,在這樣情況下,JAR 文件和資源在應用程序啟動前被下載。不緊不慢的下載的資源只有當 Java 虛擬機(JVM)觸發從應用程序載入資源或文件時才被下載。不緊不慢的下載資源的一個示例是客戶機的幫助文件;考慮到了客戶機的更快的啟動和執行,只有在用戶實際上向客戶機請求幫助文件時,才會下載這些文件。然而,一旦用戶請求了一個幫助文件,在請求過程中適當的 JAR 就會被下載,並伴有一個通知用戶大致的下載時間的窗口。
JNLP 文件中最後一個有趣的標記是 security 屬性。預設的,任何從 Java Web Start 客戶機啟動的 Java 應用程序在一個安全的、受限制的環境執行,該環境中不允許進行本地文件訪問、與其它計算機的網路連接等等。然而,對於要對客戶機和網路可以完全訪問的特性豐富的客戶機來說, all-permissions 值是用於給予客戶機完全訪問的許可權的。為具有對本地機的完全訪問,Java 應用程序所使用和裝入的所有 JAR 文件和資源必須被數字簽名。安全性將在下面將進一步討論。

回頁首

JNLP 和 WAR 文件

為與應用程序相關的 JNLP 文件和 JAR 文件提供更加方便有效的打包方案,Java Web Start 使 Web 壓縮文件(WAR)的分發成為可能。WAR 文件是一個目錄結構,它包含了一個與 JNLP 文件和 JAR 文件一起打包的 servlet,從而使整個包能夠方便的在 Web 伺服器上部署。該 servlet 自身被打包在 jnlp-servlet.jar 文件里,包里還有 JnlpDownloadServlet 類作為主要的執行 Java 類,這個類將負責不同的任務,如:

生成 JARDiff 文件
根據 WAR 文件中的每個文件或每個目錄進行版本編號
支持 JNLP 文件中定義的下載協議
自動安裝 URL 到 JNLP 文件,從而免除對開發者要進行硬編碼 URL 的要求。
為了從 Java Web Start 啟動應用程序,把應用程序和 WAR 文件打包在一起並非必需。然而,WAR 文件的加入可以改善存儲在 Web 伺服器的文件的管理和升級。WAR 文件的主題對於本文的范圍來講實在是太冗長了。請參閱 參考資料來獲得與附加信息的聯系。

回頁首

Java Web Start 中的版本變化

到目前為止,我們已經討論了想要實施 Java Web Start 的開發者和用戶所需的整體的部署和管理技術。在我們深入前,我要概括一下到目前為止我所講到的部署的步驟。

應用程序所用的文件存儲在 JAR 文件。
必須創建一個 JNLP 來通知 Java Web Start 應用程序使用哪些 JAR 文件、如何下載必要的文件等。
一個標準的 Web 伺服器被配置來接受被 Java Web Start 理解的 MIME 類型。
JAR 文件放在了 Web 伺服器上。
用戶需要下載和安裝 Java Web Start(僅一次)。
用戶首次運行應用程序;JAR 文件被下載並執行。
用戶可以再次運行應用程序,從 Java Web Start 應用程序管理器或 Web 頁面啟動。Java Web Start 將下載需要更新的全部文件,並且然後將啟動應用程序。
從技術角度來說,這個總結可能會引發問題:Java Web Startf 是如何決定哪些文件是有必要更新的呢?答案很簡單:JNLP 文件。一個有版本標識的唯一的 URL與每個 JNLP 文件中定義的資源相關聯。如清單 3 所示。

清單 3.JNLP文件中的一個基於版本的 JAR 文件的示例
<jar href=http://www.companySite.com/javaApp/imageFiles.jar
version="1.1+">

當啟動了一個應用程序時,Java Web Start 檢查 JNLP 文件並創建一個有 URL 和版本標識的 HTTP GET 請求。如果沒有 version 屬性,那麼 Java Web Start 就只是創建一個 JAR 文件的 HTTP GET 請求。Java Web Start 檢查 Web 伺服器的響應狀態代碼和 MIME 類型來決定此 JAR 文件是否有更新的版本。

JNLP 文件還允許使用 JARDiff 實用程序來遞增的更新 JAR 文件。 JARDiff 實用程序能只下載 JAR 文件中的特定文件(不是整個 JAR 文件本身),這樣使下載更快。請參閱 參考資料來獲得關於決定 JNLP 文件配置的更多信息。

回頁首

安全性

也許在決定是否為了與 Java Web Start 兼容而開發應用程序時,需要考慮的最重要的問題就是安全性。Java Web Start 允許客戶端 Java 應用程序訪問各種本地機資源,如文件訪問、剪貼板訪問等。源自 Java 2 平台,該產品繼承了該平台的安全性體系結構。如前面提到的,在 JNLP 文件中定義的 security 屬性決定了當應用程序通過 Java Web Start 啟動時所能有的安全性級別。預設的,使用受限環境,為應用程序授權對網路和本地機的有限的訪問。如同使用 applet 沙箱(sandbox),這樣可以保證惡意的應用程序不能造成任何破壞。

Java Web Start 的安全性的另一重要元素是數字簽名的使用。當啟動或更新一個應用程序時,它的 JAR 文件被下載到客戶機。Java Web Start 用那些文件中的數字編碼來判定在對文件初始簽名之後,是否有 JAR 文件已經被修改或改變。如果有不一致的或是文件尚未被簽名,應用程序就不能從 Java Web Start 啟動。正確簽名的應用程序可以訪問本地機。

用戶授權安全性

當運行要對本地機無限制訪問的應用程序時,用戶最初將看到一個對話框,該對話框說明了應用程序的出處或供應商,並且允許用戶給應用程序授予額外的許可權。此外,當應用程序要求使用本地機的資源並且還沒有被簽名的 JAR 文件時,Java Web Start 將允許用戶通過一個 Security Advisory 對話框顯式的授予應用程序訪問許可權。例如,如果客戶機 Java 應用程序需要能把信息粘貼到 Windows 操作系統剪貼板工具,將出現一個與圖 9 相似的對話框。

圖 9. 應用程序試圖訪問剪貼板的 Security Advisory 對話框

當應用程序試圖訪問客戶機的本地資源(如文件系統)時,將出現另外的對話框窗口,如圖 10 所示。

圖 10. 應用程序試圖訪問文件系統時的 Security Advisory 對話框

用戶可以在以下方面授予應用程序對本地機的訪問許可權:

在本地機存儲應用程序的當前狀態
查看本地文件的內容
保存文件到本地機
本地機打開文件
在本地機對隨機存取文件讀/寫
從本地機列印
JNLP API 庫中的很多的類允許開發者在不可靠的環境使用系統的資源,由用戶來負責決定操作是否是允許的。

8. 在基於spring搭建的java web應用中,是通過什麼方式觸發spring的初始化過程的

前段時間在公司做了一個項目,項目用了spring框架實現,WEB容器是Tomct 5,雖然說把項目做完了,但是一直對spring的IoC容器在web容器如何啟動和起作用的並不清楚。所以就抽時間看一下spring的源代碼,藉此了解它的原理。
我們知道,對於使用Spring的web應用,無須手動創建Spring容器,而是通過配置文件,聲明式的創建Spring容器。因此在Web應用中創建Spring容器有如下兩種方式:
1. 直接在web.xml文件中配置創建Spring容器。
2. 利用第三方MVC框架的擴展點,創建Spring容器。
其實第一種方式是更加常見。為了讓Spring容器隨Web應用的啟動而啟動,有如下兩種方式:
1. 利用ServletContextListener實現。
2. 利用load-on-startup Servlet實現。
Spring提供ServletContextListener的一個實現類ContextLoaderListener,該類可以作為Listener 使用,它會在創建時自動查找WEB-INF下的applicationContext.xml文件,因此,如果只有一個配置文件,並且文件名為applicationContext.xml,則只需在web.xml文件中增加以下配置片段就可以了。

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
如果有多個配置文件需要載入,則考慮使用<context-param...>元素來確定配置文件的文件名。ContextLoaderListener載入時,會查找名為contentConfigLocation的初始化參數。因此,配置<context-param...>時就指定參數名為contextConfigLocation。
帶多個配置文件的web.xml文件如下:

<context-param>
<param-name>contextLoaderListener</param-name>
<param-value>
WEB-INF/*.xml, classpath:spring/*.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
多個配置文件之間用「,」隔開。

下面我們來看它的具體實現過程是怎樣的,首先我們從ContextLoaderListener入手,它的代碼如下:

public class ContextLoaderListener implements ServletContextListener
{

private ContextLoader contextLoader;

/**
* 這個方法就是用來初始化web application context的
*/
public void contextInitialized(ServletContextEvent event)
{
this.contextLoader = createContextLoader();
this.contextLoader.initWebApplicationContext(event.getServletContext());
}

/**
* 創建一個contextLoader.
* @return the new ContextLoader
*/
protected ContextLoader createContextLoader()
{
return new ContextLoader();
}
................

}

9. 安裝了jdk後,會有一個可執行文件,叫:java web start,這個有什麼用的

Java Web Start 是一個軟體技術,它包含了 applet 的可移植性、Servlet 和 JavaServer Pages (JSP)的可維護性以及象 XML 和 HTML 這樣的標記語言的簡易性。它是基於 Java 的應用程序,允許從標準的 Web 伺服器啟動、部署和更新功能完全的 Java 2 客戶機應用程序。在第一次啟動 Java Web Start 時,用戶可以從 Web 下載新的客戶機應用程序;之後這些應用程序可以通過 Web 頁面的鏈接或(Windows 中的)桌面圖標或「開始」菜單初始化。應用程序在 Java Web Start 下快速初始化,被高速緩存在客戶機,並且可以遠程的離線啟動。另外,因為 Java Web Start 是從 Java 2 技術建立起來的,所以它繼承了 Java 平台的完整的安全性體系結構。

更詳細的可以看IBM的介紹
http://www.ibm.com/developerworks/cn/java/j-webstart/

10. javaweb項目,tomcat啟動異常報錯,spring文件初始化問題,大神help

根據你提供的信息推斷:在linux機器上缺少spring相關的jar包,仔細和本地機器上的jar包對比以下。
另外就是看下web.xml文件的配置:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>