IAm*_*aja 22 java servlets reverse-proxy web-applications http
我有两个Java Web应用程序,它们具有映射到特定URL的单个servlet:
red.war/
WEB-INF/classes
com.me.myorg.red.RedServlet (maps to http://red.example.com/doStuff)
blue.war/
WEB-INF/classes
com.me.myorg.blue.BlueServlet (maps to http://blue.example.com/doStuff)
Run Code Online (Sandbox Code Playgroud)
我想把这些应用程序(我称之为"后端应用程序")放在"代理应用程序"(servlet)后面,这将决定这两个应用程序中的哪一个最终将服务于客户端请求.
此代理Web应用程序将接收传入的HTTP请求,并确定将请求转发到的2个"后端应用程序"(红色或蓝色)中的哪一个.然后,请求将转发到http://red.example.com/doStuff(或然后由其处理RedServlet#doGet(...))或http://blue.example.com/doStuff(然后由其处理BlueServlet#doGet(...)).然后,来自后端应用程序的返回响应(再次,RedServlet#doGet(...)或者BlueServlet#doGet(...))将返回到代理servlet,并最终返回给客户端.
换句话说,在伪代码中:
public class ProxyServlet extends HttpServlet {
@Override
public doGet(HttpServletRequest request, HttpServletResponse response) {
String forwardingAddress;
if(shouldBeRed(request))
forwardingAddress = "http://red.example.com/doStuff";
else
forwardingAddress = "http://blue.example.com/doStuff";
PrintWriter writer = response.getWriter();
writer.write(getResponseFromBackend(forwardingAddress, request));
}
private String getResponseFromBackend(String addr, HttpServletRequest req) {
// Somehow forward req to addr and get HTML response...
}
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?如果是这样,我需要编写的代码和代码才能使其工作?
ult*_*ate 10
您可以使用a RequestDispatcher以下列方式转发您的请求:
RequestDispatcher dispatcher = httpRequest.getRequestDispatcher(forwardingAddress);
// here you have the choice whether to use include(..) or forward(..) see below
if(useInclude)
dispatcher.include(httpRequest, httpResponse);
else
dispatcher.forward(httpRequest, httpResponse);
Run Code Online (Sandbox Code Playgroud)
... useInlcude使用以下选项设置为您选择的位置:
forwardingAdress到你的响应中.
forwardingAddress.这将告诉客户端向指定的URL 提交新请求.
请参阅以下链接:
Filter而不是一个Servlet行为来实现的(注意:这个例子是我的框架的一部分,因此包含了父类中的一些开销.请看看相关部分...... )| 归档时间: |
|
| 查看次数: |
27666 次 |
| 最近记录: |