Struts2.0图片显示问题

kelwenqiu 2008-12-08 07:44:26
使用struts2.0显示数据库的图片

在Action中不能使用response对象

更不能象<IMG src="**.jsp?pictureid=???"/>

能有什么好的解决方法??
...全文
1419 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
guozebo 2010-09-22
  • 打赏
  • 举报
回复
数据库存的是图片的相对地址 ....
没想到楼主的出发点事对的,最后却选了错的终点。
我建议你不如直接在<img src=XX.jpg> 不是更好
ganwb119 2009-09-05
  • 打赏
  • 举报
回复
我的问题解决了,我是在数据库存的是图片的相对地址,取出来就可以显示图片了,具体的方法是:在action中,声明一个list,Bean的一个对象,都产生get,set方法,把数据库中的所有信息都读取出来,list=zhshBiz.findAll();//我是采用spring管理器的

jsp页面是:
<!-- 合作商家内容显示 bengin-->
<table width="458" border="1" cellpadding="4" cellspacing="0" bordercolor="#666666" style="font-size: 12px;">

<s:iterator id="zhsh" value="list">
<s:url id="url" value="#">
<s:param name="zurl" value="zurl"/>
<s:param name="zimage" value="zimage"/>
</s:url>
<tr>
<td style="font-size:14px" width="100"><s:property value="#zhsh.zname"/></td>
<td style="font-size:14px"><s:a href="%{zurl}"><img src="<s:property value="#zhsh.zimage"/>"></s:a></td>
</tr>
</s:iterator>
</table>

<!-- 合作商家内容显示end -->

zimage是Bean中的一个图片相对路径zurl是一个http://.......url
ganwb119 2009-09-04
  • 打赏
  • 举报
回复
可不可以以下这样用,image是bean里的一个属性:图片相对路径,在action有bean的声明,并有get,set方法
<table>
<tr>
<td>
<s:iterator id="zhsh" value="list">
<img src="#zhsh.image">
</<s:iterator>
</td>
</tr>
</table>
哪个有好的解决方法!急!
kelwenqiu 2008-12-12
  • 打赏
  • 举报
回复
这个方法我也想过,并做过,还是报:
java.lang.IllegalStateException: getWriter() has already been called for this response

Landor2004 2008-12-11
  • 打赏
  • 举报
回复
放到标签里确实不行,所以只能将
out.clear();
out = pageContext.pushBody();
放到jsp文件里,这可能和你说的不加入关联资源有些违背,但是似乎别无他法,可作如下修改
public class YourTag extends TagSupport {
try {
HttpServletResponse response = (HttpServletResponse)pageContext.getResponse();
OutputStream output=response.getOutputStream();
。。。。。。

然后再jsp中
    <tg:YourTag ......></tg:YourTag>
<%
out.clear();
out = pageContext.pushBody();
%>......

希望有高明方法出现!!! 呵呵,祝你好运。
kelwenqiu 2008-12-11
  • 打赏
  • 举报
回复
如果不要response.reset()的话就会报getWriter 已经被response调用
网上都说getWriter 和getOutPutStream 只能用一个
我的标签处理类就只用到了getOutPutStream啊!!
你说在后面加上那两句,难道:JspWriter out=pageContext.getOut();
try {
out.clear();
out = pageContext.pushBody();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这样做意义何在??
我的理解是在页面解析<IMG src=" "/>时就正在用getWriter
而在解析<show:img file="new byte[]"/>时标签处理类又用到了getOutPutStream
不知是否如此,如果是,那就意味着这个问题无法解决??!
望高手解答!!!
Landor2004 2008-12-11
  • 打赏
  • 举报
回复
我记得有pageContext.getOut()返回的就是那个out
kelwenqiu 2008-12-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 Landor2004 的回复:]
这个异常是个常见的异常,在最后加上
out.clear();
out = pageContext.pushBody();
[/Quote]
这里的out是jsp页面上的内置对象吧
out = response.getOutputStream();
这个out都没有那两个方法!!
Landor2004 2008-12-10
  • 打赏
  • 举报
回复
这个异常是个常见的异常,在最后加上
out.clear();
out = pageContext.pushBody();
kelwenqiu 2008-12-09
  • 打赏
  • 举报
回复
读的是数据库的图片
struts用不用不重要 ,框架中是不要在你的Action中看到有
使用内置对象的地方!!
本来想写个自定义标签大概是
<IMG src="<show:img file="new byte[]"/>"/>

代码
public class ImageTag extends TagSupport
private Object file = null;
private OutputStream out = null;

@SuppressWarnings("static-access")
public int doStartTag() throws JspTagException {

return super.SKIP_BODY;
}

@SuppressWarnings("static-access")
public int doEndTag() throws JspTagException {
this.release();
HttpServletResponse response = (HttpServletResponse)
pageContext.getResponse();
response.reset();
response.setContentType( "multipart/form-data" );

try {
out = response.getOutputStream();
out.flush();
byte[] fileByte = (byte[]) file;
out.write(fileByte);
out.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null)
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}

}
return super.EVAL_PAGE;
}

但是在response.reset():
处会报错:
java.lang.IllegalStateException
at org.apache.catalina.connector.ResponseFacade.reset(ResponseFacade.java:307)
at org.apache.jsp.show_005fpro_jsp._jspService(show_005fpro_jsp.java:90)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
郁闷!!?
hbwhwang 2008-12-09
  • 打赏
  • 举报
回复
看漏题目的了。果然是要从数据库读。。。

不过我不明白的是为什么不能用response?
你不用,struts也会用啊
hbwhwang 2008-12-09
  • 打赏
  • 举报
回复
如果图片不是放到数据库而是放到文件,并且不保密
那么我建议你用APACHE来做图片显示

在生成JSP里面定义好图片的静态地址就OK了
Landor2004 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kelwenqiu 的回复:]
回复Landor2004
当然我们可以在src中调用一个action 在action中使用response对象输出图片
我现在是在不用response对象的情况下有没有别的方法
因为项目的框架是建议不要调用任何的内置对象!!
[/Quote]
调用输出流,没办法,只能那么弄,呵呵
kelwenqiu 2008-12-09
  • 打赏
  • 举报
回复
回复Landor2004
当然我们可以在src中调用一个action 在action中使用response对象输出图片
我现在是在不用response对象的情况下有没有别的方法
因为项目的框架是建议不要调用任何的内置对象!!
Landor2004 2008-12-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kelwenqiu 的回复:]
回复Landor2004
不是有没有问题
如果这样做的话就要在jsp页面上些数据库连接等一大堆代码


[/Quote]
请你不要说话说一半,你是怎么想的,显示个图片就要在jsp写一堆数据库代码,即使图片是从数据库里读出来的也不会跑到jsp页面上去写什么数据库代码。

还有,不是我说的有没有问题,而是你提问的时候说的不能xxx,而我告诉你你说的“不能”都是错误的
kelwenqiu 2008-12-09
  • 打赏
  • 举报
回复
回复Landor2004
不是有没有问题
如果这样做的话就要在jsp页面上些数据库连接等一大堆代码

Landor2004 2008-12-08
  • 打赏
  • 举报
回复
struts2通过实现ServletResponseAware接口来获取response
public class DownloadFile extends ActionSupport implements ServletResponseAware{
private HttpServletResponse resp;
public void setServletResponse(HttpServletResponse resp) {
// TODO Auto-generated method stub
this.resp = resp;
}
}



更不能象 <IMG src="**.jsp?pictureid=???"/> 这个没有问题呀,呵呵
lihan6415151528 2008-12-08
  • 打赏
  • 举报
回复
难道struts2就没有传值的呢?不可能吧
bruni 2008-12-08
  • 打赏
  • 举报
回复
1. 可以用Servlet来输出Image.
<a href="foo.jsp"><img src="imageservlet/123456789.png"></a>

<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>com.example.ImageServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/imageservlet/*</url-pattern>
</servlet-mapping>

servlet中得到数据, 然后输出到response.

2. struts2要使用request,response
你可以实现接口
ServletRequestAware/ServletResponseAware

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧