Tôi đang cố gắng thiết lập một dịch vụ web đơn giản cho ứng dụng của mình bằng cách nhúng Jetty. Tôi muốn có hai dịch vụ web khác nhau, một máy chủ HTTP đơn giản chỉ phục vụ nội dung tĩnh (cuối cùng sẽ là một ứng dụng GWT) và một servlet tùy chỉnh có thể nhổ ra các thông báo trạng thái JSON cho ứng dụng.Làm cách nào để thiết lập tài nguyên tĩnh và dịch vụ tùy chỉnh với Trình kết nối được nhúng?
cấu trúc thư mục phân phối của tôi trông giống như sau:
+ dist/
- MyApp.jar
+ lib/
+ html/
- index.html
Và đây là những gì tôi có cho đến nay để cấu hình máy chủ nhúng. Tôi nhận được kết quả thử nghiệm của mình một cách chính xác từ servlet tùy chỉnh của tôi khi truy cập http://localhost/data/
, nhưng dường như tôi không thể lấy DefaultServlet để tìm tệp index.html của mình.
public Webserver(int port) {
server = new Server(port);
ServletContextHandler context = new ServletContextHandler();
context.setResourceBase("./html/");
server.setHandler(context);
JsonDataApiServlet dataServlet = new JsonDataApiServlet();
DefaultServlet staticServlet = new DefaultServlet();
context.addServlet(new ServletHolder(dataServlet), "/data/*");
context.addServlet(new ServletHolder(staticServlet), "/*");
}
Có vẻ như đây sẽ là một nhiệm vụ phổ biến cho những người nhúng Jetty vào mọi thứ .. tôi có đi đúng hướng không?
Sửa
Hóa ra vấn đề này là do một sự hiểu lầm về cách đường dẫn tương đối được tính toán bên trong Jetty. Tôi đã chạy điều này từ một thư mục phía trên thư mục dist, sử dụng java -jar dist\MyApp.jar
và Jetty đang tìm kiếm dist\..\html
thay vì chính xác dist\html
. Chạy jar từ bên trong thư mục dist sẽ khắc phục vấn đề. Tôi sẽ trả lời với cách tôi làm cho nó hoạt động mà không cần phải chạy từ bên trong thư mục dist.
_Tôi dường như không thể lấy DefaultServlet để tìm tệp index.html của mình Vì vậy, bạn đang nhìn thấy hành vi nào khi bạn truy cập "/index.html". Jetty sản xuất đầu ra nào? – Tim
Cảm ơn Tim, nhận xét đó đưa tôi đi đúng hướng. – Collin