糾結了好幾天發現原來客戶端在請求數據的時候發送了xml格式的數據,在服務器端進行轉發的時候同時需要轉發這些請求數據,然後才能得到正確的響應數據。下面對之前的代碼進行了修改
package org.proxy.servlet;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
public class Proxy extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(request.getContentType());
request.setCharacterEncoding("UTF-8");
String query = request.getParameter("url");
PostMethod post = new PostMethod(query);
post.setRequestBody(request.getInputStream());
post.setRequestContentLength(request.getContentLength());
post.setRequestHeader("Content-type", "text/xml; charset=UTF-8");
HttpClient client = new HttpClient();
client.executeMethod(post);
PrintWriter out = response.getWriter();
try{
BufferedInputStream in = new BufferedInputStream(post.getResponseBodyAsStream());
int item;
while((item = in.read())!=-1){
out.print((char)item);
}
out.flush();
in.close();
out.close();
}catch(IOException e){
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Exception:"+e);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(request.getContentType());
request.setCharacterEncoding("UTF-8");
String query = request.getParameter("url");
PostMethod post = new PostMethod(query);
post.setRequestBody(request.getInputStream());
post.setRequestContentLength(request.getContentLength());
post.setRequestHeader("Content-type", "text/xml; charset=UTF-8");
HttpClient client = new HttpClient();
client.executeMethod(post);
PrintWriter out = response.getWriter();
try{
BufferedInputStream in = new BufferedInputStream(post.getResponseBodyAsStream());
int item;
while((item = in.read())!=-1){
out.print((char)item);
}
out.flush();
in.close();
out.close();
}catch(IOException e){
response.sendError(HttpServletResponse.SC_NOT_FOUND, "Exception:"+e);
}
}
}