2012-02-14 38 views
8

Tôi sử dụng jetty6 trong ứng dụng đơn giản như vùng chứa servlet được nhúng. Tôi đã quyết định cập nhật nó để Jetty 8. Trong cầu cảng 6 nó đã được khá đơn giản để khởi động server:Di chuyển từ Cầu tàu 6 đến Cầu cảng 8

Server server = new Server(8080); 
Context context = new Context(server, "/", Context.SESSIONS); 
context.addServlet(MyServlet.class, "/communication-service"); 
server.start(); 

nhưng nó không hoạt động trong Jetty8. Rất tiếc, tôi không thể tìm thấy bất kỳ ví dụ đơn giản nào cho phiên bản này. Không thể khởi tạo Bối cảnh có lỗi

an enclosing instance that contains 
    org.eclipse.jetty.server.handler.ContextHandler.Context is required 

vì bây giờ nó là lớp bên trong và cũng không có hàm tạo như vậy.

Hầu hết các ví dụ dành cho cầu tàu 6 và 7. Bạn có thể cung cấp ví dụ đơn giản về cách khởi động servlet tại cầu tàu 8 không?

+0

Không, nó không hoạt động. – NullPointer

+0

Câu hỏi của bạn ngắn về chi tiết. Cái gì không hiệu quả? Dòng nào gây ra sự cố? Có dấu vết ngăn xếp khi bạn thử và chạy không? – SteveD

+0

Tôi gặp vấn đề tương tự trong một số mã Jetty 6 của tôi. Tôi đã có hai 'Context' mà lấy máy chủ như một tham số. Trong Jetty 8 mẫu có vẻ bị đảo ngược, trong đó bạn có phương thức 'setHandler' trong máy chủ (đối với một trình xử lý đơn). Nhưng không có tài liệu nào dường như giải quyết cách bạn di chuyển mã với nhiều hơn một Ngữ cảnh được gắn vào cùng một Máy chủ. Đây có phải là tình huống mà bạn định sử dụng Bộ sưu tập bối cảnh không? – Ash

Trả lời

1

Cầu cảng hiện nay là một phần của Eclipse. Các tài liệu hướng dẫn here là dành cho Jetty 7 nhưng tuyên bố nó sẽ làm việc cho Jetty 8. Có một ví dụ về cách sử dụng servlet vào cuối trang.

+1

Ví dụ này không hoạt động. không có các lớp như ServletContextHandler và ServletHolder – NullPointer

+0

Sau đó, bạn đang làm điều gì đó sai vì Jetty 8 Javadoc có các lớp này được liệt kê. – SteveD

+0

Tôi đã thêm phụ thuộc maven org.eclipse.jetty jetty-server 8.1. Điều gì có thể sai ở đó? http://dl.dropbox.com/u/12053587/jetty1.png – NullPointer

13

Đây là Jetty 8 tương đương với mã của bạn. Nó vẫn đơn giản như trước đây, tuy nhiên API đã thay đổi một chút.

Nếu cách này không hiệu quả với bạn, thì có thể bạn gặp phải vấn đề về classpath - Jetty 8 được chia thành nhiều tệp jar độc lập và bạn sẽ cần một số tệp. Ít nhất bạn cần:

  • cầu cảng-tiếp tục
  • cầu cảng-http
  • cầu cảng-io
  • cầu cảng-an ninh
  • cầu cảng-server
  • cầu cảng-servlet
  • cầu cảng -util
  • servlet-api

Nếu bạn có những lọ, sau đó mã này sẽ làm việc tốt:

package test; 

import java.io.IOException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.servlet.ServletContextHandler; 

public class Jetty8Server { 
    public static class MyServlet extends HttpServlet { 
     protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException { 
      response.setContentType("text/plain"); 
      response.getWriter().write(getClass().getName() + " - OK"); 
     } 
    } 
    public static void main(String[] args) throws Exception { 
     Server server = new Server(8080); 
     ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS); 
     handler.setContextPath("/"); // technically not required, as "/" is the default 
     handler.addServlet(MyServlet.class, "/communication-service"); 
     server.setHandler(handler); 
     server.start(); 
    } 
} 
Các vấn đề liên quan