我正在使用Atmosphere来使用Jersey restful API。
这是我的web.xml
<servlet>
<description>AtmosphereServlet</description>
<servlet-name>AtmosphereServlet</servlet-name>
<servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.example.p1</param-value>
</init-param>
<async-supported>true</async-supported>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>AdminPanel</servlet-name>
<servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.example.p2</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>
<param-value>/WEB-INF/admin/</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AdminPanel</servlet-name>
<url-pattern>/admin/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AtmosphereServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
现在,我有一个@Path("/register")
的资源类,我已经定义了@GET
和@POST
方法。在我的整个项目中没有其他类处理路径/register
。
@Path("/register")
public class Register{
@POST
public String method1(){
return "POST";
}
@GET
public String method1(){
return "GET";
}
}
我正在使用的网址是http://129.123.3.3/user/register
,我在通话中使用了POST方法。
尽管我正在定义GET和POST方法
HTTP状态405 - 不允许的方法
但是,当我删除AdminPanel
的serlvet映射并将<url-pattern>
AtmosphereServlet
更改为/*
而不是/
时,会调用相应的方法。但是这样我就不能使用在我的AdminPanel
servlet中定义的URL。我错过了什么?如果这是一个仅与Servlet Mapping
相关的问题,那么映射是什么,以便将请求正确路由到/admin
而其他请求不会受到阻碍?
答案 0 :(得分:0)
实施一个类
@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends javax.ws.rs.core.Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<>();
resources.add(Register.class);
return resources;
}
}
您的网址将是
GET /<context>/webresources/register