aspose file tools*
The moose likes Applets and the fly likes Can't deploy an applet using <applet> tag (open HTTP connection failed) Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Applets
Bookmark "Can Watch "Can New topic
Author

Can't deploy an applet using <applet> tag (open HTTP connection failed)

Anton Shaykin
Ranch Hand

Joined: Dec 13, 2009
Posts: 57

Hi there,
So, I've got a working applet (checked that using applet viewer), but having real troubles to deploy it. We've got a JSF project, and an applet is being called from a <ui:composition/>. The class file is packaged in a jar archive. Here is the code I use:

And the exception that I got:


I tried using fully qualified name for my class in the code attribute. I also tried to add .class to a class name. Neither did work. I just don't really understand the "open HTTP connection failed" exception. When I tried to deploy simple applets on my local machine I used to get FileNotFoundException, which is more obvious. So, the problem is that I need to specify URL for my *.jar file. Still very confused about how to do this.
Any help would be highly appreciated.
Lester Burnham
Rancher

Joined: Oct 14, 2008
Posts: 1337
You do indeed need to provide the full-qualified class name.

Where is the hello.jar file located? It must be URL/directory as the page that contains the applet tag. You can take a look at the access log files to see of it is being accessed, and also all the alternate locations where the client JVM tries to download it.
Anton Shaykin
Ranch Hand

Joined: Dec 13, 2009
Posts: 57

Thank you for your quick reply, Lester.
Lester Burnham wrote:Where is the hello.jar file located?

Well I included it in build path (I'm using Eclipse). And just in case, I put another copy into the same directory from where the applet is being invoked.
It must be URL/directory as the page that contains the applet tag

I just don't know how to give a URL to a jar. When I tried to use codebase attribute to specify an archive location, but it was just appended to http://localhost/umms-web/. So, do I need to deploy a jar, as a war archive to, sort of, bind it to specific URL? Because, I understand that searching for it on a filesystem doesn't make any sense.
You can take a look at the access log files

Hm.. Would you give me a hint, where are those located?
Lester Burnham
Rancher

Joined: Oct 14, 2008
Posts: 1337
Well I included it in build path (I'm using Eclipse). And just in case, I put another copy into the same directory from where the applet is being invoked.

Eclipse is an IDE - it has no bearing on what happens at runtime. The jar file must in a publicly accessible directory on the web server.

I just don't know how to give a URL to a jar. When I tried to use codebase attribute to specify an archive location, but it was just appended to http://localhost/umms-web/. So, do I need to deploy a jar, as a war archive to, sort of, bind it to specific URL?

The name of the jar file (as given in the archive attribute) is appended to the base URL of the page request. For example, if the page is accessed via http://www.server.com/myApp/myDir/myPage.html, then the jar file must be http://www.server.com/myApp/myDir/hello.jar. You can change the directory by using the codebase attribute, but I'd advise to get it working without that first.

Would you give me a hint, where are those located?

Depends on your server. For Tomcat, they're in TOMCAT_HOME/logs/access.log or something like that, but you need to enable access logging in the server.xml file.
Anton Shaykin
Ranch Hand

Joined: Dec 13, 2009
Posts: 57

Lester Burnham wrote:
The name of the jar file (as given in the archive attribute) is appended to the base URL of the page request.

Well, in my case, it's the name of a class that gets appended to the base URL. We're using Glassfish as an Application Server. Seems like I have to deploy this jar as a web application to make it accessible by URL. Am I wrong?
Lester Burnham
Rancher

Joined: Oct 14, 2008
Posts: 1337
Well, in my case, it's the name of a class that gets appended to the base URL.

Yes, if the client JVM can't find the class in the jar file, then it will look for loose class files on the server. That's an indication that the jar file isn't found. Check the access log to see at which location the browser looks for that jar file, and compare that to its actual location.

Seems like I have to deploy this jar as a web application to make it accessible by URL. Am I wrong?

Yes, you're wrong. jar files used by applets are just static files as far as the server is concerned. If they're in a publicly accessible directory, then the browser JVM will find them, provided all the parameters of the applet tag are correct. See http://download.oracle.com/javase/1.4.2/docs/guide/misc/applet.html for details. It's probably easier to get a simple example applet -that uses a jar file- up and running outside of your current project; that will give you an idea of how it works.
Anton Shaykin
Ranch Hand

Joined: Dec 13, 2009
Posts: 57

Thanks for your help. I actually tried everything you proposed to no avail, and just started to write this post. But before submitting I tried once again and it worked! I guess it has something to do with restarting browser or clearing cache, but anyway, I know what I'm doing know. Another thing which was kind of inconvenient is that I needed to add policy file. Moreover adding policy file to the jar at the same level with META-INF and the package with compiled classes didn't do the trick. So I was forced to add a .java.policy file to my ${user.home} directory, and now finally after 2 days of banging my head on a wall, I've got my applet shining and working! Thanks once again!
Lester Burnham
Rancher

Joined: Oct 14, 2008
Posts: 1337
So I was forced to add a .java.policy file to my ${user.home} directory

Oh, so the applet does something it wouldn't normally be allowed to do. If you have controlled user desktops (like in a company), this may be OK, but in my experience it's too much to ask an average user out there to deal with policy files. In that case, signing the applet works much better.
Anton Shaykin
Ranch Hand

Joined: Dec 13, 2009
Posts: 57

Lester Burnham wrote:In that case, signing the applet works much better.

Yeah, I guess I'll have to dig a bit deeper to learn about signing applets. Although I'm still confused, why including a policy file in a jar didn't work... But I'm sure that the applet's security policy is much more versatile than I think
Lester Burnham
Rancher

Joined: Oct 14, 2008
Posts: 1337
Yeah, I guess I'll have to dig a bit deeper to learn about signing applets. Although I'm still confused, why including a policy file in a jar didn't work...

Because that would amount to the applet granting itself privileges. Also, policy files need to be present when the JVM starts up. If you want to learn more, start here: HowCanAnAppletReadFilesOnTheLocalFileSystem
Anton Shaykin
Ranch Hand

Joined: Dec 13, 2009
Posts: 57

Lester Burnham wrote:Because that would amount to the applet granting itself privileges.

Yes, now it looks obvious to me. Today I suffered really hard from the policy file that I created 2 days ago. I put it in my ${user.home} directory and granted all permissions to the jre. Then I tried to guess why our application deployed on glassfish was redirecting me to index.jsf instead of a login page. It turned out that the root of the problem was in that damn policy file (or in my misunderstanding of importance of this file?). Anyway, now I got the point - "need to grant your applet specific permissions? - sign it".
Thanks again for help!
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Can't deploy an applet using <applet> tag (open HTTP connection failed)
 
Similar Threads
Help launching an applet created in Netbeans environment
Setting applet path in Java Servlet
Cannot load applet
WAMP/Java/MysqlConnector Issue
Problem Deploying Applet