我想在不同服务器中的两个servlet之间发送一个大文件。此文件可以视为一个大字符串。所以,我不能使用doGet
,因为字符串更大。请问最好的方法是什么?
我读到SendRedirect
是我可以使用的唯一方法,因为servlet位于两个不同的服务器中。在另一个时间我不能使用SendRedirect
因为我无法通过URL
发送大字符串或文件。那么,解决方案是什么?
答案 0 :(得分:-1)
对您的文件进行编码:base64
byte[] bt=
// Conversion B64
String result=DatatypeConverter.printBase64Binary(bt);
将其作为参数
放入doPost中使用java.net.URLConnection:
String urlParameters = "my_file=my_long_file_inbase64_here";
byte[] postData = urlParameters.getBytes( StandardCharsets.UTF_8 );
int postDataLength = postData.length;
String request = "http://otherserver.com/myservlet";
URL url = new URL( request );
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setDoOutput( true );
conn.setInstanceFollowRedirects( false );
conn.setRequestMethod( "POST" );
conn.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty( "charset", "utf-8");
conn.setRequestProperty( "Content-Length", Integer.toString( postDataLength ));
conn.setUseCaches( false );
try( DataOutputStream wr = new DataOutputStream( conn.getOutputStream())) {
wr.write( postData );
}
来自:Java - sending HTTP parameters via POST method easily
只需在另一侧解码
byte [] byteArray=DatatypeConverter.parseBase64Binary(result);
您也可以使用多部分帖子(无需)
您可以在doPost中获取数据:doGet and doPost in Servlets
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
mydata_serialized = req.getParameter("my_file");