java pippo_Pippo:Java小型开源Web微框架

pippo-logo.svg?sanitize=true

Micro Java Web Framework

68747470733a2f2f6261646765732e6769747465722e696d2f6465636562616c732f706970706f2e737667ea798d9df0ea02ea019118c929dc59d7.png68747470733a2f2f636f766572616c6c732e696f2f7265706f732f706970706f2d6a6176612f706970706f2f62616467652e7376673f6272616e63683d6d617374657226736572766963653d676974687562687474703a2f2f696d672e736869656c64732e696f2f6d6176656e2d63656e7472616c2f762f726f2e706970706f2f706970706f2e737667

It's an open source (Apache License) micro web framework in Java, with minimal dependencies and a quick learning curve.

The goal of this project is to create a micro web framework in Java that should be easy to use and hack.

The size of pippo-core is only 140 KB and the size of pippo-controller (optional) is only 45 KB.

Sample code

1. Routes approach

First we must create an Application and add some routes:

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");

}

}

where Contact is a simple POJO:

public class Contact {

private int id;

private String name;

private String phone;

private String address;

// getters and setters

}

The second step is to choose your favorite server, template engine and content type engine.

For example, I will choose Jetty as server, Freemarker as template engine, Jackson as JSON engine and JAXB as XML engine.

My Maven pom.xml looks like:

ro.pippo

pippo-core

${pippo.version}

ro.pippo

pippo-jetty

${pippo.version}

ro.pippo

pippo-freemarker

${pippo.version}

ro.pippo

pippo-jackson

${pippo.version}

The last step it's to start Pippo with your application as parameter:

public class BasicDemo {

public static void main(String[] args) {

Pippo pippo = new Pippo(new BasicApplication());

pippo.start();

}

}

Pippo launches the embedded web server (found in your classpath) and makes the application available on port 8338 (default value). Open your internet browser and check the routes declared in Application:

http://localhost:8338

http://localhost:8338/file

http://localhost:8338/json

http://localhost:8338/xml

http://localhost:8338/negotiate

http://localhost:8338/template

2. Controllers approach

Define controller(s):

@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 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 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();

}

}

Add controller(s) in your application:

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);

}

}

Don't forget that the Controller concept is included in pippo-controller module so you must add this module as dependency in your project.

Documentation

Documentation is available on pippo.ro

Demo

Demo applications are available on pippo-demo

For a real life application built with Pippo please look at Web Accounting - Pippo Demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值