[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 804
  • Last Modified:

draw graphics through Servlet!!!

Does anybody know if servlet supports  java.awt.* and javax.swing.*?

The following sentences are not working because of exception!

Toolkit.getDefaultToolkit().getImage("map800grid.gif");
g.drawLine(0, 0,800,800);

Urgent! Does anybody know why?????? Thanks a lot!
0
anxx0018
Asked:
anxx0018
  • 6
  • 3
  • 2
1 Solution
 
kennethxuCommented:
>> Does anybody know if servlet supports  java.awt.* and javax.swing.*?
The answer is NO.
servlet is running at server side doesn't have access to client window. applet is designed for this purpose.
0
 
kennethxuCommented:
>> Toolkit.getDefaultToolkit().getImage("map800grid.gif");
if you already have a gif file, why don't sent it to browser directly?
0
 
anxx0018Author Commented:
But I still need to get data from database on server and making drawings(draw lines to simulate some intrument) according to these data.
What do you think is a good way for it?

Thanks a lot!!!!
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
vk33Commented:
Hi!

I suggest using Image I/O API in your servlet code:

1. Read your background "grid" image like this:
File f = new File("c:\images\myimage.gif");
BufferedImage bi = ImageIO.read(f);

2. Make all necessarry changes upon the loaded image (e.g. drawing lines) using standart Imaging API.

3. Return your final image through ImageWriter:
Iterator writers = ImageIO.getImageWritersByFormatName("png");
ImageWriter writer = (ImageWriter)writers.next();
writer.setOutput(response.getOutputStream());
writer.write(bi);

4. In your JSP you put something like this:
<img src="MyServlet">

For more information have a look here:
http://java.sun.com/j2se/1.4.1/docs/guide/imageio/

Good luck!
0
 
anxx0018Author Commented:
Thank you, vk33 and Kennethxu.

So Imaging I/O API is supported by servlet.  Why java.awt.* and javax.swing.* are not supported by servlet?

I will try the imaging I/O API and if I have new questions, I will bother you guys further. Thanks a lot!
0
 
vk33Commented:
Well, both awt and swing are GUI libraries. They are used for building user interface in standalone programs and applets. Servlet is (certainly) running on server side and serving client requests such as HTTP GET and POST etc. Servlet has no "graphics context" (applet region, window, full screen), it's "invisible". Just handling requests and giving out responses, nothing else...

So, the purpose of awt and swing is maintaining GUI, not image processing. But of course some basic features are available. On the other hand, Imaging API is designed for processing images.

Regards!
0
 
anxx0018Author Commented:
vk33,

I tried the below program, but there is exception. I do not know why. Can you help me with this?

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import java.awt.*;
import java.awt.image.BufferedImage;

public class Try extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException {

      File f= new File("/home/anqian/Java/Graphics/map400grid.gif");
      BufferedImage bi = ImageIO.read(f);

      Iterator writers = ImageIO.getImageWritersByFormatName("gif");
      ImageWriter writer = (ImageWriter)writers.next();
      writer.setOutput(response.getOutputStream());
      writer.write(bi);

     }
}


The error is:
java.util.NoSuchElementException
      at javax.imageio.spi.FilterIterator.next(ServiceRegistry.java:804)
      at javax.imageio.ImageIO$ImageWriterIterator.next(ImageIO.java:814)
      at Try.doGet(Try.java:18)

Sorry for bother you again! Thanks a lot!
0
 
anxx0018Author Commented:
One more question:

Is java.awt.Graphics2D  standard java imaging API ? Thanks a lot!!!
0
 
anxx0018Author Commented:
Please ignore my last two questions. I have solved them. :)

But I have a new question here:

Make all necessarry changes upon the loaded image (e.g. drawing lines) using standart Imaging API.

      OutputStream out = response.getOutputStream();
      BufferedImage bi = ImageIO.read(f);
      Graphics2D image=bi.createGraphics();
      Line2D line = new Line2D.Float(0,0,400,400);
      image.draw(line);

????? How could I write this new image out?
      ??????       ImageIO.write((BufferedImage)image,"png",out);
Thanks a lot!!!!!
0
 
vk33Commented:
Thanks for the points! AFAIK this should work, no matter if you make changes to the image or not:

Iterator writers = ImageIO.getImageWritersByFormatName("png");
ImageWriter writer = (ImageWriter)writers.next();
writer.setOutput(response.getOutputStream());
writer.write(bi);

Any problems here?
0
 
anxx0018Author Commented:
Thank you very much, vk33.

Great! The program is working very well.  Thanks a lot !
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 6
  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now