grails - weiterführende themen zu internet- und www ... · ubersicht uber grails [1] groovy...

18
Grails Weiterf¨ uhrende Themen zu Internet- und WWW-Technologien Matthias Springer 06. Juni 2011 Matthias Springer Grails

Upload: others

Post on 05-Sep-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

GrailsWeiterfuhrende Themen zu Internet- und WWW-Technologien

Matthias Springer

06. Juni 2011

Matthias Springer Grails

Page 2: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Ubersicht

1 Was ist Grails?

2 Ubersicht uber Grails

3 MVC-Konzept

4 Groovy Beispiele

5 Tutorial: Kleiner Notizblock

Matthias Springer Grails

Page 3: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Grails Web Application Framework

Matthias Springer Grails

Page 4: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Ubersicht uber Grails [1]

Groovy Programming Language

Hibernate: object-relational mapping

Hyperthreaded Structured Query Language Database(HSQLDB)

Spring framework

SiteMesh (web-page layout and decoration framework)

Apache Tomcat / Jetty

Matthias Springer Grails

Page 5: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

MVC - Model, View, Controller

[2]

Model: Datenstruktur + Geschaftslogik

View: Prasentation, Darstellung der Daten

Controller: Auswertung von Benutzeraktionen

Matthias Springer Grails

Page 6: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Grails-Ordnerstruktur

grails-app

conf: url mappings, bootstrapper, configcontrollers: controllerdomain: domain classesi18n: Ubersetzungservices: Grails servicesviews: GSPs (Groovy Server Pages), JSPs (Java Server Pages)

lib: JAR-Bibliotheken

src: sonstige Groovy- und Java-Quelldateien

target: Ausgabeverzeichnis

web-app: statische Ressourcen, z.B. Bilder, CSS, JS, ...

Matthias Springer Grails

Page 7: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Groovy Beispiele: dynamische Typisierung

String textStatic = "Hallo Welt"

def textDynamic = "Hallo Welt"

assert textDynamic.length() ==

textStatic.length()

In Java nicht moglich

Matthias Springer Grails

Page 8: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Groovy Beispiele: Closures

Lambda-Ausdrucke

def closure = {x -> println 5 + x}; closure(5)

def closure = {println 5 + it}; closure(5)

def closure = {return it + 2}; println closure(5)

def closure = {it + 2}; println closure(5)

In Java 6 nicht moglich

Matthias Springer Grails

Page 9: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Groovy Beispiele [1]

def list = ["Hello", 2, "World"]; list += [4, 5]

[1, 2, 3].collect {it * it}assert ["Mo":"Montag", "Di":"Dienstag"].Mo ==

["Mo":"Montag", "Di":"Dienstag"]["Mo"]

(1..10).each {// for int it = 1 to 10}def tag = "Montag"; println "Heute ist ${tag}"(new GroovyShell()).evaluate("println ’Hello’ +

’World’")

Regulare Ausdrucke, Stringmanipulationen

Matthias Springer Grails

Page 10: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Kleiner Notizblock

1 package n o t i z b l o c k23 c l a s s Benutze r {4 s t a t i c hasMany = [ n o t i z e n : Not i z ]56 S t r i n g vorname7 S t r i n g a n s c h r i f t8 i n t a l t e r9 }

Benutzer.groovy

1 package n o t i z b l o c k23 c l a s s Not i z {4 s t a t i c be longsTo = [ e r s t e l l e r : Benutze r ]56 S t r i n g t e x t7 Date datum8 }

Notiz.groovy

Matthias Springer Grails

Page 11: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Domain class Assoziationen [4]

static belongsTo = [ersteller:Benutzer]

Besitzer definieren

Benutzer ersteller

static hasMany = [notizen:Notiz]

*-to-many-Assoziation

java.util.Set<Notiz> notizen

bei Delete keine Kaskadierung

Referentielle Integritat immer sichergestellt

Matthias Springer Grails

Page 12: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Grails Object Relational Mapping (GORM)

1 CREATE TABLE benu t z e r2 (3 i d b i g i n t NOT NULL ,4 ” v e r s i o n ” b i g i n t NOT NULL ,5 ” a l t e r ” i n t e g e r NOT NULL ,6 a n s c h r i f t c h a r a c t e r v a r y i n g (255) NOT NULL ,7 vorname c h a r a c t e r v a r y i n g (255) NOT NULL ,8 CONSTRAINT benu t z e r pk e y PRIMARY KEY ( i d )9 )

benutzer.sql

Matthias Springer Grails

Page 13: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Grails Object Relational Mapping (GORM)

1 CREATE TABLE no t i z2 (3 i d b i g i n t NOT NULL ,4 ” v e r s i o n ” b i g i n t NOT NULL ,5 datum timestamp wi thout t ime zone NOT NULL ,6 e r s t e l l e r i d b i g i n t NOT NULL ,7 ” t e x t ” c h a r a c t e r v a r y i n g (255) NOT NULL ,8 CONSTRAINT no t i z p k e y PRIMARY KEY ( i d ) ,9 CONSTRAINT fk6424 f44 f5ad30d8 FOREIGN KEY (

e r s t e l l e r i d )10 REFERENCES benu t z e r ( i d ) MATCH SIMPLE11 )

notiz.sql

Matthias Springer Grails

Page 14: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Controller

1 c l a s s He l l o C o n t r o l l e r {2 de f s a yHe l l o = {3 r end e r ” He l l o ${params . name} i t ’ s ” + new j a v a . u t i l

. Date ( )4 }5 }

HelloController.groovy

[2]

Matthias Springer Grails

Page 15: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Controller: Parameter

Parameterubergabe (fur Debug-Zwecke)

HTTP POSThttp://localhost:8080/hello/hello/world?p1=1337

http://localhost:8080/hello/hello/world/512

Zugriff auf Parameter: params

Zugriff Java Servlet-Schnittstellen: request, response,servletContext, session [5]

Matthias Springer Grails

Page 16: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Controller: Ablaufdiagramm

Matthias Springer Grails

Page 17: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Quellennachweis

[1] Abdul-Jawad, B.: Groovy Grails Recipes. Apress, 2009.

[2] Rocher, G. K.: The Definitive Guide to Grauls. Apress, 2006.

[3] Grails Quick Referencehttp://grails.org/doc/latest/ref/Constraints/

Usage.html

[4] Grails Quick Referencehttp://grails.org/doc/latest/ref/Domain%

20Classes/hasMany.html

[5] http://download.oracle.com/javaee/6/api/javax/

servlet/http/HttpServletRequest.html

Matthias Springer Grails

Page 18: Grails - Weiterführende Themen zu Internet- und WWW ... · Ubersicht uber Grails [1] Groovy Programming Language Hibernate: object-relational mapping Hyperthreaded Structured Query

Anhang: Domain class constraints [3]

homeEmail(email:true)

name(inList:(‘Joe’, ‘Fred’, ‘Bob’))

login(matches:‘�regex�’)

age(max:100)

age(nullable:true)

age(range:18..100)

login(unique:true)

login(validator: {it.startsWith(‘user’)})

Matthias Springer Grails