我正在关注tutorial以基于JAX-RS在java中开发RESTful Web服务。我修改了POST
方法,以便从客户端上传文件到服务(请参阅下面的代码)。在教程中,.WAR
包已部署到tomcat apache服务器中。
我的应用程序非常简单,只需使用POST
方法。我只有一个客户端,不需要用户管理。 RESTful是无状态的,因此不需要缓存。对我来说,一个完整的誓言tomcat似乎是多余的。
我已经在embedded-server和server-2找到了不同的答案,他们建议在Java中创建一个主要方法,使用jax-ws
监听某个端口。
javax.xml.ws.Endpoint.publish("http://localhost:8000/myService/", myServiceImplementation);
我怀疑这个简单的解决方案会出错,可能是我想念一些安全相关的东西?它会降低服务的可靠性吗?如果我使用一个简单的解决方案而不是完整的承诺tomcat,有人可以解释会出现什么问题吗?
@Path("/file")
public class RESTfulHelloWorld
{
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail)
{
//String uploadedFileLocation = "d:/uploaded/" + fileDetail.getFileName();
String uploadedFileLocation = "d:/test.txt";
// save it
writeToFile(uploadedInputStream, uploadedFileLocation);
String output = "File uploaded to : " + uploadedFileLocation;
return Response.status(200).entity(output).build();
}
private void writeToFile(InputStream uploadedInputStream,
String uploadedFileLocation)
{
try {
OutputStream out = new FileOutputStream(new File(
uploadedFileLocation));
int read = 0;
byte[] bytes = new byte[1024];
out = new FileOutputStream(new File(uploadedFileLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}