Første
Planche 79

Udskrift af : Apaches Jakarta Projekt

Planche 1 : Apaches Jakarta Projekt

Fra et webløsnings synspunkt...

Planche 2 : CV

Leif Andersen - leander@blanet.dk Speciale: netværk, programmering, portering, PC, minidatamater, Unix, Java og Linux!

Planche 3 : Webløsninger

Buzzwords galore! Big business!

Planche 4 : Klient/serverløsninger

Tag en typisk 3-lags Client/server løsning

Traditionelt har man kodet klienten i Java, HTTP-serveren i PERL (eller Visual Basic) og hosten i Cobol.

Planche 5 : Webportal

En typisk "webløsning"

Buzzword: webportal

Planche 6 : Masser af alternativer

Planche 7 : Java er ikke eneste mulighed!

Freshmeat.net lister 76 projekter med ordet Portal

PHP mest populære..

Perl Java/J2EE også repræsenteret

Microsoft ASP?

Planche 8 : Avancerede Portaler

De fleste færdige webportaler løser udviklerteamets akutte problemer.

Man kan komme MEGET langt med lidt tilpasninger

Men...

Planche 9 : Webløsninger

Sammensæt Og så har man pludselig en e-handelsfordel!

Planche 10 : J2EE Arkitektur

JavaBeans, EJB, Servlets og JSP er en del af Enterprise Edition.

Planche 11 : J2EE Container og Services

Containere er grænsefladen mellem en komponent og de underliggende, platforms specifikke rutiner.

Før en J2EE-komponent kan udføres, skal den bygges op og placeret i sin rette container.

Planche 12 : J2EE pakker

For hver containertype findes en indpakningsstandard:

Planche 13 : J2EE udvikling:

Planche 14 : J2EE teknologier

Planche 15 : Servlets

Med Servlets kan man: Servlets kan erstatte CGI-scripts helt!

Planche 16 : Anvendelser

Som traditionel webserver: Som avanceret webteknologi

Planche 17 : Servletkomponenter

Er klasser i et klassehieraki.

Servlet er et interface. Ens klasse implementerer en eller flere af metoderne i interfacet.

HttpServlet er en klasse, hvor man overskriver de metoder, man ønsker at implementere.

Planche 18 : HTTP-Kommunikation

Et servlet-objekt modtager fra systemet to objekter for hver HTTP-request: Defineret som interfaces i en særlig pakke javax.servlet

Planche 19 : ServletRequest

Giver adgang til

Planche 20 : ServletResponse

Giver adgang til

Planche 21 : En HTTP-server

Eksempel:
    public class SimpleServlet extends HttpServlet
    { 
        /**
         * Handle the HTTP GET method by building a simple web page.
         */
        public void doGet (HttpServletRequest request,
                           HttpServletResponse response)
        throws ServletException, IOException
        {
            PrintWriter         out;
            String              title = "Simple Servlet Output";

            // set content type and other response header fields first
            response.setContentType("text/html");

            // then write the data of the response
         out = response.getWriter();

            out.println("<HTML><HEAD><TITLE>");
            out.println(title);
            out.println("</TITLE></HEAD><BODY>");
            out.println("<H1>" + title + "</H1>");
            out.println("<P>This is output from SimpleServlet.");
            out.println("</BODY></HTML>");
            out.close();
        }
    }

Planche 22 : Forklaring til eksempel

Planche 23 : Servletmiljø

En Servlet udføres af

Planche 24 : Servletters "levetid"

Som applets har servlets en livscyklus:

Metoder

Planche 25 : Nyttige muligheder

Som udgangspunkt kan servlet'er eksekveres multitrådet.

dvs. flere kan vær i gang med den samme servletklasse og objekt på samme tid.

Det er muligt at styre sessioner og cookies:

Planche 26 : Java Server Pages

Planche 27 : JSP fordele

Planche 28 : JSP versus ASP

Planche 29 : JSP Arktektur

Formål: til at udvikle...

Typisk:

En JSP-side oversættes til en java-klasse, der kaldes fra en request.

Oversættes kun en gang - nemlig efter hver ændring af indhold.

Planche 30 : Servlet Container

Planche 31 : Genereret kode (eksempel)

package jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import java.io.PrintWriter;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.Vector;
import org.apache.jasper.runtime.*;
import java.beans.*;
import org.apache.jasper.JasperException;
import java.text.*;
import  java.util.*;

public class _0005cjsp_0005cjsptest_0002ejspjsptest_jsp_0 
	extends HttpJspBase {

 static {
 }
 public _0005cjsp_0005cjsptest_0002ejspjsptest_jsp_0( ) {
 }

 private static boolean _jspx_inited = false;
 public final void _jspx_init() throws JasperException {
 }

 public void _jspService(HttpServletRequest request, 
   HttpServletResponse  response) 
     throws IOException, ServletException {

     JspFactory _jspxFactory = null;
     PageContext pageContext = null;
     HttpSession session = null;
     ServletContext application = null;
     ServletConfig config = null;
     JspWriter out = null;
     Object page = this;
     String  _value = null;
     try {
          if (_jspx_inited == false) {
             _jspx_init();
             _jspx_inited = true;
         }
         _jspxFactory = JspFactory.getDefaultFactory();
         response.setContentType("text/html");
         pageContext = _jspxFactory.getPageContext(this, 
       		request,response, "", true, 8192, true);

         application = pageContext.getServletContext();
         config = pageContext.getServletConfig();
         session = pageContext.getSession();
         out = pageContext.getOut();
         // begin
         out.write("\r\n<html>\r\n<body>\r\n");
        // end
        // begin [file="E:\\jsp\\jsptest.jsp";from=(3,2);to=(5,0)]
        Date d = new Date();
        String today =  DateFormat.getDateInstance().format(d);
        // end
        // begin
        out.write("\r\nToday is: \r\n<em> ");
        // end
        // begin [file="E:\\jsp\\jsptest.jsp";from=(7,8);to=(7,13)]
        out.print(today);</b>
        // end
        // begin
        out.write(" </em>\r\n</body>\r\n</html>\r\n");
        // end
    } catch (Exception ex) {
       if (out.getBufferSize() != 0)
       out.clear();
       pageContext.handlePageException(ex);
    } finally {
       out.flush();
       _jspxFactory.releasePageContext(pageContext);
    }
  }
}

Planche 32 : JSP adgangsmetoder

Planche 33 : Designfilosofier

Planche 34 : Designfilosofier

Planche 35 : Enterprise JavaBeans (EJB)

En Enterprise Java Bean (EJB) er et server-komponent, som indkapsler forretningslogik i en løsning.

Planche 36 : Fordele ved EJB

EJB forenkler udviklingen af store, distribuerede løsninger

Planche 37 : Hvornår anvendes EJB

Planche 38 : EJB typer

Planche 39 : EJB og Open Source

En EJB kører i en EJB-container. Den kunne være en webløsning i sig selv (WAR-distribution)

Planche 40 : Web Archive (WAR)

Der er 2 typer Webkomponenter

Planche 41 : Webkomponentens livscyklus

Planche 42 : WAR-formatet

Web ARchive er en katalogstruktur, pakket i jar-fil:

Alle "synlige" filer (html mv.) placeres i under Document Root

Alle "usynlige" filer (config, data mv.) placeres under WEB-INF

...eller udenfor WAR (databaser)

Planche 43 : Jakarta Tomcat

Planche 44 : Installation

Det binære zip-format er platformsuafhængig:

Der er også en selvinstallerende version til Win32

Planche 45 : Versioner

Version 3.x er produktionsmoden - men måske ikke så "smart".

Planche 46 : Startupbillede

Planche 47 : Tomcat-struktur (V.4.0.1)

Filstruktur (Ny i forhold til 3.x) og så er der webapps

Planche 48 : webapps-kataloget

Heri placerer man webapplikationerne

Planche 49 : Jetspeed

En "færdig" webløsning (Webapplicatio)

Planche 50 : Jetspeeds fordele

Planche 51 : Installation

Meget nemt at installere Sådan skal det gøres

Planche 52 : Startbillede

Planche 53 : Efter login

Planche 54 : En Jetspeed-site (DiverseBooks.com)

Planche 55 : Men...

Jetspeed-projektet har MEGET lav aktivitet

Planche 56 : Turbine

Byggeklodserne til DIN webløsning? =hTurbine projektet =hInstallation Hent Turbine TDK - et komplet udviklingsmiljø

Planche 57 : Konfiguration og start

1. README_FIRST.txt I roden af den nye folder. 2. GETTING_STARTED.txt i webapps/'navn'/WEB-INF/build

Planche 58 : Efter et lille stykke tid!

Planche 59 : Login (turbine/turbine)

Planche 60 : Turbine TDK

Bruger som udgangspunkt Velocity (se oversigt)

Skift til JSP - se FAQ

Ret browser mod http://localhost:8080/ for lokal dokumentation

Planche 61 : Turbine TDK-komponenter

(Se i WAR-folder lib)

Planche 62 : Turbine - præsentation

Det første man vil gøre er at ændre præsentationen (HTML) Velocity: Eksempel på Index.vm

For JSP se JSP-Howto

Planche 63 : Turbine - Model

Planche 64 : Torque

Torque er standalone og kan anvendes af alle applikationsprogrammører i Java

Planche 65 : Torque eksempel

Turbine-testapp har en simpel databasestruktur

definition (xml-fil)

Java-fil (en af dem)

SQL-fil

Planche 66 : Log4J

Log4J er et separat sub-projekt under Apache.

Planche 67 : Gumpa

Et socialt(?) eksperiment...

Skalerer

En Metamake-service!

Planche 68 : Gump - beskrivelse

Hver 6. time køres Gump

Planche 69 : Gump-output oversigt

Planche 70 : Gump-output tomcat (udsnit)

Planche 71 : Gump - anbefaling

Ved større projekter

Bør et projekt "checkpointes" a.l.a. gump

Planche 72 : Jakarta-projektet

Består af en række subprojekter

Hver af disse kan have delprojekter - også delt med andre

Klip fra officielle hjemmesider

Planche 73 : Alle sub-projekter (alfabetisk)

Planche 74 : Alle subprojekter (alfabetisk)

Planche 75 : Alle subprojekter (alfabetisk)

Planche 76 : Alle subprojekter (alfabetisk)

Planche 77 : Alle subprojekter (alfabetisk)

En del har også under-underprojekter.

Planche 78 : XML-projektet

Er tæt knyttet til Jakarta

Planche 79 : Andre Apache-projekter

En del forudsætter også andre Open Source projekter, herunder XML og JUnit. Det gamle Apache Javaprojekt - java.apache.org - indeholder stadig JServ, Jyve og JSSI - resten er flyttet til Jakarta.


© 2001 BLA*net - Leif E. Andersen, leander@blanet.dk (Open Content License)