1. 程式人生 > >Java Web不能不懂的知識

Java Web不能不懂的知識

img 圖片 編譯 tro 業務邏輯 web應用 字符編碼 部分 ria

1、傳說中java的class文件可以一次編譯到處運行,那麽源代碼采用GBK還是UTF-8會有影響麽?

不會有影響。

因為Java源代碼通過編譯後,生成的class文件為字節碼。它可以被看作是包含一個執行程序的二進制文件,需要在JVM進行執行。

而GBK、UTF-8等為字符編碼格式,針對的是字符,如Java源代碼。

2、如果lib有2個不同版本的jar,例如spring2.5,spring3,還能安心幹活麽?

可能會引起jar包沖突。

Tomcat下Jar包加載順序:

1. $java_home/lib 目錄下的java核心api 

2. $java_home/lib/ext 目錄下的java擴展jar包

3. java -classpath/-Djava.class.path所指的目錄下的類與jar包

4. $CATALINA_HOME/common目錄下按照文件夾的順序從上往下依次加載

5. $CATALINA_HOME/server目錄下按照文件夾的順序從上往下依次加載

6. $CATALINA_BASE/shared目錄下按照文件夾的順序從上往下依次加載

7. 我們的項目路徑/WEB-INF/classes下的class文件

8. 我們的項目路徑/WEB-INF/lib下的jar文件

在同一個文件夾下,jar包是按順序從上到下依次加載
由ClassLoader的雙親委托模式加載機制我們可以知道,假設兩個包名和類名完全相同的class文件不再同一個
jar包,如果一個class文件已經被加載java虛擬機裏了,那麽後面的相同的class文件就不會被加載了。

3、如果classes有個class文件不小心被打到jar包去,遺忘在lib目錄,以後更新classes會不會炸了?

不會有影響,因為class文件會先加載。當新的class文件更新至classes文件夾內以後會被先讀取。

4、log4j.xml放到conf目錄會有問題麽? 有什麽區別沒有?

log4j啟動時,默認會尋找source folder下的log4j.xml配置文件,若沒有,會尋找log4j.properties文件,加載配置。配置文件放置位置正確,不用在程序中手動加載log4j配置文件。如果將配置文件放到了config文件夾下,在build Path中設置下就好了。

技術分享圖片

讀取路徑改為:

PropertyConfigurator.configure("config/log4j.properties");

5、有人寫了個Niubility的類放在yy.war, 為什麽我就調用不到呢,明明同一個貓上跑的?

Tomcat不支持跨應用調用類,但是允許跨應用訪問數據。在tomcat下,context元素有一個crossContext屬性,如果配置為true,則可以實現在同一個tomcat下的多個web應用之間實現ServletContext對象訪問。

6、聽說有servlet3支持異步可厲害了,但放個demo到tomcat6會掛了,我lib明明有高大上的servlet-api.jar?

技術分享圖片

7、聽說web.xml裏邊可以配置監聽器listener,但它監聽什麽?

Servlet的監聽器Listener,它實現了javax.servlet.ServletContextListener 接口,由服務器端程序實現相關業務邏輯,包括做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。

隨web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷毀。也就是說,它能捕捉到服務器的啟動和停止,在啟動和停止觸發裏面的方法做相應的操作!
它必須在web.xml 中配置才能使用。

web.xml 的加載順序是:context-param -> listener -> filter -> servlet

8、為什麽不建議把jsp放在war的根目錄下?

因為war的根目錄下文件可以直接通過url直接進行訪問。那麽用戶可以在不具備權限的情況下,可以對jsp文件進行訪問,看到部分相關內容。

Java Web不能不懂的知識