我是Web Services的新手。我有些怀疑我谷歌搜索了它,但无法得到令人满意的答案
我们知道之后的生命周期阶段:
加载和实例化:在实例化时 容器呼叫init(ServletConfig(此方法仅调用一次 servlet的整个生命周期。关键是容器将创建 在servlet的整个生命周期中,只有一次对象。
服务:完成加载和实例化后,每个请求都来到 此servlet hander bia service方法。现在,下一个请求容器 不会再次创建Servlet的对象,它将单独的线程创建到 处理新的请求。这是善良的主要原因之一 在CGI应用程序上执行servlet是因为(每次CGI 有客户请求,HTTP服务器创建了过程的新实例 服务此请求。这是性能杀手(。
销毁:集装箱调用销毁((指向servlet的方法 servlet被取消服务。此方法只是 在Servlet的服务方法中的所有线程都称为 退出或暂停期通过。
我对吗?
现在开始在每个启动请求容器中创建泽西岛的资源时获得的第二部分创建资源类别的单独实例,因为我们可以看到每次构造函数都被调用。
。@Path("myresource")
public class MyResource {
public MyResource(){
System.out.prinln("hi");
}
@GET
@Produces(MediaType.TEXT_PLAIN)
public String getIt() {
return "Got it!";
}
}
我的问题是球衣过程与CGI有何不同?如果不是为什么人们会妥协表演?
最终所说的JAX-RS规范说(JAX-RS 2.0 Spec的第3.1.1节(
默认情况下,将为每个请求创建一个新的资源类实例。首先是构造函数(请参阅 第3.1.2节被调用,然后注入任何请求的依赖项(请参阅第3.2节(,然后是适当的 方法(请参阅第3.3节(被调用,最后将对象用于垃圾收集
是的,JAX-RS资源类和CGI脚本之间存在一些相似之处。但是主要的区别在于,创建一个新对象并收集垃圾比分叉/执行新过程要便宜得多。我认为,对于超高性能,JAX-RS可能比Servlet慢。实施取决于您决定最有效的方法。