Java - Applets und Servlets


Applets

Java Applet APIs

package java.applet;

import java.awt.*;
import java.awt.image.ColorModel;
import java.net.URL;
import java.net.MalformedURLException;
import java.util.Hashtable;
import java.util.Locale;

public class Applet extends Panel {

    public boolean isActive() 
    public URL getDocumentBase() 
    public URL getCodeBase() 
    public String getParameter(String name) 
    public AppletContext getAppletContext() 
    public void resize(int width, int height) 
    public void resize(Dimension d) 
    public void showStatus(String msg) 
    public Image getImage(URL url) 
    public Image getImage(URL url, String name) 
    public final static AudioClip newAudioClip(URL url) 
    public AudioClip getAudioClip(URL url) 
    public AudioClip getAudioClip(URL url, String name) 
    public String getAppletInfo() 
    public Locale getLocale() 
    public String[][] getParameterInfo() 
    public void play(URL url) 
    public void play(URL url, String name) 

    public void init() 
    public void start() 
    public void stop() 
    public void destroy() 
}
public class Panel extends Container ...

public class Container extends Component 

public class Component extends Object implements ... {
      
    public void paint(Graphics g) { }

    ...
} 

Hello World Beispiel

Übergabe des Parameters 'nachricht' und Zeichnung des Textes in 'paint'.

import java.awt.*;
import java.applet.*;

public class HelloWorldApplet extends Applet {

    String msg = "";

    public void init () {
      msg = getParameter("nachricht");
    }

    public void paint(Graphics g) {
       g.drawString("Hello World ...",10,50);
       g.drawString(msg,10,75);
       g.drawString("... vom Applet.",10,100);
    }
}

Einbettung in HTML mit dem Applet-Element.

<applet code="HelloWorldApplet.class" width="150" height="150">
<param  name="nachricht" value="mit Parameter">
</applet>

Beispiele

Hello World Applet

Uhren-Demo Applet

Demo Applets


Servlets

Tomcat-Logo

 

Java Servlet APIs

Basis Funktionalität

package javax.servlet;

public interface Servlet {

    public void init(ServletConfig config) throws ServletException;

    public ServletConfig getServletConfig();
  
    public void service(ServletRequest req, ServletResponse res)
	throws ServletException, IOException;
	
    public String getServletInfo();
    
    public void destroy();
}
public interface ServletConfig { }

public interface ServletRequest {

    public int getContentLength();

    public ServletInputStream getInputStream() throws IOException; 

    ....
}

public interface ServletResponse {

    public ServletOutputStream getOutputStream() throws IOException;

    public void setContentType(String type);
 
    ...
}
public abstract class GenericServlet 
    implements Servlet, ServletConfig, java.io.Serializable
{

    public void init(ServletConfig config) throws ServletException 

    public abstract void service(ServletRequest req, ServletResponse res)
	throws ServletException, IOException;

    ...    
}

Hello World Beispiel mit GenericServlet

import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;

public class SimpleHelloWorld extends GenericServlet {

    private int aufrufe;

    public void init(ServletConfig config) throws ServletException 
    {
           super.init(config);
           aufrufe=0;
    }

    public void service(ServletRequest request,
                      ServletResponse response)
        throws IOException, ServletException
    {
        response.setContentType("text/html");
        ServletOutputStream out = response.getOutputStream();

        out.println("<html>");
        out.println("<head>");

	String title = "Hello World";
        aufrufe++;

	out.println("<title>" + title + "</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");

        out.println("<h1>" + title + "</h1>");
        out.println("<h2>" + aufrufe + " Aufrufe</h2>");
        out.println("</body>");
        out.println("</html>");
    }
}

Erweiterte Funktionalität zu HTTP

package javax.servlet.http;

public abstract class HttpServlet extends GenericServlet
    implements java.io.Serializable
{
    public HttpServlet() 

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException

    protected long getLastModified(HttpServletRequest req) 

    private void doHead(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException

    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException

    protected void service(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException

    ...
}

Hello World Beispiel mit HttpServlet

import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldExample extends HttpServlet {

    ResourceBundle rb = ResourceBundle.getBundle("LocalStrings");

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head>");

	String title = rb.getString("helloworld.title");

	out.println("<title>" + title + "</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");

        out.println("<h1>" + title + "</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

Java Server Pages (JSP)

Hello World Beispiel mit JSP

<html>
<head>
<title>Hello World JSP</title>
</head>

<body bgcolor="white">
<hr>
<%
    out.println("<h2>Hallo Welt! von JSP</h2>");
%>
<hr>
</body>
</html>

Apache Jakarta Tomcat Projekt

Tomcat-Logo

 

Varianten der Installation

  1. Standalone
    Tomcat stellt einen Web-Server und den Servlet/JSP Server

  2. als Teil von Apache httpd
    der httpd führt via mod_jserv die JVM plus Tomcat-Klassen als Subprozess aus

  3. getrennt von Apache httpd
    Tomcat stellt einen separaten Prozess für Servlets und JSP
    der httpd kommuniziert via mod_jserv und einem TCP/IP basierten Protokoll (AJP V12) mit Tomcat

Standalone Installation

Installation als Subprozess von Apache

Installation separat zu Apache

Tomcat Konfiguration

  1. server.xml definiert die Tomcat Basiskonfiguration

  2. web.xml definiert die Tomcat Grundkonfiguration für Web-Applikationen zusammen mit web.xml Dateien für jede Web-Applikation für spezifischen Konfiguration der Applikation

Tomcat-Web-Administration
Tomcat Web-Administration

server.xml

Grundaufbau (Tomcat 4.x):

<Server>
  <Service>
    <Connector />
    <Engine>
      <Host>
        <Context />
      </Host>
    </Engine>
  </Service>
</Server>

Beispiel (Tomcat 4.x):

<Server port="8005" shutdown="SHUTDOWN" debug="0">

  <!-- Define the Tomcat Stand-Alone Service -->
  <Service name="Tomcat-Standalone">

    <!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
    <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
               port="8080" minProcessors="5" maxProcessors="75"
               enableLookups="true" redirectPort="8443"
               acceptCount="100" debug="0" connectionTimeout="20000"
               useURIValidationHack="false" disableUploadTimeout="true" />

    <!-- Define the top level container in our container hierarchy -->
    <Engine name="Standalone" defaultHost="localhost" debug="0">

      <!-- Global logger unless overridden at lower levels -->
      <Logger className="org.apache.catalina.logger.FileLogger"
              prefix="catalina_log." suffix=".txt"
              timestamp="true"/>

      <!-- Define the default virtual host -->
      <Host name="localhost" debug="0" appBase="webapps"
       unpackWARs="true" autoDeploy="true">

        <!-- Tomcat Examples Context -->
        <Context path="/examples" docBase="examples" debug="0"
                 reloadable="true" crossContext="true">
          <Logger className="org.apache.catalina.logger.FileLogger"
                     prefix="localhost_examples_log." suffix=".txt"
              timestamp="true"/>
        </Context>

      </Host>
      ...
    </Engine>
  </Service>
  ...
</Server>

Tomcat Verzeichnisstruktur

Aufbau der Web-Applikationen

web.xml

Aufbauprinzip:

<web-app>
  <display-name />
  <context-param />
  <filter />
  <filter-mapping />
  <listener />
  <servlet />
  <servlet-mapping >
      <url-pattern />
  </servlet-mapping >
  <session-config />
  <mime-mapping />
  <welcome-file-list />
  <security-constraint />
</web-app>

Die Reihenfolge der Elemente ist signifikant, da die URL-Muster in dieser Reihenfolge getestet werden. Die URL-Muster werden immer relativ zum aktuellen Verzeichnis interpretiert, auch wenn sie mit / beginnen.

Beispiel mit globalen Definitionen:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
<web-app>
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.tomcat.servlets.DefaultServlet
        </servlet-class>
    </servlet>
    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>org.apache.tomcat.servlets.InvokerServlet
        </servlet-class>
    </servlet>
    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.runtime.JspServlet
        </servlet-class>
    </servlet>
    ...
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>
    ...

    <mime-mapping>
        <extension>txt</extension>
        <mime-type>text/plain</mime-type>
    </mime-mapping>
    ...
</web-app>

Beispiel mit applikationsspezifischen Definitionen:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
<web-app>
    <servlet>
        <servlet-name>hallo</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
        <init-param>
            <param-name>von</param-name>
            <param-value>Karl Dall</param-value>
        </init-param>
    </servlet>

    <servlet-mapping>
        <servlet-name>hallo</servlet-name>
        <url-pattern>/hallo.html</url-pattern>
    </servlet-mapping>

    <security-constraint>
    ...
    </security-constraint>

    <login-config>
    ...
    </login-config>
</web-app>

Die Bedeutung der Elemente ist wie in der globalen web.xml Datei

Wenn sich die Anwendung im Verzeichnis /opt/jakarta/tomcat/webapps/beispiel befindet, bezieht sich /hallo.html auf den URL http://host:port/beispiel/hallo.html.

Manager für Applikationen

Tomcat-Web-Application-Manager
Tomcat Web-Application Manager (1)

Tomcat-Web-Application-Manager
Tomcat Web-Application Manager (2)


Zusammenfassung und Ausblick

 


© Universität Mannheim, Rechenzentrum, 1998-2004.

Heinz Kredel

Last modified: Mon May 31 14:47:18 CEST 2004