rest入门实践之五:(转载)
转载处
新建web工程,加入jax-rs的JAR包
新建一个类
在全局变量上使用@QueryParam和DefaultValue注解,jax-rs可以自动注入值
- @Path("UserContext")
- public class UserContext {
- int i = 0;
- @QueryParam("org") @DefaultValue("默认组织") //注入参数
- String org;
- @GET
- public String hi(@QueryParam("name") String yourName ){
- System.out.println(++i);
- System.out.println(org);
- return org;
- }
- }
- <!--web.xml中加入-->
- <servlet>
- <display-name>JAX-RS REST Servlet</display-name>
- <servlet-name>JAX-RS REST Servlet</servlet-name>
- <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>JAX-RS REST Servlet</servlet-name>
- <url-pattern>/services/*</url-pattern>
- </servlet-mapping>
部署并运行
http://localhost:8080/rest/services/UserContext?org=TestORG
会打印出全局变量,同时也会打印出i的值,i为1
再运行一次
http://localhost:8080/rest/services/UserContext?org=TestORG
i的值还是1
验证了第一句结论:
所以默认情况下 rest服务的生命周期 == request的生命周期,请求过后立即消毁,所以默认情况下rest服务类是线程安全的
如果你需要使用单例来发布,jax-rs提供了注解@Singleton
- @Singleton
- public class UserContext {
加入Singleton注解以后,再重启运行
i的值就会不停累加
所以这时rest服务的生命周期 == 应用服务器生命周期
另外还有一种生命周期就是@PerSession,每一个session请求,就产生一个rest资源实例,直到这个session消毁,这个rest资源才会消失。
- @PerSession
- public class UserContext {
所以
rest有三种生命周期,三种周期分别等于request,session,applcation的生命周期