输入输出流的效率问题
用servlet返回图片,
浏览器访问单张图片很快,但是同时访问6张却很慢,
容器是tomcat8,
下面是同时访问时耗时
下面是单个访问耗时
我得代码是这么写的
package com.bigzhi.servlet;
import com.bigzhi.Common;
import com.google.common.net.HttpHeaders;
import com.google.common.net.MediaType;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
@WebServlet("/img")
public class ImageServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String id = req.getParameter("id");
resp.setContentType(MediaType.ANY_IMAGE_TYPE.type());
if (req.getHeader(HttpHeaders.IF_NONE_MATCH) != null) {
resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return;
}
if (id == null) {
resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
resp.setHeader(HttpHeaders.ETAG, id);
FileInputStream fileInputStream = new FileInputStream(Common.IMAGE_DIR.concat(id));
OutputStream out = resp.getOutputStream();
byte[] bufferByte = new byte[fileInputStream.available()];
while (fileInputStream.read(bufferByte) != -1) {
out.write(bufferByte);
}
out.flush();
out.close();
fileInputStream.close();
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
图片是静态资源,应该是动静分离吧
图片是放到静态服务器或是CDN,通过一个URL来访问,而不是通应用服务器来返回数据。