備注:本文來(lái)自FrontJSP.com.cn的FAQ系統
截止的版本是resin 1.2
2000/12
}
Resin中的libcaucho.so not found 錯誤?
libcaucho.so包含了一些用于Unix的JNI。當你調用配置make時(shí),它必須被編譯。
由于某種緣故,JVM沒(méi)有取得庫。你很可能要檢查L(cháng)D_LIBRARY_PATH是否在你的環(huán)境以及wrapper.pl中。
對很多站點(diǎn)來(lái)說(shuō),libcaucho.so丟失不是一個(gè)大問(wèn)題。它只是grab一些CPU statistics。
但是,it also enabled the setuid needed by user-name and group-name. 所以如果你從root使用user-name來(lái)改變用戶(hù),
則需要libcaucho.so處于運行中。
Resin在windows下重新編譯時(shí)沖突
這發(fā)生于一些版本的JDK的內部javac編譯器。
要解決這個(gè)問(wèn)題,要使用外部編譯器javac或者jikes:
<java compiler=‘javac‘/>
如何將Resin安裝為一個(gè)Linux service?
(Stephen Kuo回答)
這是一個(gè)很基本的問(wèn)題。
在我的Red Hat 6.2中,我在/etc/rc.d/rc.local文件中加入了下列行從而使Resin成為一個(gè)服務(wù):
/usr/local/resin1.1/bin/srun.sh start
但當我重啟系統后, Resin沒(méi)有起來(lái)。
(Guy Tal回答)
你必須在 rc 文件中設置環(huán)境參數(當你從命令行執行,它們只在你自己的環(huán)境有效,而rc文件做為root來(lái)運行所以
沒(méi)有被設置)。加入下列行:
----------Snip----------
PATH=/usr/local/bin:/usr/bin:/bin
export PATH
JAVA_HOME=/usr/java
export JAVA_HOME
RESIN_HOME=/opt/resin1.1
export RESIN_HOME
CLASSPATH=/usr/java/jre/lib/rt.jar
CLASSPATH=$CLASSPATH:/opt/resin1.1/lib/resin.jar
CLASSPATH=$CLASSPATH:/opt/resin1.1/lib/jsdk22.jar
CLASSPATH=$CLASSPATH:/opt/resin1.1/lib/jdk12.jar
export CLASSPATH
----------Snip----------
你也可以在srun.sh或者wrapper.pl中設置這些環(huán)境參數。
如何在resin.conf中設置出錯頁(yè)?
基本命令是error-page。有3種出錯頁(yè):
Error code pages, e.g. 404
Exception, e.g. java.lang.NullPointerException
connection failures, "can‘t connect to srun"
Resin中各文件都放在哪里?
文檔root可在resin.conf中設置,使用app-dir:
<http-server app-dir=‘/www/htdocs‘>
...
</http-server>
每一個(gè)虛擬主機和每一個(gè)web-app都有自己的app-dir。app-dir配置必須放在resin.conf,而不是在web.xml
(否則Resin無(wú)法找到web.xml):
<web-app id=‘myapp‘ app-dir=‘/www/myapp‘>
...
</web-app>
如果你沒(méi)有定義app-dir, Resin將使用在 /www/htdocs/myapp 中的id。
可選的,你可以把一個(gè)web.xml放在[app-dir]/WEB-INF/web.xml (同樣,根據JSDK 2.2)。
web.xml可以包含web-app在resin.conf中可以放的東西。
自動(dòng)重載類(lèi)缺省時(shí)屬于 [app-dir]/WEB-INF,根據JSDK 2.2:
classes -- auto-load/recompile Java servlet/bean/classes directory
lib -- auto-loaded *.jar files
在web-app中, 你可以增加到auto-reload classpath:
<classpath id=‘myclasses‘ source=‘/home/work/proj/src‘ compile=‘true‘/>
JSP/Java工作目錄是 /tmp/caucho (或 \temp\caucho)。你可以這樣修改:
<java compiler=‘javac‘ work-dir=‘/path/to/my/work/dir‘/>
最后,啟動(dòng)腳本將在Resin啟動(dòng)前,在resin1.1/lib查找啟動(dòng)腳本并加入到classpath中。
Resin中VerifyError when loading JSP files 錯誤?
JVM對一個(gè)方法的代碼長(cháng)度有很多限制。大多數編譯器都不告訴你你的代碼超長(cháng)了,所以當Resin試圖裝載
編譯后的代碼時(shí)你看到了這樣的錯誤信息。這在你過(guò)多使用tag庫時(shí)容易出現,因為每一個(gè)tag產(chǎn)生相當多的代碼。
僅有的解決辦法是將你的頁(yè)面分為多個(gè)子頁(yè)面,使用jsp:include。實(shí)際上那樣將是一個(gè)優(yōu)點(diǎn),
因為那樣你就可以使用Resin的caching來(lái)優(yōu)化這些子頁(yè)面的性能。
Resin中的Multiple classpath can‘t auto-compile錯誤
你定義在resin.conf中的classpath被排成了序列。當自動(dòng)編譯某個(gè)類(lèi)的時(shí)候,只有下一個(gè)是有效的:
<:classpath id=‘foo/classes‘/>
<:classpath id=‘bar/classes‘/>
Resin將首先將編譯bar/classes中的類(lèi)。bar/classes/Test.java無(wú)法使用foo/classes中的任何類(lèi)。
一旦bar/classes已經(jīng)完成,Resin將編譯foo/classes中的類(lèi)。foo/classes中的類(lèi)可以使用bar/classes中的任何東西。
Resin中共有多少active http sessions?
com.caucho.server.http.Statistics對象中有這些信息。它作為"caucho.statistics" 保存于ServletContext (application)中。
Resin中如何打開(kāi)一個(gè)數據文件?
需要將URL翻譯為一個(gè)真實(shí)路徑。這要使用getRealPath.
Resin的當前目錄是RESIN_HOME,它不是通常你放數據文件的位置。
你可以使用ServletContext.getRealPath()或者相對于當前URL來(lái)使用ServletRequest.getRealPath().
ServletContext app = getServletContext();
String path = app.getRealPath("/WEB-INF/mydata.csv");
InputStream is = new FileInputStream(path);
...
Resin中如何禁止目錄瀏覽?
將directory-servlet設置為 "none",就可以禁止目錄瀏覽。
<web-app id=‘/‘>
<directory-servlet id=‘false‘/>
</web-app>
為什么Resin中兩個(gè)虛擬主機使用同樣的index.jsp?
正如再虛擬主機參考中所述,你要在resin.conf中使用<host> 和<app-dir>對虛擬主機進(jìn)行配置。
如果忽略<host>, Resin將為各主機產(chǎn)生相同的類(lèi)。所以一個(gè)主機可以看到第二個(gè)主機的Jsp文件。
通過(guò)加入 <host>, Resin可以使各個(gè)類(lèi)名保持唯一。
Resin中如果用一個(gè)servlet作為welcome頁(yè)?
沒(méi)有其它url-pattern會(huì )僅僅匹配‘/‘.所以url-pattern=‘/‘將會(huì )吧servlet設置為缺省的servlet,
并取代文件servlet.
你要使用Resin的url-regexp。 url-regexp=‘^/$‘ 會(huì )達到你要的目的。
Resin中mod_caucho caucho-status返回no data
這可能是由于"EAPI"沖突。如果你的Apache和EAPI一起編譯,而Resin沒(méi)有包含二單獨進(jìn)行了編譯,mod_caucho會(huì )沖突。
Apache日志會(huì )是這樣的:
[Tue Aug 8 15:33:24 2000] [notice] caught SIGTERM, shutting down
[Tue Aug 8 15:33:24 2000] [warn] Loaded DSO /etc/httpd/modules/mod_caucho.so
使用plain Apache 1.3 API, This module might crash under EAPI! (please
recompile it with -DEAPI)
通常,./configure腳本可以自動(dòng)檢測出是否需要EAPI, 如果沒(méi)有能夠,你可以這么做:
unix> ./configure --with-apache-eapi
我可以在Resin中使用mod_rewrite?
是的,但你要確信使用passthrough標志,這樣Resin可以在mod_rewrite以后取得控制。
RewriteEngine on
RewriteRule ^/hello.html$ /hello.jsp [L,PT]
如何使Resin中index.jsp 作為IIS的默認文檔?
(Stefan Wesner回答)
使index.jsp成為active文檔是屬于IIS配置的工作范圍。
在IIS4.0,可以按以下步驟進(jìn)行:
打開(kāi)用于"Default Web Site"的界面 (或者任何其它Web-Site或VirtualDirectorx).
選擇"Home Directory Tab for the Default Web Site" 或者 "Virtual Directory"頁(yè)框。
選擇"Configuration"
為你的iis_srun.dll 將 .xtp 和.jsp新增應用映射, (我還用了PUT,DELETE, 只要copy它) ,
關(guān)閉該子對話(huà)框。
選擇"Documents" 頁(yè)框增加index.jsp和index.xtp到缺省文檔列表。
試一下http://yourhost/
如何將Resin和SSL配置在一起?
(Nicholas Lehuen回答:)
這里是簡(jiǎn)短的步驟,用于將SSL安裝到Resin。
目標:將對SSL的支持安裝到Resin
要求:
最新的Resin 1.2 snapshot (我成功用了08/04/2000 snapshot) http://www.caucho.com/download/index.xtp
JSSE 1.0.1 http://java.sun.com/products/jsse/
可選: 一個(gè)certificate authority (CA)例如Verisign, Thawte,或者你自己的。
Thawte提供一個(gè)免費的測試certificate authority服務(wù),這可以使你在購買(mǎi)前能夠檢測證書(shū)處理過(guò)程。
當然,你也可以通過(guò)提供自己認證的public key certificate來(lái)略過(guò)CA。 這在稍后再介紹。 (https://www.thawte.com/cgi/server/test.exe )
JSSE setup
請按照http://java.sun.com/products/jsse/install.html 提供的安裝指南。
即使Resin有它自己的provider registration system (在下一步中給出),
我仍建議你還是注冊SunJSSE,通過(guò)編輯<java-home>/lib/security/java.security(在installation guide中有解釋?zhuān)?br>這將使keytool的使用變得簡(jiǎn)單。
Keystore初始化
在Resin安裝目錄中的某處創(chuàng )建一個(gè)名為‘keys‘的目錄。 我建議你把它放在Resin home路徑下。
Copy文件 <java-home>/lib/security/cacerts到‘keys‘目錄。
將cacerts文件改名為任何你想要的名字。假設取名為 ‘private.keystore‘。
Keystore protection
你的private.keystore文件在當前只是cacerts keystore的一個(gè)副本,它包含了CA public key certificates
(對客戶(hù)端HTTPS連接非常重要)。我們要將你自己的private key加入到該文件,這樣它就有了口令保護,
如果別人竊取了該文件也無(wú)法偽造certificate。
進(jìn)入‘keys‘目錄
執行以下命令:
keytool -storepasswd -storepass changeit -new YourPasswordHere \ -keystore private.keystore
(cacerts keystore的缺省口令是‘changeit‘)
產(chǎn)生Private key
現在我們生成你的key pair, 它由一個(gè)private (必須保密!) 和一個(gè)public key組成。
一個(gè)要點(diǎn)是要使用RSA key pair generator, 而不是缺省的DSA。這是JSSE security provider要使用的。
執行以下命令:
M:\keys>keytool -genkey -keyalg RSA -alias myserverkeypair \
-storepass YourPasswordHere -keystore private.keystore
What is your first and last name?
[Unknown]: www.myserver.com
What is the name of your organizational unit?
[Unknown]: Foo Dept
What is the name of your organization?
[Unknown]: Bar
What is the name of your City or Locality?
[Unknown]: Paris
What is the name of your State or Province?
[Unknown]: France
What is the two-letter country code for this unit?
[Unknown]: FR
Is <CN=www.myserver.com, OU=Foo Dept, O=Bar, L=Paris,
ST=France, C=FR> correct?
[no]: yes
Enter key password for <myserverkeypair>
(RETURN if same as keystore password):
你必須寫(xiě)明你的HTTP server名字,作為certificate的CN (這樣可以回復給 ‘first and last name‘)。
如果沒(méi)有則瀏覽器將向你的客戶(hù)發(fā)出警告。 其它信息都看你的選擇來(lái)定,
但是key pair生成和attributes definitions過(guò)程對"real-life" cryptography來(lái)說(shuō)是非常嚴格的。
Verisign將重復2次檢查你的身份,地址等。
另一個(gè)要點(diǎn)是:DON‘T AFFECT A PASSWORD to your key pair. 它必須保持得和keystore中的一樣,至少等到
Resin提供了一個(gè)配置key pair password的方法。
Public Key Certificate (可選)
請求一個(gè)public key certificate并把public key certificate插入到你的keystore。為了讓用戶(hù)信任你的server,
你不得不使你的public key certificate (PKC)被一個(gè)Certificate Authority (CA) (Verisign, Thawte, Certplus...)來(lái)簽發(fā)。
可以通過(guò)發(fā)送certificate signature request (CSR)到CA來(lái)完成,
要復制去所有合法的必要材料,然后取得返回的signed PKC。
這一步對于作為產(chǎn)品的服務(wù)器來(lái)說(shuō)是必須執行的。除非你有辦法讓你的用戶(hù)確信你的PKC是合法的而步不需要CA signature,
例如這在intranet環(huán)境下還是可能的。然而,作為試驗的目的,你可以從使用你的self-signed PKC開(kāi)始而不用任何CA signature。
一種中間的方案就是使用test CA,這樣你可以檢查你的CSR是否正確發(fā)出了,Certificate鏈是否被正確地檢查了,等等。
Thawte提供了一個(gè)test CA(在上面提到地地址)
通過(guò)下列命令產(chǎn)生一個(gè)CSR :
M:\keys>keytool -certreq -alias myserverkeypair -storepass YourPasswordHere \
-keystore private.keystore
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIBqjCCARMCAQAwajELMAkGA1UEBhMCRlIxDzANBgNVBAgTBkZyYW5jZTEOMAwGA1UEBxMFUGFy
... cut ...
KDYZTklbg1NOiXTdXIhPHb3+YOgZ+HoeDTxOx/rRhA==
-----END NEW CERTIFICATE REQUEST-----
Copy/Paste 這個(gè)CSR到下列地址地文本框中。讓其它選項全部保持缺省。
https://www.thawte.com/cgi/server/test.exe
你將得到一個(gè)certificate,它看上去是這樣的:
-----BEGIN CERTIFICATE-----
MIICjzCCAfigAwIBAgIDBp8SMA0GCSqGSIb3DQEBBAUAMIGHMQswCQYDVQQGEwJa
... cut ...
/93Q58iI4fgQ/kc+l8ogpVwh/IJw1Ujmszd19Jf+pxyySMM=
-----END CERTIFICATE-----
Copy/Paste這個(gè)certificate到名為‘myserver.cer‘的文件。如果你有Microsoft Internet Explorer 5.0 (也許是4.0),
你可以直接打開(kāi)這個(gè) .cer文件并看到certificate。當你的用戶(hù)請求由你的server提供的頁(yè)面的security屬性時(shí),將發(fā)出
一個(gè)警告。表示你不能相信該證書(shū)因為它沒(méi)有指向一個(gè)trusted root CA。
你可以繼續,也可以下載并信任test root CA (在https://www.thawte.com/servertest.crt提供 )。
注意,最終用戶(hù)不應該相信也肯定不會(huì )接受這一test root CA。
不管怎么說(shuō),要導入你的被簽發(fā)的signed certificate,首先不得不導入test root CA certificate。
可以通過(guò)以下命令下載并導入:
M:\keys>keytool -import -alias servertest -storepass YourPasswordHere \
-keystore private.keystore -file servertest.crt
Owner: CN=Thawte Test CA Root, OU=TEST, O=Thawte, ST=FOR TESTING, C=ZA
Issuer: CN=Thawte Test CA Root, OU=TEST, O=Thawte, ST=FOR TESTING, C=ZA
Serial number: 0
Valid from: Thu Aug 01 02:00:00 CEST 1996 until: Thu Dec 31 22:59:59 CET 2020
Certificate fingerprints:
MD5: 5E:E0:0E:1D:17:B7:CA:A5:7D:36:D6:02:DF:4D:26:A4
SHA1: 39:C6:9D:27:AF:DC:EB:47:D6:33:36:6A:B2:05:F1:47:A9:B4:DA:EA
Trust this certificate? [no]: yes
證書(shū)Certificate將加入到keystore中。
導入證書(shū),通過(guò)以下命令將它附加導你的server key pair:
M:\keys>keytool -import -alias myserverkeypair -storepass YourPasswordHere \
-keystore private.keystore -file myserver.cer
證書(shū)的回復reply安裝在keystore中。
Key pair驗證
通過(guò)以下命令:
M:\keys>keytool -list -v -alias myserverkeypair -storepass YourPasswordHere \
-keystore private.keystore
Alias name: myserverkeypair
Creation date: Fri Aug 11 23:07:53 CEST 2000
Entry type: keyEntry
Certificate chain length: 2
Certificate[1]:
Owner: CN=www.myserver.com, OU=Foo Dept, O=Bar, L=Paris, ST=France, C=FR
Issuer: CN=Thawte Test CA Root, OU=TEST, O=Thawte, ST=FOR TESTING, C=ZA
Serial number: 69f12
Valid from: Fri Aug 11 23:00:07 CEST 2000 until: Mon Sep 11 23:00:07 CEST 2000
Certificate fingerprints:
MD5: 41:84:55:8C:A1:85:28:DA:B0:5A:47:D6:5B:D2:ED:41
SHA1: 61:DE:DB:E6:7C:3C:AD:90:63:9B:20:E0:FF:3B:02:3A:60:EB:B4:82
Certificate[2]:
Owner: CN=Thawte Test CA Root, OU=TEST, O=Thawte, ST=FOR TESTING, C=ZA
Issuer: CN=Thawte Test CA Root, OU=TEST, O=Thawte, ST=FOR TESTING, C=ZA
Serial number: 0
Valid from: Thu Aug 01 02:00:00 CEST 1996 until: Thu Dec 31 22:59:59 CET 2020
Certificate fingerprints:
MD5: 5E:E0:0E:1D:17:B7:CA:A5:7D:36:D6:02:DF:4D:26:A4
SHA1: 39:C6:9D:27:AF:DC:EB:47:D6:33:36:6A:B2:05:F1:47:A9:B4:DA:EA
你可以看到別名myserverkeypair指向了一個(gè) keyEntry類(lèi)型的入口,
它的certificate鏈有2個(gè)certificate, 第一個(gè)是你自己的certificate, 由Thawte Test CA Root簽發(fā)(sign),
另一個(gè)則是Thawte Test CA Root自己的。
Resin配置 (resin.conf)
增加對SunJSSE security provider的支持:
<caucho.com>
<security-provider id=‘com.sun.net.ssl.internal.ssl.Provider‘/>
<!-- declare a new HTTP server on port 443 (standard port for HTTPS),
- with SSL enabled -->
<http-server>
<app-dir>doc</app-dir>
<!-- the http port -->
<http port=80/>
<!-- the srun port, read by both JVM and plugin -->
<srun host=‘localhost‘ port=‘6802‘/>
<http port=443>
<ssl>true</ssl>
<key-store-type>jks</key-store-type>
<key-store-file>file://m:/keys/private.keystore</key-store-file>
<key-store-password>YourPasswordHere</key-store-password>
</http>
測試一下 !
試著(zhù)用https連接你的server,而不用http !
我已經(jīng)在Resin/JDK 1.3/Windows NT 4 SP6 和JDK 1.2.2/Solaris 7上成功應用了SSL。
如果能將HTTPS和WAP混合在一起則將更有趣... !
Resin中classloader次序是怎樣的?
在Resin 1.2.b2 中:
命令行classpath
resin/lib目錄
envivonmental classpath
一個(gè)應用的WEB-INF/lib和WEB-INF/classes
次序在b2中已經(jīng)修改了。在以前的版本中,WEB-INF類(lèi)比其它都有優(yōu)先權,但那樣不太標準,容易產(chǎn)生問(wèn)題。
聯(lián)系客服