Tôi đang cố gắng giữ một số ngữ cảnh được tiêm (ví dụ Session hoặc HttpServletRequest) trong Servlet mà tôi đã viết, chạy trên Grizzly, nhưng không có gì tôi làm dường như làm việc. Toàn bộ quá trình dường như chững lại khá sớm với các lỗi sau:Grizzly và ServletContainerContext
SEVERE: Missing dependency for field: javax.servlet.http.HttpServletRequest com.test.server.LolCat.hsr
các máy chủ được chết đơn giản, nó bao gồm hai tập tin, điểm vào tĩnh (Main.java):
package com.test.server;
import java.io.IOException;
import java.net.URI;
import javax.ws.rs.core.UriBuilder;
import org.glassfish.grizzly.http.server.HttpServer;
import com.sun.jersey.api.container.grizzly2.GrizzlyServerFactory;
import com.sun.jersey.api.core.ClassNamesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
public class Main {
private static URI getBaseURI() {
return UriBuilder.fromUri("http://localhost/").port(8080).build();
}
public static final URI BASE_URI = getBaseURI();
public static void main(String[] args) throws IOException {
ResourceConfig rc = new ClassNamesResourceConfig(LolCat.class);
HttpServer httpServer = GrizzlyServerFactory.createHttpServer(BASE_URI, rc);
System.in.read();
httpServer.stop();
}
}
và the serlvet (LolCat.java):
package com.test.server;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
@Path(value = "/lol")
public class LolCat {
@Context HttpServletRequest hsr;
@GET
@Path(value="/cat")
public String list() {
return "meow";
}
}
Cụ thể, đó là @ Ngữ cảnh trong tệp nguồn ở trên là nguồn và giải pháp cho tất cả các vấn đề của tôi. Tôi cần nó, và theo tất cả những gì tôi đã đọc về Jersey và Servlets thì nó sẽ hoạt động, nhưng không phải vậy. Tôi cũng đã cố gắng sử dụng GrizzlyWebContainerFactory thay vì GrizzlyServerFactory, nhưng vô ích.
Để tham khảo, dự án được biên soạn với sự phụ thuộc sau:
- org.glassfish.grizzly: xám-framework: jar: 2.2.21
- org.glassfish.grizzly: xám-http: jar: 2.2.21
- org.glassfish.grizzly: xám-http-servlet: jar: 2.2.21
- org.glassfish.grizzly: xám-http-server: jar: 2.2.21
- com. sun.jersey: jersey-server: jar: 1.17
- com.sun.jersey: jersey-servlet: jar: 1,17
- com.sun.jersey: jersey-core: jar: 1,17
- javax.servlet: javax.servlet-api: jar: 2.5.0
- com.sun.jersey: jersey-grizzly2: jar: 1,17
- com.sun.jersey: jersey-grizzly2-servlet: jar: 1,17
- asm: asm: jar: 3.3.1
Nó hoạt động, với sự an toàn loại của văn bản thuần túy :). Có thể đăng ký một lớp mà không cần sử dụng String/String setInitParameter không? – Mic
Tôi nghĩ rằng GrizzlyWebContainerFactory của Jersey có thể được mở rộng/cải thiện, do đó bạn sẽ không cần phải đối phó với các tham số init, nhưng dù sao nó sẽ là một wrapper trên cùng một mã đăng ký WebappContext. – alexey
Trợ giúp! .. Mã của tôi nhận được như xa 'WebappContext context = new WebappContext (...' sau đó nó đột nhiên bị treo với 'Exception in thread" main "java.lang.NoSuchMethodError: org.glassfish.grizzly.utils.DataStructures. getConcurrentMap (IFI) Ljava/util/concurrent/ConcurrentMap; 'Đã thử với Java 7 và 8, sử dụng jersey-container-grizzly-http: 2.5 và jersey-container-grizzly2-servlet: 2.5 –