標籤:compile ojsp pl
11i環境,一般來說jsp是重啟apache後自動編譯的,但是因為某些環境設定,需要手動編譯jsp。
11i的編譯路徑:$JTF_TOP/admin/scripts/ojspCompile.pl
編譯命令:perl $JTF_TOP/admin/scripts/ojspCompile.pl --compile -p 16 -s xxx.jsp
一個簡單的jsp檔案test1.jsp,檔案編碼格式GB2312,代碼如下:
<%@page language="java" contentType="text/html; charset=gb2312"%><html><body><font size="+2" color="#000000">測試亂碼</font></body></html>
上傳至伺服器$OA_HTML/SSO_OA 目錄下,用ojspCompile編譯,編譯通過的話,伺服器$OAD_TOP/_pages/_oa__html/_sso__oa/ 下產生兩個class檔案:_test1.class 和 _test1$__jsp_StaticText.class 。
將class下載到本地,反編譯,發現裡面中文是亂碼,這也就能解釋為什麼瀏覽器訪問是亂碼了。
於是懷疑是編譯器的問題,有查到資料說編譯器預設編譯編碼是IS0-8859-1,於是就在考慮如何修改編譯編碼。
將$JTF_TOP/admin/scripts/ojspCompile.pl下載到本地,開啟後搜尋“javac”看到這麼一段:
sub javac_internal {my $osname = undef; chop ($osname = `uname -s`); my ($java_ver) = &myrun(30, "$java -version 2>&1"); chomp($java_ver); if($java_ver =~/1.5/) { if (($osname eq "AIX") || ($osname eq "OSF1")) { return ‘exec javac -nowarn‘ } elsif ($ISWINNT) { return ‘javac -J-client -nowarn‘ } else { return ‘exec javac -J-client -nowarn‘ } } elsif ($ISWINNT) { return ‘javac -nowarn‘ } else { return ‘exec javac -nowarn‘ }}
javac命令是可以指定編碼的,在javac命令後加上 -encoding GB2312 即可。
因為我當前使用的11i環境包括資料庫相關編碼都是GB2312的, 所以我把這裡改成了GB2312編碼,當然,不同環境也可以改成utf-8。
修改後的代碼:
sub javac_internal {my $osname = undef; chop ($osname = `uname -s`); my ($java_ver) = &myrun(30, "$java -version 2>&1"); chomp($java_ver); if($java_ver =~/1.5/) { if (($osname eq "AIX") || ($osname eq "OSF1"))#old { return ‘exec javac -nowarn‘ } { return ‘exec javac -nowarn -encoding GB2312‘ } elsif ($ISWINNT) { return ‘javac -J-client -nowarn‘ }else { return ‘exec javac -J-client -nowarn‘ } } elsif ($ISWINNT) { return ‘javac -nowarn‘ }#old else { return ‘exec javac -nowarn‘ }else { return ‘exec javac -nowarn -encoding GB2312‘ }}
保證jsp檔案的編碼與當前設定的編碼相同,然後重新執行ojspCompile編譯。
大功告成,反編譯後的class內中文正常顯示。
R12環境的ojspCompile路徑:$FND_TOP/patch/115/bin ,這個版本裡已經預設添加編譯字元集為utf-8。
本文出自 “路漫漫其修遠兮…” 部落格,請務必保留此出處http://baser.blog.51cto.com/4153192/1953654
EBS 11i ojspCompile.pl 編譯jsp亂碼 encoding