如何在jsp中显示mysql中检索到的图像。我正在使用struts2和tiles

时间:2014-11-21 05:36:06

标签: mysql jsp struts2 tiles

我正在为我的项目使用strust2和tiles。以下是输入ID的代码( jsp )。

<s:textfield    name="uniqueID"    label="Enter Unique ID"    required="required"/>

这是动作文件。

public String execute() throws Exception{
    SearchDao.search(selectedID,uniqueID);
    return SUCCESS;
}

dao 将检索图片。

try{
    .
    .
    .
    rs = ps.executeQuery();

    if(rs.next()){          
        InputStream originalImageStream = rs.getBinaryStream(1);

        File file = new File("Retina"+".jpg");
        FileOutputStream fileOutputStream = new FileOutputStream(file);

        while ((length = originalImageStream.read()) != -1) {
            fileOutputStream.write(length);                 
        }
        fileOutputStream.close();
    }
    else{
        return null;
    }
}
catch(Exception ex){
    ex.printStackTrace();
}
return "found";

找到图像后,将返回 found ,因此操作文件将返回成功 struts.xml 中的代码是

<action name="search"       class="com.ActionClasses.SearchAction">
    <result name="success"  type="tiles">   found       </result>
    <result name="input"    type="tiles">   search      </result>
    <result name="error"    type="tiles">   notFound    </result>
</action>

这是 tiles.xml 文件。

<definition name="found" extends="home">
    <put-attribute name="myTitle"   value="searchSuccess"/>
    <put-attribute name="myBody"    value="/found.jsp"/>
</definition>

现在如何在 found.jsp 中显示检索到的图像。我在Internet上找到了一些解决方案,但仅适用于使用struts2或struts2以及hibernate的项目。对于同时使用strus2和tiles的项目,我没有找到任何解决方案。谁能帮我。谢谢。

1 个答案:

答案 0 :(得分:0)

尝试一下......我已经在我的一个项目中实现了类似的场景,但是在春天,我想它应该对你有用而几乎没有变化

这就是我实施的内容。我创建了一个控制器(也就是struts中的动作),如下所示

  

@RequestMapping(value = "view", method = RequestMethod.GET)
    public void getImage(@RequestParam(value = "location") String location, HttpServletResponse response) {
        String ext = FilenameUtils.getExtension(location);
        response.setContentType("image/"+ext);
        try {
            File file = new File(location);
            BufferedImage image = ImageIO.read(file);
            OutputStream baos = response.getOutputStream();
            ImageIO.write(image, ext, baos);
            baos.flush();
            baos.close();
        } catch (FileNotFoundException e) {
            logger.error("File Not Found: " + location, e);
        } catch (IOException e) {
            logger.error("Can't read the File: " + location, e);
        } catch(Exception e) {
            logger.error("Can't read input file: " + location, e);
        }

        return;
    }

然后在服务器实际视图的控制器/操作中我做了类似的事情

    final String IMAGE_RESOLVER = "../../image/view?location=";
    Game game = gameService.populateGame(gameId);
    if(game.getThumbnailPath() != null) {
        game.setThumbnailPath(IMAGE_RESOLVER.concat(game.getThumbnailPath()));
    }
    mv.addObject("game", game); // set object to return to view

当名称为“thumbnail”的DOM对象收到此字符串时,它会调用上面提到的操作,然后返回一个图像

希望这对你有用