Upload
ziyaaskerov
View
1.059
Download
5
Tags:
Embed Size (px)
DESCRIPTION
Build modern, sophisticated and robust Groovy web applications in record time !
Citation preview
IEEE Day 2013
01 October 2013, Qafqaz University
Ziya AskerovJava Software DeveloperCybernet LLC
Build modern, sophisticated and robust Groovy web applications in record time !
Ziya Askerov http://www.professionals.az
Contents
Java Web Technologies Overview Groovy Scripting Language Grails Framework Convention Over Configuration GORM (Grails Object Relational Mapping) GSP (Groovy Server Pages) Grails Tags Web Layer Grails Plugins Spring Security Configuration
JAVA WEB TECHNOLOGIES
What is Groovy ?
Is an agile and dynamic language for the Java Virtual Machine
Makes modern programming features available to Java developers with almost-zero learning curve
Increases developer productivity
Compiles straight to Java bytecode so you can use it anywhere you can use Java
Seamlessly integrates with all existing Java classes and libraries
What is Grails?
Full stack MVC framework for web apps Exploits the awesome power of Groovy Leverages proven staples
– Hibernate– Spring– Sitemesh
Works on JVM
GRAILS ARCHITECTURE
Why GRAILS?
Java web development as it stands today is dramatically more complicated than it needs to be
Most modern web frameworks in the Java space are over complicated and don't embrace the Don't Repeat Yourself (DRY) principles.
Why GRAILS?
- An easy to use Object Relational Mapping (ORM) layer built on Hibernate
- An expressive view technology called Groovy Server Pages (GSP)
- A controller layer built on Spring MVC
- A transactional service layer built on Spring's transaction abstraction
Why GRAILS?
Based on battle tested and proven Java frameworks (Spring, Hibernate, SiteMesh, Quartz, etc)
Based on Groovy language GORM(Grails Object Relational Mapping) Doesn’t stop you from using the power of underlying frameworks Easy to set-up and get started Minimal server restart required while development Convention over Configuration / No painful XML configuration &
XML Management Tag Lib Authoring mechanism Tons of available plugins
Convention Over Configuration
Grails uses "convention over configuration" to configure itself
This typically means that the name and location of files is used instead of explicit configuration
No config files
No action mappings
GRAILS AND SECURITY
All standard database access via GORM domain objects is automatically SQL escaped to prevent SQL injection attacks
Grails link creating tags (link, form, createLink, createLinkTo and others) all use appropriate escaping mechanisms to prevent code injection
Grails provides codecs to let you trivially escape data when rendered as HTML, JavaScript and URLs to prevent injection attacks here.
XSRF attacks prevention with useToken
GORM
GORM is Grails' object relational mapping (ORM) implementation.
Under the hood it uses Hibernate (a very popular and flexible open source ORM solution)
GRAILS ARCHITECTURE
GORM
Domain Modelling in GORM Persistence Basics Querying with GORM Saving and Updating Dynamic Finders Eager and Lazy Fetching
GORM DOMAIN MODELING
CONSTRAINTS
blankcreditCardemailinListmatchesmaxmaxSizeminminSizenotEqualnullablerangescalesizeuniqueurl
SAVING AND UPDATING
def p = Person.get(1) p.save()
def p = Person.get(1)p.save(flush: true)
def p = Person.get(1)p.delete(flush: true)
Querying With GORM
def books = Book.list()
def books = Book.list(offset:10, max:20)
def books = Book.list(sort:"title", order:"asc")
def book = Book.get(23)
def books = Book.getAll(23, 93, 81)
Dynamic Finders
def book = Book.findByTitle("The Stand")
book = Book.findByTitleLike("Harry Pot%")
book = Book.findByReleaseDateBetween(firstDate, secondDate)
book = Book.findByReleaseDateGreaterThan(someDate)
Hibernate's Criteria API
GRAILS AND MVC
Controllers, Services
Dependency Injection
TAGS
<g:form name="myForm" action="myaction" id="1">...</g:form>
<select onchange="${remoteFunction(action: 'bookByName', update: [success: 'great', failure: 'ohno'], params: '\'bookName=\' + this.value')}"> <option>first</option>
<option>second</option>
</select>
<g:render template="bookTemplate" />
<g:paginate controller="book" action="list" total="${bookCount}" />
<g:if test="${name == 'fred'}"> Hello ${name}! </g:if>
<g:include controller="book" action="list" />
GRAILS PLUGINS
Spring Security Core Plugin Spring Security UI Plugin Quartz Plugin Quartz Monitor Plugin Mail Plugin XSS sanitizer Plugin
SPRING SECURITY ANNOTATIONS
SPRING SECURITY ANNOTATIONS
Spring Security TagLib
<sec:ifLoggedIn> Welcome Back! </sec:ifLoggedIn>
<sec:ifAllGranted roles="ROLE_ADMIN,ROLE_SUPERVISOR">secure stuff here</sec:ifAllGranted>
<sec:ifAnyGranted roles="ROLE_ADMIN,ROLE_SUPERVISOR">secure stuff here</sec:ifAnyGranted>
Welcome Back <sec:loggedInUserInfo field="fullName"/>
Spring Security Utils
authoritiesToRoles() getPrincipalAuthorities() parseAuthoritiesString() ifAllGranted() ifNotGranted() ifAnyGranted() getSecurityConfig() loadSecondaryConfig() reloadSecurityConfig() isAjax()
Configuration
BootStrap.groovy BuildConfig.groovy Config.groovy DataSource.groovy UrlMappings.groovy
Config.groovy
BuildConfig.groovy
DataSource.groovy
UrlMappings.groovy
class UrlMappings {
static mappings = {
}
}
"/profile"(controller:"userProfile“,action:"userProfile")
"/newsfeed"(controller:"userProfile“,action:"homePage")
"/company"(controller:"company“,action:"companyProfile")
GRAILS TOOL (GGTS)
Download from : http://spring.io/tools/ggts
SITES USING GRAILS