Java 使用SpringMVC和Hibernate在JSP中显示jpg图像列表
我想问类似的问题,但有些问题我不懂。我的代码似乎也能工作,但它显示的不是jpg图像,而是一些图标。如果你能帮我弄清楚就好了 首先,控制器:Java 使用SpringMVC和Hibernate在JSP中显示jpg图像列表,java,spring,hibernate,jsp,spring-mvc,Java,Spring,Hibernate,Jsp,Spring Mvc,我想问类似的问题,但有些问题我不懂。我的代码似乎也能工作,但它显示的不是jpg图像,而是一些图标。如果你能帮我弄清楚就好了 首先,控制器: @Controller public class MainController { @Autowired private MasterpieceService masterpieceService; @RequestMapping(value={ "/", "/home" }, method = RequestMethod.GET) public Mod
@Controller
public class MainController {
@Autowired
private MasterpieceService masterpieceService;
@RequestMapping(value={ "/", "/home" }, method = RequestMethod.GET)
public ModelAndView firstPage(){
ModelAndView model = new ModelAndView();
model.addObject("masterpiece", new Masterpiece());
model.addObject("masterpieceList", masterpieceService.getMasterpieces());
model.setViewName("home");
return model;
}
(...other methods...)
@RequestMapping(value = {"/uploadMasterpiece"}, method = RequestMethod.POST)
public ModelAndView uploadMasterpiece(@RequestParam("name") String name,
@RequestParam("file") MultipartFile file,
@RequestParam("comment") String comment) {
ModelAndView model = new ModelAndView();
if(file.isEmpty()){
// oh no.
model.setViewName("home");
}else {
Masterpiece masterpiece = new Masterpiece();
try {
masterpiece.setName(name);
masterpiece.setImage(file.getBytes());
masterpiece.setComment(comment);
masterpieceService.addMasterpiece(masterpiece);
model.setViewName("admin");
}catch (Exception e){
e.printStackTrace();
model.setViewName("home");
}
}
return model;
}}
和我的JSP:
<c:if test="${!empty masterpieceList}">
<table>
<c:forEach items="${masterpieceList}" var="masterpiece">
<tr>
<td>${masterpiece.name},</td>
<td><img src="${pageContext.request.contextPath}/masterpiece/${masterpiece.image}" /> </td>
<td>${masterpiece.comment} </td>
</tr>
</c:forEach>
</table>
${maxient.name},
${magest.comment}
最后,它应该像一个艺术家画廊,在第一页上展示一张图片表。现在我没有任何css,也没有搜索如何利用输出制作一个好的表格,但问题是关于图像的。它看起来像:
,用图标代替图片,我想知道,为什么
解决方案
经过评论和回答,我终于找到了解决办法。以前,我试图直接传递图像,而不是作为url值,这似乎是一种不好的做法。以下是控制器中针对我的案例的代码:
@RequestMapping(value = "/something/getImg{masterpieceId}", method = RequestMethod.GET,
produces = MediaType.IMAGE_JPEG_VALUE)
public ResponseEntity<byte[]> ListImage(@PathVariable long masterpieceId) throws IOException{
Masterpiece m = masterpieceService.getMasterpieceById(masterpieceId);
byte [] image = m.getImage();
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_JPEG);
return new ResponseEntity<byte[]>(image, headers, HttpStatus.CREATED);
}
@RequestMapping(value=“/something/getImg{masterpieceId}”,method=RequestMethod.GET,
products=MediaType.IMAGE\u JPEG\u值)
public ResponseEntity ListImage(@PathVariable long masterpieceId)引发IOException异常{
杰作m=masterpieceService.getMasterpieceById(masterpieceId);
字节[]image=m.getImage();
最终HttpHeaders=新HttpHeaders();
headers.setContentType(MediaType.IMAGE\u JPEG);
返回新的响应属性(图像、标题、HttpStatus.CREATED);
}
以及我的最新表格:
<c:if test="${!empty masterpieceList}">
<table>
<c:forEach items="${masterpieceList}" var="masterpiece">
<tr>
<td>${masterpiece.name},</td>
<td><img src="/something/getImg${masterpiece.masterpieceId}" /> </td>
<td>${masterpiece.comment} </td>
</tr>
</c:forEach>
</table>
${maxient.name},
${magest.comment}
损坏的图像表示图像的url错误。您能否告诉我们,对于页面中的此图像,href的值是多少。图像不能(不应该)像HTML中的数据一样插入。图像应通过URL加载
对于要显示的每个图像,创建一个IMG html元素。每个IMG的“src”属性将指向该图像的特定URL:…getImage?id=111,getImage?id=112,等等。控制器方法将查找请求参数“id”,并返回该id的图像。您是指图像文件名吗?它是一个字节数组(byte[]),在MYSQL中作为BLOB存储。图像服务获取一个杰作列表,其中两个字符串是name和comment,字节数组是一个图像。或者你的意思是别的?我会用另一种方法来解决这个问题,而不是在jsp页面中返回字节流,让杰作类返回一个指向图像的url。例如,是的,它似乎是一个选项,但不合适。在这里,我需要提供一个带有注释的图像列表,因此,自然最好获得一个杰作列表并放入模型中,您仍然可以将杰作添加到模型中,并添加您的描述和注释。唯一的变化是您使用url引用图像,并添加一个新的控制器来处理浏览器获取图像的操作,如所提供的答案所示。好的,是的。您和Mecon是对的,现在我明白了,并将尝试实现它。当HTML(JSP)在浏览器上呈现时,${majorite.image}解析为什么?我的majorite实体类具有字符串名称和注释以及名为image的字节数组(byte[])。因此,magive.image=byte[]image,我想你可以看看你网页的HTML源代码(即“查看源代码”)并告诉我们标签的HTML是什么样子的吗?浏览器中的inspect元素选项为我提供了图片的HTML,如下所示:…奇怪,是的。图像不可能(不应该)像HTML中的数据一样插入。图像应通过URL加载。1.使HTML如下:img src=“/something/getImg?id=123”2。创建一个接受URL“something/getImg”的控制器。3.在控制器中,使用Servlet的response.Outputstream返回图像