Moin moin!
Ich habe eine Applikation geschrieben, die online ein gif-Bild erzeugen soll. Das habe ich die beiden folgenden Klassen geschrieben:
Meine web.xml-Datei sieht folgendermaßen aus:
Unter dem Verzeichnis WEB-INF/classes liegen die Verzeichnisse fbwi/prog4/. Darin liegt die Klasse CreateImage.class. Im Verzeichnis classes liegt die Datei GifServlet.java bzw. -.ckass. Beim Kompilieren funktioniert ja alles super. Wenn ich allerdings
http://localhost:8080/examOwn/gifmaker?text=Hallo+Welt
aufrufe, bekomme ich eine Fehlermeldung. Und zwar folgende:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet execution threw an exception
root cause
java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
sun.awt.X11GraphicsEnvironment.access$000(X11GraphicsEnvironment.java:53)
sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:142)
java.security.AccessController.doPrivileged(Native Method)
sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:131)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:164)
java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:6 8)
java.awt.Window.init(Window.java:270)
java.awt.Window.<init>(Window.java:318)
java.awt.Frame.<init>(Frame.java:419)
java.awt.Frame.<init>(Frame.java:384)
fbwi.prog4.CreateImage.create(CreateImage.java:13)
GifServlet.doGet(GifServlet.java:15)
javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
Kann mir jemand sagen, was ich da falsch mache?
Ich habe eine Applikation geschrieben, die online ein gif-Bild erzeugen soll. Das habe ich die beiden folgenden Klassen geschrieben:
Code:
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class GifServlet extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
String text = req.getParameter("text"); // koennte null sein
res.setContentType("image/gif");
OutputStream out = res.getOutputStream();
// Hilfsklasse im Package fbwi.prog4 aufrufen:
fbwi.prog4.CreateImage.create(text,out);
// alternativ: import fbwi.prog4;
//CreateImage.create(text,out);
}
}
Code:
package fbwi.prog4;
/* Die package-Anweisung legt den Namen des Packets fest. Sie muss vor allen anderen Anweisungen in
* der Datei stehen. Die übersetzte class-Datei muss sich im Verzeichnis ../WEB-INF/classes/fbwi/prog4
* befinden.
* Beim Übersetzen mit JCreator werden die Verzeichnisse für die packages automatisch erzeugt.
*/
import java.awt.*;
import java.io.*;
import Acme.JPM.Encoders.GifEncoder; // in gif.jar
public class CreateImage{
public static void create(String text, OutputStream out){
Frame f = new Frame();
// Grafik-Kontext herstellen, ohne ein Fenster zu öffnen:
f.addNotify();
// Abmessungen des Bildes:
int breite = 400;
int hoehe = 150;
// Leeres internes Fenster erzeugen:
Image img = f.createImage(breite,hoehe);
// Malen ins Bild:
Graphics g = img.getGraphics();
// Nun können alle Grafikmethoden der Klasse Graphics benutzt werden:
g.setColor(Color.BLUE);
g.fillRect(0,0,breite,hoehe);
// gelbes Oval:
g.setColor(Color.YELLOW);
g.drawOval(5,5,breite-10,hoehe-10);
// Schriftart und -größe festlegen:
Font font = new Font("SansSerif", Font.ITALIC,50);
g.setFont(font);
// Fontmetrik:
FontMetrics fm = g.getFontMetrics();
int textBreite = fm.stringWidth(text);
int textHoehe = fm.getAscent();
// Textkoordinaten:
int x = breite/2 - textBreite/2;
int y = hoehe/2 + textHoehe/2;
// Schatten (4 Pixel Versatz) in rot schreiben:
g.setColor(Color.RED);
g.drawString(text,x+4,y+4);
// Text in grün schreiben:
g.setColor(Color.GREEN);
g.drawString(text,x,y);
// Bild in gif umwandeln:
try{
GifEncoder gifenc = new GifEncoder(img,out);
gifenc.encode();
}catch(IOException e){
System.err.println(e.toString());
}
}// end create()
}
Meine web.xml-Datei sieht folgendermaßen aus:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app >
<servlet>
<servlet-name>RequestHandlingExample</servlet-name>
<servlet-class>RequestHandlingExample</servlet-class>
</servlet>
<servlet>
<servlet-name>aufg1</servlet-name>
<servlet-class>Prog4Ueb8Aufg1</servlet-class>
</servlet>
<servlet>
<servlet-name>aufg2</servlet-name>
<servlet-class>Prog4Ueb8Aufg2</servlet-class>
</servlet>
<servlet>
<servlet-name>aufg3</servlet-name>
<servlet-class>Prog4Ueb8Aufg3</servlet-class>
</servlet>
<servlet>
<servlet-name>aufg4</servlet-name>
<servlet-class>GifServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RequestHandlingExample</servlet-name>
<url-pattern>/servlet/RequestHandlingExample</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>aufg1</servlet-name>
<url-pattern>/servlet/aufg1</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>aufg2</servlet-name>
<url-pattern>/servlet/aufg2</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>aufg3</servlet-name>
<url-pattern>/servlet/aufg3</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>aufg4</servlet-name>
<url-pattern>/gifmaker</url-pattern>
</servlet-mapping>
</web-app>
Unter dem Verzeichnis WEB-INF/classes liegen die Verzeichnisse fbwi/prog4/. Darin liegt die Klasse CreateImage.class. Im Verzeichnis classes liegt die Datei GifServlet.java bzw. -.ckass. Beim Kompilieren funktioniert ja alles super. Wenn ich allerdings
http://localhost:8080/examOwn/gifmaker?text=Hallo+Welt
aufrufe, bekomme ich eine Fehlermeldung. Und zwar folgende:
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet execution threw an exception
root cause
java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
sun.awt.X11GraphicsEnvironment.access$000(X11GraphicsEnvironment.java:53)
sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:142)
java.security.AccessController.doPrivileged(Native Method)
sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:131)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:164)
java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:6 8)
java.awt.Window.init(Window.java:270)
java.awt.Window.<init>(Window.java:318)
java.awt.Frame.<init>(Frame.java:419)
java.awt.Frame.<init>(Frame.java:384)
fbwi.prog4.CreateImage.create(CreateImage.java:13)
GifServlet.doGet(GifServlet.java:15)
javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
Kann mir jemand sagen, was ich da falsch mache?