Java 正在将一个客户端的HttpServletRequest复制到另一个客户端的HttpServletResponse的Body
我需要将client1的Java 正在将一个客户端的HttpServletRequest复制到另一个客户端的HttpServletResponse的Body,java,servlets,http-request,Java,Servlets,Http Request,我需要将client1的HttpServletRequest复制到为client2创建的HttpServletResponse对象。根据HttpRequest有一个resestline,然后是headers,然后是body。 我复制了如下标题: Enumeration<?> headerNames = client1Req.getHeaderNames(); while (headerNames.hasMoreElements()) { String hea
HttpServletRequest
复制到为client2创建的HttpServletResponse
对象。根据HttpRequest
有一个resestline,然后是headers,然后是body。
我复制了如下标题:
Enumeration<?> headerNames = client1Req.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = (String) headerNames.nextElement();
Enumeration<?> headers = client1Req.getHeaders(headerName);
while (headers.hasMoreElements()) {
String headerValue = (String) headers.nextElement();
responseToClient2.addHeader(headerName, headerValue);
responseToClient2.setHeader(headerName, headerValue);
System.out.println("headername : " + headerName + "value : " + headerValue);
}
但是,我也需要复制请求行。如果我尝试在开始时读取输入流,而不是单独读取标题和正文,则返回-1。
没有用于从HttpServletRequest
读取整个请求行的api。如果我使用getRequestURL()
和getquesrysting()
读取URL,我应该将其放置在ResponseClient2的何处?
在自定义头REQUESTLINE
中,还是应该将其写入outputstream?
谢谢
编辑:由于将请求
复制到响应
在语义上是错误的,因此我决定将请求
复制到响应的有效负载或主体。但是,由于HttpServletRequest
不可序列化,我无法将其写入response
的outputstream
,有没有关于如何实现这一点的建议?
谢谢我不太明白你在这里想干什么。请求和响应有不同的目的和规格,那么您真正的需求是什么?把一个复制到另一个似乎是错误的,这没有意义。有效请求在HTTP中不是有效响应。Client2位于防火墙后面,防火墙阻止传入请求,但允许传出请求。我必须将client1的请求中继到client2一侧的appserver。由于防火墙的原因,Client1无法直接向appserver发送请求。因此,我将自己的服务器置于防火墙之外,client1向我的服务器发送appserver请求。我的服务器还接收来自Client2的请求,并用client1的请求响应它。我同意请求和响应有完全不同的目的。那我怎么才能达到我想要的呢?听起来你想写某种代理?
input = clientReq.getInputStream();
output = responseToRIC.getOutputStream();
if((len=input.available()) > 0){
len = input.read(outputByte);
System.out.println("len : "+len);
output.write(outputByte);
output.flush();
}
else{
System.out.println("no body");
}