JSP's Applet has to pass an Buffered Image to Servlet to upload on web server

Hi,

I have a JSP that invokes an applet. This applet creates an Buffered Image, I need to pass this buffered image to a servlet that is hosted on the same web server as the JSP, this servlet is supposed to create a file from the BufferedImage and then upload to a location on the same web server. I am facing a problem in the communication between the Applet and Servlet.  The servlet is not even getting called..!!

Could you please tell me what I am missing, following is the code snippets that I am using



JSP:
 
<body>
<applet code="Applet.class" archive="Applet.jar"width="300" height="300"/>
</body>
 
Applet:
 
 public void sendBufferedImage(String urlpath, BufferedImage image) {
        try {
            System.out.println("Sending the image data");
            URL url = new URL(urlpath);
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            OutputStream out = conn.getOutputStream();
            ImageIO.write(image, "jpg", out);
            out.close();
            System.out.println("Sent the data to " + url);
        } catch (IOException ex) {
           ex.getMessage();
        }
 
    }
 
Servlet:
 
 System.out.println("getting the image from applet");
            File filename = new File(getServletContext().getContextPath() + "test.jpg");
            FileOutputStream outy = new FileOutputStream(filename);
            InputStream in = request.getInputStream();
            byte[] buf = new byte[256];
            int nread = 0, total_read = 0;
 
            while (-1 != (nread = in.read(buf))) {
                total_read += nread;
                outy.write(buf, 0, nread);
            }
            System.out.println("bytes read " + total_read);
            out.close();

Open in new window

esko_userAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

TimYatesCommented:
1)  What is your "urlpath" set to?
2) Does the servlet get called if you load the servlet URL into the browser (it will then crash, but you should see it getting called)
0
Mick BarryJava DeveloperCommented:
any errors in the java console of the applet?
what url are you using to load the page, and to post the image?
0
esko_userAuthor Commented:
"http://localhost:6080/WebApplet/DocumentUpload" is the URL that hosts the web application which contains the JSP and the servlet, the applet is a separate jar file that I am using in the JSP
0
Angular Fundamentals

Learn the fundamentals of Angular 2, a JavaScript framework for developing dynamic single page applications.

TimYatesCommented:
Yeah...  But is that the URL that the applet is using when you call sendBufferedImage?

Can you print the URL out in that applet method and see what it is in the Java Console?

Also, does the servlet get fired when you load that URL in your browser?
0
esko_userAuthor Commented:
Yes, this is the URL I am using, and when I am using the same path in the browser, the servlet does get fired.. but does nothing
0
TimYatesCommented:
Any output in the Java Console window?
0
esko_userAuthor Commented:
Java Console that I launch with the applet shows the following message among others ... No Error Messages though

Sending the image data
network: Connecting http://localhost:6080/WebApplet/DocumentUpload with proxy=DIRECT
Sent the data to http://localhost:6080/WebApplet/DocumentUpload
0
TimYatesCommented:
And the servlet code is in a doGet block yeah?

And you are running the browser on the same machine as the webapp (tomcat?) is running?
0
esko_userAuthor Commented:
The Servlet code is in doPost block

and the Yes the browser is run on the same machine as the  webapp(tomcat 6.1)

0
TimYatesCommented:
Can you move the servlet code to the get block?

I believe the applet is doing a GET not a post
0
esko_userAuthor Commented:
Yes I tried that too, but even this is not helping
0
TimYatesCommented:
Can you try this in the applet (and set your Sevlet to doPost):


URL url = new URL( urlpath );
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("POST");
conn.setUseCaches(false);
conn.setDefaultUseCaches(false);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/octet-stream");
urlConnection.connect();
OutputStream out = urlConnection.getOutputStream();
ImageIO.write( image, "jpg", out ) ;
out.flush();
out.close();

Open in new window

0
esko_userAuthor Commented:
what is the type "urlConnection" ?
0
esko_userAuthor Commented:
Sorry ... its not working
0
esko_userAuthor Commented:
Should I be sending this data back the to the JSP that invokes the applet and the use JSP to post it to the Servlet?
0
TimYatesCommented:
What data?

I assume you have a jsp with an applet tag in it, and that applet is supposed to send an image?

Hmmm...

Try reading the inputStream from the URL connection in the applet...that may give you some clues as to the problem?
0
esko_userAuthor Commented:
Yes the Applet is supposed to send an image... and is within an applet tag in the jsp

The input to the URLConnection is BufferedImage  so, I am supposed to check the data before being written to the URLConnection and then after being written to the connection ..!!  if this does not make sense then I did not get your suggestion
0
TimYatesCommented:
URLCOnnection is bi-directional, you cas specify to use both input and output, and read from an inputstream after you have sent the image to the servlet (to see if the servlet responded with anything)

And you post your current applet sendBufferedImage method?

I can't see why this isn't working if everything is as you say it is

ACTUALLY:

Maybe if instead of doing nothing with the exception in:

        } catch (IOException ex) {
           ex.getMessage();
        }

you could print the stack trace?

        } catch (IOException ex) {
           ex.printStackTrace()
        }

Then you will see the error you are getting
0
TimYatesCommented:
Did it give you the error?
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
JSP

From novice to tech pro — start learning today.