Forward
The RequestDispatcher https://javaee.github.io/javaee-spec/javadocs/javax/servlet/RequestDispatcher.html允许您将请求从 servlet 转发到另一个资源在同一台服务器上。看到这个answer https://stackoverflow.com/a/3916286/1426227更多细节。
您可以使用JAX-RS 客户端 API https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/client/package-summary.html并使您的资源类充当代理以将请求转发到远程服务器:
@Path("/foo")
public class FooResource {
private Client client;
@PostConstruct
public void init() {
this.client = ClientBuilder.newClient();
}
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response myMethod() {
String entity = client.target("http://example.org")
.path("foo").request()
.post(Entity.json(null), String.class);
return Response.ok(entity).build();
}
@PreDestroy
public void destroy() {
this.client.close();
}
}
Redirect
如果重定向适合您,您可以使用Response https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/core/Response.html API:
-
Response.seeOther(URI) https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/core/Response.html#seeOther-java.net.URI-:用于 POST 之后重定向(又名 POST/redirect/GET)模式。
-
Response.temporaryRedirect(URI) https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/core/Response.html#temporaryRedirect-java.net.URI-:用于临时重定向。
参见示例:
@Path("/foo")
public class FooResource {
@POST
@Produces(MediaType.APPLICATION_JSON)
public Response myMethod() {
URI uri = // Create your URI
return Response.temporaryRedirect(uri).build();
}
}
也许值得一提的是UriInfo https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/core/UriInfo.html可以注入到您的资源类或方法中以获得一些有用的信息,例如base URI https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/core/UriInfo.html#getBaseUri--和请求的绝对路径 https://javaee.github.io/javaee-spec/javadocs/javax/ws/rs/core/UriInfo.html#getAbsolutePath--.
@Context
UriInfo uriInfo;