2011-04-21 3 views
3

애플릿에 logout" 단추가 있습니다. 이 버튼은 CGI 스크립트를 호출하여 세션을 종료 한 다음 System.exit()을 호출하여 Java VM을 종료합니다. 사용자가 동일한 브라우저 창에서 다시 로그인을 시도 할 때 문제는 - 애플릿은 ClassNotFoundException와로드 실패Java 애플릿을 Internet Explorer에서 다시로드 할 수 없습니다.

load: class lucent/fm/parts/BlankPage.class not found. 
java.lang.ClassNotFoundException: lucent.fm.parts.BlankPage.class 
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source) 
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source) 
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.io.IOException: open HTTP connection failed:http://example.com/html/lucent/fm/parts/BlankPage/class.class 
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source) 
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source) 
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
... 7 more 
Exception: java.lang.ClassNotFoundException: lucent.fm.parts.BlankPage.class 

그것은하지 파이어 폭스, Internet Explorer에서만 나타납니다. 자바 플러그인은 다음과 같습니다 시스템 (애플릿을로드)에있는
1. 로그인 :
Java Plug-in 1.6.0_20
Using JRE version 1.6.0_20-b02 Java HotSpot(TM) Client VM

직접 시나리오는을 다음과 같다.
2. 로그 아웃합니다 (애플릿을 닫지 만 브라우저 창이 계속됩니다).
3. 주소 표시 줄을 클릭하고 Enter 키를 누릅니다.
4. 애플릿이로드되지 않고 Java 콘솔에서 ClassNotFoundException을 볼 수 있습니다.
5. 페이지 새로 고침 - 서버가 로그인 페이지로 리디렉션됩니다. 로그인 한 후 애플릿이 다시로드되지 않고 예외가 발생합니다.

Apache 액세스 로그를 보면 4 단계에서 브라우저 (또는 플러그인)가 jar 파일을로드하려고 시도하고 HTTP 오류가 발생 함이 입증되었습니다. 세션이 만료되었으므로 OK입니다. 이상한 일은 5 번째 포인트에서 발생합니다 - 항아리에 대한 요청이 없습니다! 브라우저 또는 플러그인이 실패한 시도를 기억하고 jar 파일을로드하려고 시도조차하지 않는 것 같습니다. 서버에없는 원시 .class 파일 만로드하려고 시도합니다.

내 결론이 맞습니까? 그러한 오류를 어떻게 처리 할 수 ​​있습니까? Java Plugin이 jar 파일을로드하도록 강제 할 수 있습니까?

Java 제어판에서 캐싱을 활성화해도 도움이되지 않습니다. 매개 변수를 "false"으로 설정하는 것은 도움이되지 않습니다. "class" 파일을 직접로드하지 못하게합니다.

미리 제안 해 주셔서 감사합니다.

+0

잘못된 클래스 이름 인'lucent.fm.parts.BlankPage.class'라는 클래스를로드하려고하면 오류가 발생합니다 ('lucent.fm.parts.BlankPage'이어야합니다) . 문제는 브라우저/플러그인이이 클래스를로드하려고하는 이유는 무엇입니까? –

+0

HTML 페이지이므로 ; BlankPage.class 대신 BlankPage로 변경할 수는 있지만 도움이되지 않습니다. 공식 문서에 따르면 클래스 이름은 ".class"접미사 여야합니다. http://download.oracle.com/javase/6/docs/technotes/guides/plugin/developer_guide/using_tags.html – pkalinow

답변

1

애플릿이있는 html이 정적 (cgi, php 등)이 아닌 경우 로그 아웃 한 후 jar 파일을 가리키는 다른 URL을 강제로 시도 할 수 있습니다 (예 : "my.jar"대신 "my. jar? random = 1235232 ").

또한 캐시 HTTP 헤더로 재생 해 볼 수 있습니다.

또 다른 잠재적 인 해결 방법은 세션이 닫힌 경우에도 (허용되는 경우) 항아리를 항상 제공하도록 아파치를 다시 구성하는 것입니다.

2

"로그 아웃"버튼이있는 애플릿이 있습니다. 이 버튼은 CGI 스크립트를 호출하여 세션을 종료 한 다음 System.exit()을 호출하여 Java VM을 종료합니다.

System.exit(anyNumber)을 호출하는 애플릿은 호스트의 집을 불타 버리는 게스트와 매우 비슷합니다. 애플릿 (신뢰할 수있는 애플릿이라도)은 이 아닙니다. VM을 종료하려고하십시오. VM을 공유하는 페이지의 모든 애플릿이 브라우저에서 선택한대로 destroy() 메쏘드와 그 이후의 기간을 마쳤을 때 브라우저는 VM을 종료합니다.

BTW - Mozilla/FF의 한 버전을 기억합니다. 여기서 System.exit(int)은 VM을 종료 한 것이 아니라 브라우저를 충돌 시켰습니다!

+1

까지 저는 System.exit이 호출 될 때 브라우저를 닫는 것이 Sun이 "차세대 Java 플러그인"을 도입하기 전에 정상적인 동작이었습니다. – pkalinow

+0

@pkalinow : 추가 정보를 가져 주셔서 감사합니다. 그것을 한 번 시도한 후에 나는 결코 다시 시도하지 않는 무언가이라고 결정했다. 새 플러그인이 요청을 거부했기 때문에 기쁩니다. 브라우저는 닫을 수있는 완벽한 기능의''X' ** 버튼을 가지고 있습니다 (또는 OS/브라우저에있는 것이 무엇이든). 애플릿의 도움이 필요하지 않습니다. –

+0

'x '버튼의 문제점은 현재 세션의 모든 창을 닫지 않고 세션 쿠키를 제거하지 않는다는 것입니다. 내가 이행해야하는이 두 가지 요구 사항. – pkalinow

관련 문제