Java 使用SpringMVC和hibernate在jsp上显示图像

Java 使用SpringMVC和hibernate在jsp上显示图像,java,spring,hibernate,jsp,spring-mvc,Java,Spring,Hibernate,Jsp,Spring Mvc,我在mysql数据库中有一个BLOB类型的图像,我想在jsp上显示该图像。我正在使用Hibernate和SpringMVC。这是我的模型课: @Repository @Entity @Table(name = "foto") public class Image { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "fk_id_users", nullable = false) private Users us

我在mysql数据库中有一个BLOB类型的图像,我想在jsp上显示该图像。我正在使用Hibernate和SpringMVC。这是我的模型课:

@Repository
@Entity
@Table(name = "foto")
public class Image {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "fk_id_users", nullable = false)
    private Users user;

    @Id
    @Column(name = "id_foto")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id_foto;

    @Column(name = "tipo")
    private String tipo;

    @Column(name = "size")
    private String size;

    @Column(name = "nome")
    private String nome;

    @Column(name = "image")
    private byte[] image;

    //Getters and Setters
这是我的控制器:

@Controller
@SessionAttributes("UserSession")
public class LoginController {

    @Autowired
    private UsersService usersService;

    @RequestMapping(value = "loginUsers", method = RequestMethod.POST)
    public ModelAndView loginUsers(HttpServletRequest request,@RequestParam("username") String username,
            @RequestParam("password") String password) {

        Users user = usersService.loginUsers(username, password);

        if( user == null ) {
            ModelAndView MV = new ModelAndView("login");
            MV.addObject("erroreLogin", "username e/o password errati");
            return MV;
        } else if ( user.getAmministratore() == false ){
            request.getSession().setAttribute("UserSession",user);
            ModelAndView mav = new ModelAndView("homeUtente");
            mav.addObject("galleria", usersService.getAllFoto());
            return mav;
        } else {
            request.getSession().setAttribute("UserSession",user);
            ModelAndView mav = new ModelAndView("utenti");
            mav.addObject("lista", usersService.getAllUtenti());
            return mav;
        }
    }

    @RequestMapping(value = "logout", method = RequestMethod.GET)
    public ModelAndView logout(HttpServletRequest request) {
        request.getSession().invalidate(); //invalido i dati presenti in sessione
        return new ModelAndView("login");
    }

}
在我的jsp中,我使用它来显示图像列表中的图像,因为每个用户都有一个要显示的库:

<img alt="Kangoo_image" src="data:image/jpeg;base64,${galleria.image}" />


当我试图在我的jsp中显示它时,它显示的是类似于二进制的东西[B@59e73b47.如何在jsp中显示图像?

这将附加beacause galleria.image返回一个byte[]类型,并在jsp的结果html上显示byte[].toString()值[B@59e73b47.

您应该使用以下内容:

<img alt="Kangoo_image" src="data:image/jpeg;base64,new String(${galleria.image})" />

要在JSP上显示图像而不存储到文件系统并链接到它,您必须对字节数组进行Base64编码

byte[] encodeBase64 = Base64.encodeBase64(usersService.getAllFoto());
String base64Encoded = new String(encodeBase64, "UTF-8");
mav.addObject("galleria", usersService.getAllFoto());
IOUtils和Base64都来自org.apache.commonsEndFragment

 @Controller
 @SessionAttributes("UserSession")
 public class LoginController {

 @Autowired
 private UsersService usersService;

 @RequestMapping(value = "loginUsers", method = RequestMethod.POST)
 public ModelAndView loginUsers(HttpServletRequest request,@RequestParam("username")   String username,
        @RequestParam("password") String password) {

    Users user = usersService.loginUsers(username, password);

    if( user == null ) {
        ModelAndView MV = new ModelAndView("login");
        MV.addObject("erroreLogin", "username e/o password errati");
        return MV;
    } else if ( user.getAmministratore() == false ){
        request.getSession().setAttribute("UserSession",user);
        ModelAndView mav = new ModelAndView("homeUtente");
         byte[] encodeBase64 = Base64.encode(usersService.getAllFoto());
         String base64Encoded = new String(encodeBase64, "UTF-8");
          mav.addObject("userImage", base64Encoded )
        return mav;
    } else {
        request.getSession().setAttribute("UserSession",user);
        ModelAndView mav = new ModelAndView("utenti");
        mav.addObject("lista", usersService.getAllUtenti());
        return mav;
    }
 }

 @RequestMapping(value = "logout", method = RequestMethod.GET)
 public ModelAndView logout(HttpServletRequest request) {
    request.getSession().invalidate(); //invalido i dati presenti in sessione
    return new ModelAndView("login");
 }

}
在jsp代码中,使用此代码显示图像

     <img  src="data:image/jpeg;base64,${userImage}" />

 @Controller
 @SessionAttributes("UserSession")
 public class LoginController {

 @Autowired
 private UsersService usersService;

 @RequestMapping(value = "loginUsers", method = RequestMethod.POST)
 public ModelAndView loginUsers(HttpServletRequest request,@RequestParam("username")   String username,
        @RequestParam("password") String password) {

    Users user = usersService.loginUsers(username, password);

    if( user == null ) {
        ModelAndView MV = new ModelAndView("login");
        MV.addObject("erroreLogin", "username e/o password errati");
        return MV;
    } else if ( user.getAmministratore() == false ){
        request.getSession().setAttribute("UserSession",user);
        ModelAndView mav = new ModelAndView("homeUtente");
         byte[] encodeBase64 = Base64.encode(usersService.getAllFoto());
         String base64Encoded = new String(encodeBase64, "UTF-8");
          mav.addObject("userImage", base64Encoded )
        return mav;
    } else {
        request.getSession().setAttribute("UserSession",user);
        ModelAndView mav = new ModelAndView("utenti");
        mav.addObject("lista", usersService.getAllUtenti());
        return mav;
    }
 }

 @RequestMapping(value = "logout", method = RequestMethod.GET)
 public ModelAndView logout(HttpServletRequest request) {
    request.getSession().invalidate(); //invalido i dati presenti in sessione
    return new ModelAndView("login");
 }

}
     <img  src="data:image/jpeg;base64,${userImage}" />