1
0
mirror of https://github.com/actix/actix-extras.git synced 2024-11-25 00:12:59 +01:00
actix-extras/guide/src/qs_3.md

58 lines
1.8 KiB
Markdown
Raw Normal View History

2017-12-02 08:06:15 +01:00
# Application
2017-11-28 21:44:59 +01:00
Actix web provides some primitives to build web servers and applications with Rust.
It provides routing, middlewares, pre-processing of requests, and post-processing of responses,
websocket protcol handling, multipart streams, etc.
All actix web server is built around `Application` instance.
It is used for registering handlers for routes and resources, middlewares.
Also it stores applicationspecific state that is shared accross all handlers
within same application.
Application acts as namespace for all routes, i.e all routes for specific application
has same url path prefix:
```rust,ignore
2017-12-04 22:32:05 +01:00
# extern crate actix_web;
# extern crate tokio_core;
# use actix_web::*;
# fn index(req: HttpRequest) -> &'static str {
# "Hello world!"
# }
# fn main() {
2017-11-28 21:44:59 +01:00
let app = Application::default("/prefix")
2017-12-04 22:32:05 +01:00
.resource("/index.html", |r| r.method(Method::GET).handler(index))
2017-11-28 21:44:59 +01:00
.finish()
2017-12-04 22:32:05 +01:00
# }
2017-11-28 21:44:59 +01:00
```
In this example application with `/prefix` prefix and `index.html` resource
get created. This resource is available as on `/prefix/index.html` url.
2017-12-02 08:32:15 +01:00
Multiple applications could be served with one server:
```rust
2017-12-04 22:32:05 +01:00
# extern crate actix_web;
# extern crate tokio_core;
2017-12-02 08:32:15 +01:00
use std::net::SocketAddr;
use actix_web::*;
use tokio_core::net::TcpStream;
fn main() {
HttpServer::<TcpStream, SocketAddr, _>::new(vec![
Application::default("/app1")
2017-12-04 22:32:05 +01:00
.resource("/", |r| r.route().handler(|r| httpcodes::HTTPOk))
2017-12-02 08:32:15 +01:00
.finish(),
Application::default("/app2")
2017-12-04 22:32:05 +01:00
.resource("/", |r| r.route().handler(|r| httpcodes::HTTPOk))
2017-12-02 08:32:15 +01:00
.finish(),
Application::default("/")
2017-12-04 22:32:05 +01:00
.resource("/", |r| r.route().handler(|r| httpcodes::HTTPOk))
2017-12-02 08:32:15 +01:00
.finish(),
]);
}
```
All `/app1` requests route to first application, `/app2` to second and then all other to third.