站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题[菜鸟提问]关于从oracle数据库中将blob数据输出到jsp上的问题,急!

[菜鸟提问]关于从oracle数据库中将blob数据输出到jsp上的问题,急!

摘要: [菜鸟提问]关于从oracle数据库中将blob数据输出到jsp上的问题,急!


小弟最近在使用Jbuilder2005 + tomcat5.0开发B/S架构的数据库,使用了Struts。数据库中有些图片数据是以BLOB类型存储的。现在需要把这些图片输出到JSP上并显示出来。
现在,我已经能够实现每次将一个图片输出到一个空白网页上,但是,如果输出多个图片到一个网页上时,这些图片会重叠在一起,最终只显示最后一个图片而已。
问题1:请问如何将这些图片输出到同一网页上显示出来,并避免出现重叠的问题。

后来,我又考虑是否可以先将图片输出到硬盘,然后利用将图片显示出来。部分代码为:FileOutputStream fout=new FileOutputStream("temp.jpeg")。该代码如果用jdk运行的话,可以将图片输出到当前目录下。但是,如果放在tomcat中,发布并运行该项目,则无法将图片输出到class文件所在的当前目录。经试验,如果使用绝对路径,即FileOutputStream fout=new FileOutputStream("d:/temp.jpeg")则可以将图片输出到绝对路径下。显然,使用绝对路径将带来很多麻烦。
所以,问题2:请问如何才能将图片输出到相对路径下?

附上我的action代码:

public class AlJxxnGraphViewAction extends Action {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest servletRequest,
HttpServletResponse servletResponse) {
AlJxxnGraphViewActionForm alJxxnGraphViewActionForm = (
AlJxxnGraphViewActionForm) actionForm;
int flag=0;
int n=1;
List list=new ArrayList();
String code="";
try{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/allds");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
String sql = "select CODE,GRAPH from TEST";
ResultSet rs = stmt.executeQuery(sql);
list.add("<table width='400' border='1'>");
while(rs.next()){
if(flag==0){
code=rs.getString("CODE");
InputStream in=rs.getBinaryStream(2);
String name="temp_"+code+".jpeg";
File f=new File(name);
FileOutputStream fout=new FileOutputStream(f);
byte[] buf=new byte[10240];
int len=in.read(buf,0,buf.length);
while(len >= 0){
fout.write(buf,0,len);
len=in.read(buf,0,buf.length);
}
fout.flush();
fout.close();
list.add("<tr><td align='center'></td>");
flag=1;
n++;
}
else{
if(code.equals(rs.getString("CODE"))){
continue;
}
else{
code=rs.getString("CODE");
InputStream in=rs.getBinaryStream(2);
String name="temp_"+code+".jpeg";
File f=new File(name);
FileOutputStream fout=new FileOutputStream(f);
byte[] buf=new byte[10240];
int len=in.read(buf,0,buf.length);
while(len >= 0){
fout.write(buf,0,len);
len=in.read(buf,0,buf.length);
}
fout.flush();
fout.close();
if((n%2)==1){
list.add("<tr><td align='center'></td>");
}
else{
list.add("<td align='center'></td></tr>");
}
n++;
}
}
}
if((n%2)==0){
list.add("</tr></table>");
}
else{
list.add("</table>");
}
alJxxnGraphViewActionForm.setList(list);
rs.close();
stmt.close();
conn.close();
}
catch(Exception exc){
exc.printStackTrace();
}
return(actionMapping.findForward("success"));
}
}

请高手指教,谢谢!



加一个图片路径配置吧 一劳永逸
在tomcat中取相对路径不太容易
更重要的是:个别tomcat版本还有bug





谢谢沙发上的朋友的帮助!

那么,问题1有没有解呢?


另外,如你所说,添加图片路径配置,指的是在oracle的表中添加一个数据项,用来保存图片路径,是么??


关于问题2,可以用一种变通的方法来解决:
在启动服务器的时候,设置一个监听器,获得部署环境的根目录,然后赋给系统持久化常量。以后程序中要用到绝对路径时,直接引用就好了,从而避免了直接在程序中写绝对路径带来的不便。


偶是菜鸟,请问如何设置监听器?能介绍的详细些么??谢谢


自己顶下


学习一下


高手指点下吧。难道这个问题很难么??


有朋友提示我,可以用下面的方法:

通过formbean的对象处理。
数据库中取出的数据通过formbean传到页面,在form中声明多个变量分别存放,就不会有问题;
例如:
private BLOB pic1 = null;
private BLOB pic2 = null;

下面是get、set方法
在eclipse中可以生成的
stusts框架下基本上都这样处理

----------------------------------------------

如上所述,那么,在JSP页面中该如何将pic1和pic2显示出来呢?



在web.xml中设置启动时加载的一个得到部署路径的servlet

InitServlet
InitServlet
init system params
com.huolong.InitServlet
1


InitServlet
/InitServlet


servlet代码如下:
public class InitServlet extends HttpServlet {
public void init() {
//初始化系统根路径
String web_root = getServletContext().getRealPath("/");
if ((web_root!=null)&&((!web_root.endsWith("/"))&&(!web_root.endsWith("//"))))
web_root += "/";
//TemplateConstants为你定义的static常量类
TemplateConstants.WEB_ROOT = web_root;
}
}


谢谢火龙的指教!


↑返回目录
前一篇: 简单问题,请问怎么得到session中的值,谢谢。
后一篇: iTextAsian.jar包有哪为老大有啊?急需要啊