在 xfire中使用 GZip來 壓縮 傳輸量




在 xfire中使用 GZip來 壓縮 傳輸量

在 xfire中使用 GZip來 壓縮 傳輸量

在XFire1.2以後支持SOAP消息的GZip壓縮傳輸,在合適的地方啓動GZip壓縮可以減少網絡傳輸的數據量,加快速度。

在XFire中啓動GZip壓縮要用到一個開源的Filter:PJL Compressing Filter。這個Filter的最新版本是,自1.5.0開始該工程開始構建於JDK5.0,因此在JDK1.4環境下只能使用1.4.6(這個版本會與高版本同步更新)。[http://sourceforge.net/projects/pjl-comp-filter/]

一、服務端啓動GZip:在服務端啓動GZip只需將PJL Compressing Filter下的jar包(用到的)導入到web的/WEB-INF/lib目錄下。並在web.xml文件中增加如下配置:

       <filter>

              <filter-name>CompressingFilter</filter-name>

              <filter-class>

                     com.planetj.servlet.filter.compression.CompressingFilter

              </filter-class>

              <init-param>

                     <param-name>debug</param-name>

                     <param-value>false</param-value>

              </init-param>

              <init-param>

                     <param-name>statsEnabled</param-name>

                     <param-value>true</param-value>

              </init-param>

       </filter>

       <filter-mapping>

              <filter-name>CompressingFilter</filter-name>

              <url-pattern>/*</url-pattern>

       </filter-mapping>

代碼清單7-1:服務端加入GZip時web.xml中增加的配置

注:根據web.xml文法定義,這個定義必須位於servlet定義之前。

二、客戶端啓用GZip:客戶端啓動GZip只要將客戶端的GZip的屬性設爲true卻可。代碼如下:

              String serviceURL = "http://192.168.0.225/ldaxfire/services/LDAService";

              // 創建service對象

              Service serviceModel = new ObjectServiceFactory().create(

                            ServiceInterface.class, null, "http://test.yicha.cn/adreport", null);

              XFireProxyFactory serviceFactory = new XFireProxyFactory();

              // 獲取服務對象

              ServiceInterface service = (ServiceInterface) serviceFactory.create(

                            serviceModel, serviceURL);

              // 獲取客戶端代理

              Client client = ((XFireProxy) Proxy.getInvocationHandler(service))

                            .getClient();

              // 啓動response壓縮

              client.setProperty(CommonsHttpMessageSender.

                            GZIP_RESPONSE_ENABLED, Boolean.TRUE);

              // 啓動request壓縮

              client.setProperty(CommonsHttpMessageSender.

                            GZIP_RESPONSE_ENABLED,Boolean.TRUE);

              // 同時啓動response和request壓縮

              client.setProperty(CommonsHttpMessageSender.GZIP_ENABLED,

                            Boolean.TRUE);

              // 忽略超時

              client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, "0");

              // 調用服務

              data = service.serviceMethod();

代碼清單7-2:客戶端調用的修改

注:在同時啓用時,不必再分別啓用response和request的GZip壓縮。

注意,當服務端沒有啓用GZip,客戶端啓用請求GZip壓縮時,會產生SOAP解析錯誤,如果服務端啓動了GZip壓縮功能,客戶端是否啓用GZip都沒有影響。

發佈了19 篇原創文章 · 獲贊 6 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章