30. Juli 2010  
  Suche:
 
  Basics
  Code-Galerie
  Forum
  FAQ
  Tipps & Tricks
  Literatur
  Knowledge Base
  Workshops
  JSP-Hosting
  JSP-Engines
  Jobbörse
  Links
  JSP-Sites
  Newsletter
  JSP-Test
  Impressum
  Username:
  
  Passwort:
  
  

  Jetzt registrieren
  Warum registrieren?

  Valid HTML 4.01!
  Valid CSS!

JSP-Vererbung

von shark,  16.10.2004 10:44:35   [vote]
Seit der Publikation der Servlet Spezifikation 2.2 besteht die Möglichkeit das HttpJspPage Interface zu implementieren und dabei die implementierende Klasse des Interfaces als Basisklasse für JSP-Seiten zu verwenden.

Diese Technik entfaltet sich besonders gut in Modell-1 basierten WEB-Applikationen. MVC Anwendungen bieten im Gegensatz zu Modell-1 Applikationen von Hause aus die Möglichkeit Aktionsklassen durch Vererbung zu erweitern.

Modell-1 Applikationen können aufgrund der Vielzahl von JSP-Seiten schnell, unübersichtlich und schlecht wartbar werden, wobei auch solche Anwendungen mit JSP-Vererbung und einem JSP-basierten Frontcontroller strukturiert werden können.

Gerade der Frontcontroller ist ein gutes Beispiel für eine "Best Practice". Dabei basiert ein Controller bei klassischen Modell-2 konformen Anwendungen in der Regel auf einem Servlet und nur partiell auf einer JSP-Seite.

Die nachfolgende Klasse implementiert das HttpJspPage Interface und ist ein Beispiel dafür, wie eine Versionsinformation in einer JSP-Seite ausgegeben werden kann. Es besteht bei der Wahl dieser Technik auch die Möglichkeit JSP-Seiten über einen eleganten Weg mit Konfigurationsdaten zu versorgen ohne dass diese Funktionalität über viele JSP-Seiten verteilt werden müsste.


JSP-Basisklasse:
--------------------------

package de.jsp.base;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.HttpJspPage;

/**
* base class for jsp pages which holds version
* information for jsp application; this technique
* may also be used to initialize jsp page with application
* specific initialization data which should be shared by
* jsp pages, eg. database relating information in cases
* of database access;
*
* the "HttpJspPage" interface is part of the servlet 2.2
* specification and therefore a servlet 2.2 complaint
* servlet engine and "javax.servlet" package is necessary
* to build and run this application;
*
* "HttpJspPages" interface includes the following jsp methods:

*_jspService(): this method corresponds to the body of the jsp page 
*
* "HttpJspPages" interface inherits the following methods
* from the Servlet interface:
*
* init()
* destroy()
* service()
* getServletConfig()
* getServletInfo()
*
* @see servlet specification 2.2
*/
public abstract class JspHeader implements HttpJspPage {
   
   /**
    * version information
    */
   final private String VERSION_KEY  = "version-info";
   final private String VERSION_VALUE= "JSP-Application / Release 1.1 / 15.10.2004";
   
   /**
    * class information
    */
   final private String CLASS_INFO = "JSP-Page-Superclass";
   
   /**
    * servlet config object reference
    */
   private ServletConfig servletConfig = null;
   
   /*****************************************************************
    * jsp interface methods
    *****************************************************************/

  /**
    * jsp init method
    */
    public void jspInit() {}
   
   /**
    * jsp destroy method
    */
    public void jspDestroy() {}
      
  /**
   * jsp service method
   * @param servlet request
   * @param servlet response
   * @exception ServletException
   * @exception IOException
   */
    public void _jspService(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {}
       
   /***********************************************************
    * servlet interface methods
    ***********************************************************/
      
   /**
    * servlet init method
    * (called by servlet container)
    * @param servlet config
    */
   public void init(ServletConfig conf) {                     
      this.servletConfig = conf;
   }
   
   /**
    * servlet destroy method
    * (called by servlet container)
    */
   public void destroy() {}

   /**
    * servlet service method
    * (called by servlet container)
    * @param servlet request
    * @param servlet response
    * @exception ServletException
    * @exception IOException
    */
   public void service(ServletRequest request, ServletResponse response)
      throws ServletException, IOException {
 
        // version information should be set only once 
      if(null == ((HttpServletRequest) request).getSession().getAttribute(VERSION_KEY)) {
      
         // set the version information of this web application
         ((HttpServletRequest) request).getSession().setAttribute(VERSION_KEY,VERSION_VALUE);   
      }
             
      // do additional service initialization
      _jspService((HttpServletRequest) request, (HttpServletResponse) response);       
   }
         
    /**
    * get the servlet config object
    * @return servlet config
    */
    public ServletConfig getServletConfig() {
       return(servletConfig);
    }
   
    /**
    * get servlet info identifier
    * @return servlet info identifier
    */
    public String getServletInfo() {
       return(CLASS_INFO);
    }             
}


JSP-Seite:
------------------

<%@page extends="de.jsp.base.JspHeader"%>
<b><%=request.getSession().getAttribute("version-info")%></b>
[Druckansicht]    [Beitrag versenden]
<< zurück  Kommentieren


Hinweis: Auf dieser Seite liegen Links zu anderen Seiten im Internet. Für alle diese Links gilt: Wir betonen ausdrücklich, daß wir keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten haben. Deshalb distanzieren wir uns hiermit ausdrücklich von allen Inhalten aller gelinkten Seiten auf dieser Homepage und machen uns ihre Inhalte nicht zueigen. Diese Erklärung gilt für alle auf unserer Homepage angebrachten Links

Redaktion/Betreiber von JSP-Develop übernehmen keinerlei Gewährleistung und Verantwortung für die Richtig- und/oder Vollständigkeit von den auf den Webseiten JSP-Develop veröffentlichten Source Codes. Die Verantwortung der Verwendung/Anwendung sowie etwaige Modifikation der hier veröffentlichten Sourcen obliegt einzig dem Benutzer der Webseite, welche die veröffentlichten Sourcen in einer Applikation/Anwendung einsetzt. Durch das Kopieren und/oder Benutzen der Sourcen in einer Applikation/Anwendung bzw. etwaigen Abschriften wird dieser Rechtshinweis anerkannt.

Java, JSP, JavaServer Pages, J2EE, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and in other countries. IBM, WebSphere are trademarks or registered trademarks of International Business Machines Corporation. Other trademarks and registered trademarks are the property of their respective owners.