Android 印刷アプリケーションを開発しています。私のアプリケーションの一部は、ユーザーからファイルを受け取るローカル サーバーです。
Tomcat Java サーブレットでサーバーを実装しました。
私の問題は、2 つのデバイスが 2 つのファイルをサーバーに瞬時に送信すると、2 つの結果が考えられること
です。
2. 1 つのクライアントが 2 番目のクライアントの応答を受信し、その逆も同様です。
ここに私のサーブレットコードがあります:
protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
new Runnable() {
@Override
public void run() {
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
response.setCharacterEncoding("UTF-8");
try {
writer = response.getWriter();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
// get access to file that is uploaded from client
Part p1 = request.getPart("File");
InputStream is = p1.getInputStream();
// read filename which is sent as a part
Part p2 = request.getPart("MetaData");
Scanner s = new Scanner(p2.getInputStream());
String stringJson = s.nextLine(); // read filename from stream
s.close();
json = new JSONObject(stringJson);
fileName = new String(json.getString("FileName").getBytes("UTF-8"));
fileDirectory = BASE + request.getSession().getId();
File dir = new File(fileDirectory);
dir.mkdir();
// get filename to use on the server
String outputfile = BASE + dir.getName() + "/" + fileName; // get path on the server
FileOutputStream os = new FileOutputStream (outputfile);
// write bytes taken from uploaded file to target file
byte[] buffer = new byte[1024];
int ch = is.read(buffer);
while (ch != -1) {
os.write(buffer);
ch = is.read(buffer);
}
os.close();
is.close();
}
catch(Exception ex) {
writer.println("Exception -->" + ex.getMessage());
}
finally {
try {
myRequest = request;
try {
printFile(request.getSession().getId());
} catch (IOException e) {
// TODO Auto-generated catch block
writer.println("Exception -->" + e.getMessage());
}
writer.close();
} catch (InterruptedException e) {
writer.println("Exception -->" + e.getMessage());
}
}
}
}.run();
}
Tomcat サーバーは、仮想マシンとして Ubuntu 13.04 で実行されています。
何か案が?