其實想寫這篇很久了。 這主要算是個人的一個筆記文,因為每每在產生新project時,總要為一些 configuration去到處查一些資料,所以一直很想將這些configuration放在一塊,以方便查詢。 當然不是只有記錄framework如何configuration,也會或多或少加一些延伸的說明。
為了不讓讀者一下吸收太多東西,本篇先放一些framework標頭的宣告。
各種xml的宣告
web.xml
3.0
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
2.5
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
2.3
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
JSF
2.0
JSF 2.0版以上可以不用產生設定檔,但我建議還是要有一個,好處多多。
<?xml version="1.0" encoding="UTF-8"?>
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
1.2
<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
version="1.2">
Spring
3.5
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.5.xsd">
3.2
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
2.5
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
2.0
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
詳細說明
寫Java 網頁的人都知道,一個網站一定有個web.xml
的設定檔,用以設定整個網站所有大大小小的事,例如session什麼事候過期、這個網站使用什麼framework。 一般人在學習如何設定web.xml
的時候,都著重在如何做這些設定,可能很多人都沒留意到在web.xml的一開始的一些宣告的用處。
這邊我用 web.xml當例子來說明。
最簡單的web.xml 是這樣…
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0" >
...
</web-app>
第一行是文件編碼的宣告。 使用UTF-8
可以讓你額外輸入中文註解,也是建議的編碼格式。 當然,如果你宣告UTF-8
,檔案本身卻是採用MS950
,當然會出事。
第二行開始是xml的根元素。 以這種方式宣告的XML是採用XSD
規格。相對於XSD規格,較舊的規格是採用DTD。web.xml 2.3版就是採用DTD
的宣告方式。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
可以看到一些相關的文件規格描述並不放在根元素之中。
這些宣告主要在描述一些事:
- Namespace與其縮寫。當然必需獨一無二。
- XML規格位置。強烈建議有最好,但可以不需要。
- 版本。這是本篇的重點。*
什麼是namespace
? Namespace
一般翻譯為命名空間,以Java來說像是package的用處。 比方說如果就一個,Enum
來說,有了namespace
,我們可以很清楚的知道這一個 Enum
,它指的是java.lang
裡的Enum
還是org.apache.commons.lang.enum
裡的Enum
。
特別要注意的事
Spring是使用到比較多個namespace的configuration,其他的大多是一個namespace就搞定。 在Spring的宣告當中,如果有用到相關的功能,就必需在一開始宣告相關的namespace,例如像範例中的AOP。 當然,如果其他的configuration,也有使用到其他namespace的功能的話,也需要在一開始就進行相關的namespace宣告。
這些宣告為什麼如此重要?
在一般常用的Tomcat上,這些宣告或許不會產生一些Exception
或是導致系統無法運作,但是在符合EJB的container上,十之八九會出事。宣告、Container的版本、使用的framework版本、實際實作的版本(例如明明宣告使用servlet 2.3,卻在jsp中直接使用EL許法,(servlet 2.5才支援可以直接在JSP中使用EL)), 這些都要相互搭配才行。
沒有留言 :
張貼留言