引自免费微信小程序:皆我百晓生
在分析提供的HTML页面和Java MovieServlet 之后,我发现了一个可能导致图片不显示的问题。在发送请求获取照片时,你可能没有正确地处理异步加载。当图片加载完成后,你需要将图片数据转换为Base64编码,并将其作为响应内容返回给前端。
以下是修改后的Servlet代码,使用了Apache Commons Codec库进行Base64编码(如果你还没有添加这个依赖,可以添加到项目的pom.xml文件中):
...
commons-codec
commons-codec
1.15
...
然后在Java MovieServlet 中对获取图片的部分做如下修改:
import org.apache.commons.codec.binary.Base64;
// ...
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// ... 省略其他部分
else if ("photo".equals(content)) {
String photo = movies.getPhoto(movie);
String path = getServletContext().getRealPath("/images/" + photo);
BufferedImage image = ImageIO.read(new File(path));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);
byte[] imageData = baos.toByteArray();
String encodedImage = Base64.encodeBase64String(imageData);
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("
");
}
}
// ... 省略其他部分
这样,当用户请求照片时,Servlet会返回一个内联的Base64编码的图片标签,这应该能在浏览器中正确显示图片。由于我们已经直接在响应中包含了图片数据,所以前端不需要处理Blob对象和创建Object URL了。
在前端JavaScript部分,你可以删除与图片加载相关的所有代码,因为这些逻辑已经移到了服务器端。只保留基本的HTML结构和按钮事件监听器即可。这是修改后的HTML部分:
现在,当用户点击查询按钮时,图片将会被直接渲染在页面上。如果还有任何问题,请告诉我,我会继续提供帮助。
