Archive

‘JAVA’ 分類過的Archive

Tomcat網頁GZIP壓縮設定

2010年4月16日 尚無評論

相信絕大部份的程式設計師,內心都會有一個小小的願望,就是自己寫的系統可以給很多人使用,當系統愈有名氣時,自己就愈高興,不過或許這也是另一個考驗的開始…..

當多人使用系統時,除了程式要寫的好之外,系統的硬體等級、應用系統伺服器的調校、資料庫參數的調校等當然還有頻寬的限制等,都是會影響你系統運行時的品質,上述要點,一個出了問題,就算你其它的設定再好,也沒啥鳥用,但當都一一調整後,你的系統還是出現負擔過重時,在有限的資源無法擴充之下,就只能吹毛求疵從各項再去下手。本次要和大家介紹的網站設定GZIP壓縮設定,就是一般常會忘了可以這樣設定,並且這樣的設定可以大幅改善頻寬的使用,經小弟的測試,一般一個圖文並貌的網站,總共約可以減少至少一半以上的大小,這樣你頻寬瞬間可以大幅度支援更多使用者,就讓我快點告訴大家這個好用的設定吧。

先說明一下什麼是網頁GZIP壓縮設定,因為目前網頁都是以原始碼的模式進行傳遞,再藉由瀏覽器去直譯產出你看到的網頁,所以當你看到網頁原始碼時,都是一些如何呈現的語法,如果我們先將網頁原始碼壓縮後再傳輸,到了瀏覽者的電腦上再解開,這樣就可以簡省很多傳輸的頻寬。而網頁原始碼這種純文字格式的檔案,壓縮起來非常有成就感,因為裡面太多空白及相同的字眼,所以一般壓起來,都可以壓縮到只剩下十之一以下的容量,這樣就能快速傳送網頁資訊。

目前有支援GZIP的瀏覽器非常眾多,包含IE、Firefox、chrome等目前市佔率極高的瀏覽器都有支援,所以等於九成以上的瀏覽者都可以適用,這次我們就來說說JAVA WEB APPLICATION Tomcat如何設定 GZIP壓縮傳輸設定,首先我們開啟Tomcat/conf/server.xml,找尋以下設定

<Connector port=”8080″ maxHttpHeaderSize=”8192″
  maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
  enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
  connectionTimeout=”20000″
  disableUploadTimeout=”true” />

這主要是設定Tomcat系統在運行時的一些參數,包含監聽的Port、同時最大接受的request等,其實還有很多參數可以設定,當然包含了GZIP的壓縮設定,所以我們可以在此加上以下參數

  compression=”on”  
是否啟用壓縮機制

  compressionMinSize=”2048″ 
設定壓縮檔案最小的size,單位是Bytes,所以預設值為2K,這裡的意思是當檔案超過2K時才會進行壓縮

  noCompressionUserAgents=”gozilla, traviata”
設定不支援的瀏覽器就不使用壓縮

  compressableMimeType=”text/html,text/xml”
設定要壓縮的contextType為何,除了html及xml之外,還可以多設定一些也是原始碼的檔案例如text/css,text/javascript等,讓css及javascript的檔案也能壓縮傳輸,至於一些圖檔及已經壓縮過的檔案建議不要設進來,因為圖檔一般都已經有壓縮過了,如果將一些壓縮過的檔案再壓,除了浪費時間外,搞不好檔案還會愈壓愈大喔

所以我們就趕快設定看看是否有改善,加入上述壓縮的設定後,參數如下:

<Connector port=”8080″ maxHttpHeaderSize=”8192″
  maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
  enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
  disableUploadTimeout=”true”
  connectionTimeout=”20000″
  compression=”on”
  compressionMinSize=”2048″
  noCompressionUserAgents=”gozilla, traviata”
  compressableMimeType=”text/html,text/xml”/>

除了Tomcat可以這樣設定外,如果你有使用Apach也可以很容易設定GZIP壓縮設定,如果有興趣,請去找孤狗大師問問題吧!!

Categories: JAVA Tags: ,

如何找尋電腦唯一值 for Java

2010年1月11日 尚無評論

最近有需要找到電腦的唯一值來處理 (就是要如何鎖主機啦)

首先,能當一台電腦的唯一值(unique id) 應該就是主機版的ID,CPU ID,及網路卡的MAC
在JAVA API 裡翻了很久,就是找不到有這類型的資訊,頂多只能拿到相關的環境變數

在網路上找了一些方式,果然,現行JAVA標準的API 似乎是沒有提供這資訊
整理好分享給大家

如果就只要找到唯一值,最完整的解決方式,可以參考
http://johannburkard.de/software/uuid/

他提供的元件,就是實作各平台如何取到電腦的唯一值,所以只要用一種方式
就可以在各平台上運行,這也是JAVA的宗旨呀!!

不過,他使用的似乎是網卡的MAC,如果電腦換了網卡似乎就出了問題
所以如果很在意的,就只能用CPU ID 或是主機板 ID 來當唯一值

如果是主機板ID,以下有兩篇文篇是有提到如何查到這ID,不過都要透過其它的程式取得
1.這篇寫的很完整,連JAVA Code都有了,就是呼叫一隻vbs幫忙取得資計
http://www.rgagnon.com/javadetails/java-0580.html

不過要注意,這vbs程式只適用32 bit 的windows平台,所以非所有的windows 都可以使用,所以要使用前請評估細。

2.這篇是提到在.NET時如何取得CPU ID 及主機板 ID,變的更簡單了就像下SQL 指令一樣。不過,如要讓JAVA透過此方式取得這些資訊,就要再多花點時點做API了而且還要先裝.Net Framework才行
http://codeglobe.blogspot.com/2009/02/how-to-retrieve-processoridmotherboard.html

上述只能在windows 平台上運行正常,如果你的程式只在windows上運行就沒什麼差別
但如果你的程式是想跨平台執行的,就可能自己要再多花些工夫啦

而再來要介紹有一GNU License 套件 可以在其它平台取得相關所需的資訊,就是dmidecode,目前他支援的平台如下:

  • Linux i386, x86-64, ia64
  • FreeBSD i386, x86-64
  • NetBSD i386, x86-64
  • OpenBSD i386
  • BeOS i386
  • Cygwin i386
  • Solaris x86

  • 該官網在此
    http://www.nongnu.org/dmidecode/ ,他可以取得的系統資訊約有39 種,列表如下:

  • Type   Information
          —————————————-
             0   BIOS
             1   System
             2   Base Board
             3   Chassis
             4   Processor
             5   Memory Controller
             6   Memory Module
             7   Cache
             8   Port Connector
             9   System Slots
            10   On Board Devices
            11   OEM Strings
            12   System Configuration Options
            13   BIOS Language
            14   Group Associations
            15   System Event Log
            16   Physical Memory Array
            17   Memory Device
            18   32-bit Memory Error
            19   Memory Array Mapped Address
            20   Memory Device Mapped Address
            21   Built-in Pointing Device
            22   Portable Battery
            23   System Reset
            24   Hardware Security
            25   System Power Controls
            26   Voltage Probe
            27   Cooling Device
            28   Temperature Probe
            29   Electrical Current Probe
            30   Out-of-band Remote Access
            31   Boot Integrity Services
            32   System Boot
            33   64-bit Memory Error
            34   Management Device
            35   Management Device Component
            36   Management Device Threshold Data
            37   Memory Channel
            38   IPMI Device
            39   Power Supply

    如果有需要的人,請自行找Google大師查詢一下囉!!
    在此要特別說一下,如果你下 –t 是出現 「  No such file or directory 」就是你Linux 老舊啦,小弟的測試Linux平台就是太舊了,預設這個套件的版本太舊不認得 type 參數,請自行上網下載make就可以啦!!

  • Categories: JAVA Tags: , ,

    JSP EL pageScope的探討

    2009年12月27日 2 則評論

    在瞭解JSP EL 時,對於pageScope是比較有疑問的
    在實測後及上網查了相關文章,發現蠻多人都跟我有一樣的誤解

    首頁,EL  提出了數種使用範圍及生命週期不同的 EL隱含物件
    針對pageContext就提出了pageScope,requestScope,sessionScope,applicationScope

    一般大家除了pageScope之外的3個Scope,都能很容易理解,就分別同於基本script運用的request, session, application的getAttribute method ,但就pageScope而言,小弟第一印象以為就是JSP宣告的變數值
    如果你和小弟一樣有此看法,那就錯了…=.=||

    基本上,宣告的變數值是不能在EL中使用的(如可以請一定要指導一下小弟),要宣告pageScope就要使用

    pageContext.setAttribute(“key”, “this is a page value” , pageContext.PAGE_SCOPE);

    這樣才能設定成功,在此寫上一篇,讓也有同樣誤解的人,可以少花點時間

    Categories: JAVA Tags: , ,

    Eclipse 3.5 特性說明

    2009年12月9日 尚無評論

    近日才發現自已常用的Eclipse工具似乎已經好久沒更新了,去看了一下版本才發覺目前使用的版本在3.3左右

    而到Eclipse官網查看一下,原來在2009年6月底 已經出到3.5了 (匿稱叫做Galileo , 伽利略) ,而先前版本的發佈歷程如下:

    2006年6月30日:Callisto(卡利斯托,3.2)
    2007年6月29日:Europa(歐羅巴,3.3)
    2008年6月25日:Ganymede(蓋尼米得,3.4)

    當然資訊人的特點就是要使用新版本,不管好不好用,新版的就是對了啦~哈~~哈
    不過在使用前,還是查詢了一下3.4 及3.5到底改了什麼,不然等換了之後 原本的功能不能用再加上效能變差就糟糕了!!

    3.4 Version 新特性(網路最多人介紹的)

    • 已將SVN列入Collaboration的支援,這需要透過內建的Software Updates and Add-ons手動加裝SVN Team Provider
    • Plug-in Spy:在任何界面下按Alt+Shift+F1 ,就可以看到Eclipse用來實現當前選中界面的類別。
    • 麵包屑(breadcrumb):其實就是當前類別到專案(project)的路徑,其中包括包和文件夾。另外,使用者還可以自由地在同一路徑下的某個節點處,縱向切換到其他元素
    • 快速協助(Quick Fix and Quick Assist) :針對有問題的代碼,只要鼠標移動上去,就能提示解決方案信息;只要在任何代碼處,按 ctrl + 1,就有可能出現相關的提示,預測你的下一步動作。
    • 按保存時,自動格式化代碼(分格式化全文和格式化修改的代碼),省略了要再按ctrl + shift + f 。
    • 當前元素的反白高亮功能,根據元素是被引用還是賦值(讀或寫),來 區分 不同的顏色 。
    • annotation 增強了註釋的格式化
    • Junit 支持對線程內每個方法的調用時間輸出
    • 在outline裡,支持對同一個類別中,方法的重排序
    • 查找某個元素的調用層次,支持更多,更細的內容,包括成員變量訪問等,call hierarchy
    • 更多的搜索選項
    • 加強了debug 變量查看功能,不需要再按 ctrl + shift + i 來查看變量的值
    • 新增模擬服務端監聽的debug功能
    • 更清晰轉換jar包到插件項目:為了鼓勵eclipse插件開發用戶,不要使用已經被嵌套在其他項目裡的jar包

    3.5 Version 新特性(網路最多人介紹的)

    • 平台及UI

      • Solaris x86已經加入支持行列
      • Install New Software嚮導中的「Work with:」下拉框現在支持自動補全
      • 增加了一個新的介紹主題,叫做「Slate」
      • 打開的編輯器及多編輯器頁面間的切換更加容易(快捷鍵:Ctrl+PageDown/Ctrl+PageUp,Alt+PageDown/Alt+PageUp)
      • 為了快速關閉,現在可以安全地跳過清楚歷史這一步驟
      • 至於編輯器的常規提示框和對話框,或當前工作台窗口、表單現在可以在Mac Cocoa上使用
      • 應用程序在打印過程中或打開打印對話框時,可以選擇portrait或landscape模式
      • Eclipse富客戶端平台現在包含了一個OSGi聲明式服務(Declarative Services——DS)的實現
      • 你現在可以針對給定選項「釘住」屬性視圖
      • 一個新偏好頁,可以管理用於選擇工作區的啟動提示框
      • About對話框現在提供一種機制,讓plug-in可以給平台about對話框提供安裝頁面
      • Install New Software嚮導現在無需等待連接任何更新服務器就可以立即打開
      • 雙擊垂直折疊線(vertical folding line)可以折起折疊區域
      • 比較編輯器有幾處增強
      • 你現在可以在Debug視圖中快速切換掛起線程
      • 支持Cocoa和Cocoa上的OpenGL
      • 增加對FileTransfer類的支持,使得可以在Explorer和Nautilus文件管理器之間進行copy/paste操作
      • 對項目瀏覽器作出幾項改進
      • 文本編輯器現在支持塊選擇模式(也就是按列選擇或矩形塊選擇)
      • 你現在可以直接在Synchronize視圖中應用一個補丁
      • 在Eclipse中比較Word文檔變化,現在使用該Word比較功能支持把變化顯示為修訂

      Equinox

      • 增強Equinox DebugOptions API,以支持選項設置的動態變化
      • 增加一個新的debug跟蹤API——org.eclipse.osgi.service.debug.DebugTrace,以增強並簡化編寫debug跟蹤信息
      • OSGi R4.2核心規範給核心框架增加了一些小API
      • 新的Equinox並發API

      Plug-in開發環境

      • 有一個新的Target Platform State(目標平台狀態)視圖
      • 你現在可以創建並共享一個由軟件站點的軟件組成的目標定義
      • 新的Category Definition編輯器可以在輸出時用於給特性歸類
      • 你現在可以查看API相對於API基線的變化
      • 通過在菜單introspection mode裡調用plug-in Spy來查看關於菜單的信息
      • 增強OSGi Declarative Services (DS),以支持最新版的DS規範
      • 你現在可以從OSGi啟動配置中初始化產品定義
      • 有一個新的目標平台偏好頁面
      • PPlug-in export現在支持創建source bundles
      • Declarative Services現在支持最新版的OSGi declarative services規範(1.1)更新
      • PDE中的JAR signing支持擴展包含了對keypass的支持
      • 增強目標編輯器,以支持目標定義中的新特性
      • API工具現在可以分析系統類庫的使用情況及代碼訪問運行時不存在的成員時所產生的問題
      • 你現可以在非UI線程中啟動Junit Plug-in測試
      • Eclipse應用程序啟動配置現在支持啟動級別(start level)及自動啟動設置
      • Plug-in Registry視圖現在支持瀏覽OSGi服務
      • 給PDE/Build增加了一個新的擴展,可以使用戶從p2庫中獲取製品
      • API工具現在支持在接口上的兩個約束:@noimplement 和 @noextend。這就使得在不想直接實現一個接口的時候可以擴展它
      • 即使你已經增大了plug-in的主版本號,仍會被提示破壞API的改變
      • PDE增強了bundle及特性(feature)輸出,以把輸出的bundles/feature安裝到當前正在運行的工作台
      • 輸出特性、plug-in及產品時可以選擇binary cycles
      • PDE增加了declarative services工具,以幫助作者提供組件定義

      Java開發工具

      • NLS string hover現在有一個Open in Properties File動作
      • 在Caller模式下,調用層級(Call Hierarchy)現在有一個在上下文菜單中有一個Expand With Constructors動作
      • 當你在編輯器中輸入的時候,Java比較編輯器會更新其結構
      • 有一個新的toString()產生器
      • 為可覆蓋方法增加了一個Open Implementation鏈接,可以直接打開其實現
      • 編輯器與執行環境一致
      • Debug視圖現在提供了breadcrumb(麵包屑),顯示了當前活動的debug上下文
      • 可運行的JAR文件輸出嚮導還可以把所需的類庫打包進一個要輸出的可運行JAR文件,或打包進與緊挨著該JAR的一個目錄中
      • 當在寫一個分配表達式(allocation expression)時發生補全操作,內容助手現在可以提示一個類的可用構造方法
      • 如果檢測到無用代碼,編譯器現在可以發出警告
      • 類庫、變量或容器入口的路徑現在可以是與項目相關的任何位置
      • 在Jovadoc hover的頭部及Javadoc視圖中,現在都提供了引用其他類型和成員的鏈接
      • 隨該Eclipse發行的JUnit4版本更新為4.5
      • Javadoc視圖及hovers現在都支持{@inheritDoc}標籤並給覆蓋方法增加鏈接
      • 同一值的比較現在由編譯器檢測,默認情況下會發出警告

    大致上整理一下網路資訊,看來沒有多大的效能提升,但提供了更多友善度的調整,而從3.3 升上3.5 算是無痛升級啦,暫時還沒有遇到太大的問題!!

    參考資料:

    Categories: JAVA Tags: , ,

    URL 中文顯示處理 for Java

    2009年5月13日 尚無評論

    最近常會需要把中文直接顯示在URL上,方便使用者及搜尋引擎辨識
    不過後來發現,直接將中文顯示於網頁連結時,如使用者直接點選是ok的

    但如果使用者用複製URL連結 再自行至IE 貼上再連結就會出現亂碼啦

    在FireFox上使用時,如上述動作他會自動將中文轉成unicode碼所以會讓這url 可以執行
    但如果是從其它地方copy中文連結貼上,也會是亂碼…看來還是只能把URL的中文進行轉碼才行

    在Java 可以透過

    java.net.URLEncoder.encode(keyword,”UTF-8″)

    進行轉碼,這樣在url 連結雖會顯示unicode碼,但至少上述動作都能正常
    不知搜尋引擎會不會辨識這文字呢?

    此外,要注意的是,在測試時 URLEncoder.encode()時 如沒有帶入”UTF-8″
    轉出的Unicode碼是無法使用的…怪~以前記憶中是可以的
    反正大家如在try 時,不行就和我一樣加上”UTF-8″吧!!

    Categories: JAVA Tags: , ,
    分頁: 上一頁 1 2 3 4 5 6 7 下一頁