Google Prettify

2014-10-14

常用的Framework組態─宣告


其實想寫這篇很久了。 這主要算是個人的一個筆記文,因為每每在產生新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規格位置。強烈建議有最好,但可以不需要。
  • 版本。這是本篇的重點。*

什麼是namespaceNamespace 一般翻譯為命名空間,以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)), 這些都要相互搭配才行。

沒有留言 :

您或許對這些有興趣

Related Posts with Thumbnails

最後

謝謝您的閱讀,希望您可以有豐富的收獲。