Ini adalah kerangka kerja web mikro open source (Apache lisensi) di Java, dengan dependensi minimal dan kurva pembelajaran cepat.
Tujuan dari proyek ini adalah untuk membuat kerangka kerja web mikro di Java yang seharusnya mudah digunakan dan diretas.
Ukuran pippo-core hanya 140 kb dan ukuran pippo-controller (opsional) hanya 45 kb .
Pertama kita harus membuat aplikasi dan menambahkan beberapa rute:
public class BasicApplication extends Application {
@ Override
protected void onInit () {
// send 'Hello World' as response
GET ( "/" , routeContext -> routeContext . send ( "Hello World" ));
// send a file as response
GET ( "/file" , routeContext -> routeContext . send ( new File ( "pom.xml" )));
// send a json as response
GET ( "/json" , routeContext -> {
Contact contact = createContact ();
routeContext . json (). send ( contact );
});
// send xml as response
GET ( "/xml" , routeContext -> {
Contact contact = createContact ();
routeContext . xml (). send ( contact );
});
// send an object and negotiate the Response content-type, default to XML
GET ( "/negotiate" , routeContext -> {
Contact contact = createContact ();
routeContext . xml (). negotiateContentType (). send ( contact );
});
// send a template with name "hello" as response
GET ( "/template" , routeContext -> {
routeContext . setLocal ( "greeting" , "Hello" );
routeContext . render ( "hello" );
});
}
private Contact createContact () {
return new Contact ()
. setId ( 12345 )
. setName ( "John" )
. setPhone ( "0733434435" )
. setAddress ( "Sunflower Street, No. 6" );
}
} Di mana Contact adalah pojo sederhana:
public class Contact {
private int id ;
private String name ;
private String phone ;
private String address ;
// getters and setters
} Langkah kedua adalah memilih server favorit Anda, mesin template, dan mesin jenis konten.
Misalnya, saya akan memilih Jetty sebagai Server, Freemarker sebagai Template Engine, Jackson sebagai mesin JSON dan JAXB sebagai mesin XML.
MAVEN pom.xml saya terlihat seperti:
< dependency >
< groupId >ro.pippo</ groupId >
< artifactId >pippo-core</ artifactId >
< version >${pippo.version}</ version >
</ dependency >
< dependency >
< groupId >ro.pippo</ groupId >
< artifactId >pippo-jetty</ artifactId >
< version >${pippo.version}</ version >
</ dependency >
< dependency >
< groupId >ro.pippo</ groupId >
< artifactId >pippo-freemarker</ artifactId >
< version >${pippo.version}</ version >
</ dependency >
< dependency >
< groupId >ro.pippo</ groupId >
< artifactId >pippo-jackson</ artifactId >
< version >${pippo.version}</ version >
</ dependency >Langkah terakhir untuk memulai Pippo dengan aplikasi Anda sebagai parameter:
public class BasicDemo {
public static void main ( String [] args ) {
Pippo pippo = new Pippo ( new BasicApplication ());
pippo . start ();
}
} PIPPO meluncurkan server web tertanam (ditemukan di classpath Anda) dan membuat aplikasi tersedia di port 8338 (nilai default). Buka browser internet Anda dan periksa rute yang dinyatakan dalam aplikasi:
http://localhost:8338http://localhost:8338/filehttp://localhost:8338/jsonhttp://localhost:8338/xmlhttp://localhost:8338/negotiatehttp://localhost:8338/templateTentukan pengontrol:
@ Path ( "/contacts" )
@ Logging
public class ContactsController extends Controller {
private ContactService contactService ;
public ContactsController () {
contactService = new InMemoryContactService ();
}
@ GET
@ Named ( "index" )
// @Produces(Produces.HTML)
@ Metered
@ Logging
public void index () {
// inject "user" attribute in session
getRouteContext (). setSession ( "user" , "decebal" );
// send a template with name "contacts" as response
getResponse ()
. bind ( "contacts" , contactService . getContacts ())
. render ( "contacts" );
}
@ GET ( "/uriFor/{id: [0-9]+}" )
@ Named ( "uriFor" )
@ Produces ( Produces . TEXT )
@ Timed
public String uriFor ( @ Param int id , @ Header String host , @ Session String user ) {
System . out . println ( "id = " + id );
System . out . println ( "host = " + host );
System . out . println ( "user = " + user );
Map < String , Object > parameters = new HashMap <>();
parameters . put ( "id" , id );
String uri = getApplication (). getRouter (). uriFor ( "api.get" , parameters );
return "id = " + id + "; uri = " + uri ;
}
@ GET ( "/api" )
@ Named ( "api.getAll" )
@ Produces ( Produces . JSON )
@ NoCache
public List < Contact > getAll () {
return contactService . getContacts ();
}
@ GET ( "/api/{id: [0-9]+}" )
@ Named ( "api.get" )
@ Produces ( Produces . JSON )
public Contact get ( @ Param int id ) {
return contactService . getContact ( id );
}
} @ Path ( "/files" )
public class FilesController extends Controller {
@ GET
public void index () {
// send a template with name "files" as response
getRouteContext (). render ( "files" );
}
@ GET ( "/download" )
public File download () {
// send a file as response
return new File ( "pom.xml" );
}
@ POST ( "/upload" )
@ Produces ( Produces . TEXT )
public String upload ( FileItem file ) {
// send a text (the info about uploaded file) as response
// return file.toString();
return new StringBuilder ()
. append ( file . getName ()). append ( " n " )
. append ( file . getSubmittedFileName ()). append ( " n " )
. append ( file . getSize ()). append ( " n " )
. append ( file . getContentType ())
. toString ();
}
}Tambahkan pengontrol di aplikasi Anda:
public class BasicApplication extends ControllerApplication {
@ Override
protected void onInit () {
addControllers ( ContactsController . class ); // one instance for EACH request
// OR
addControllers ( new ContactsController ()); // one instance for ALL requests
addControllers ( FilesController . class );
}
} Jangan lupa bahwa konsep Controller termasuk dalam modul pippo-controller sehingga Anda harus menambahkan modul ini sebagai ketergantungan dalam proyek Anda.
Dokumentasi tersedia di pippo.ro
Aplikasi demo tersedia di Pippo-Demo
Untuk aplikasi kehidupan nyata yang dibangun dengan pippo silakan lihat akuntansi web - demo pippo