Headless模式是系統的一種配置模式。在該模式下,系統缺少了顯示設備、鍵盤或鼠標。
2.何時使用和headless mode?
Headless模式雖然不是我們願意見到的,但事實上我們卻常常需要在該模式下工作,尤其是服務器端程序開發者。因爲服務器(如提供Web服務的主機)往往可能缺少前述設備,但又需要使用他們提供的功能,生成相應的數據,以提供給客戶端(如瀏覽器所在的配有相關的顯示設備、鍵盤和鼠標的主機)。
3.如何使用和Headless mode?
一般是在程序開始激活headless模式,告訴程序,現在你要工作在Headless mode下,就不要指望硬件幫忙了,你得自力更生,依靠系統的計算能力模擬出這些特性來:
System.setProperty("java.awt.headless","true");
在Web開發中使用驗證碼時可能遇到的問題:
java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
解決方法:
給Tomcat的“CATALINA_OPTS”這個環境變量添加的一個JVM虛擬機參數:-Djava.awt.headless=true
在Tomcat7的catalina.sh文件中我們可以看到如下建議:
推薦我們在bin目錄下重新建立一個setenv.sh 腳本文件,將環境變量的自定義設置保存在其中。
>touch setenv.sh
>vi setenv.sh
編寫如下內容並保存:
#!/bin/sh
#filename:setenv.sh
CATALINA_OPTS="$CATALINA_OPTS -Djava.awt.headless=true"
重新啓動
./startup.sh
如何判斷這個腳本文件setenv.sh是否被執行:
這段shell腳本保證如果腳本文件可讀那麼將執行之
如何判斷-Djava.awt.headless=true是否生效
查看所有的JVM進程信息
>jps -l
5530就是tomcat運行的JVM進程ID
查看這個進程的參數信息,並從信息中篩選headless字符串
>jinfo 5530 |grep headless