关于JSP中图象显示,把数据读取出来。肯定是小case。但把图象显示在页面上确实大问题。
两种解决方案:
1。生成临时图象文件。
2。及时显示。可以用JSP,也可以用Servlet。但Servlet简单。下面是代码:
//把图象数据直接发往浏览器
package  allServlets;
import java.io.*;
import java.net.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;public class ShowPhoto extends HttpServlet
{
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String photoid=request.getParameter("f_ksbm").trim();//主键
ServletOutputStream out = response.getOutputStream();
ServletContext context = this.getServletConfig().getServletContext(); Connection conn = null;
PreparedStatement stmt  = null;
ResultSet rs    = null;
Properties props = new Properties();
props.put("user",     "louis");
props.put("password", "louis");
props.put("db",       "pubs");
props.put("server",   "happy:1034"); try
{
//Driver myDriver = (Driver) Class.forName("weblogic.jdbc.mssqlserver4.Driver").newInstance();
//conn = myDriver.connect("jdbc:weblogic:mssqlserver4", props);
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:sql"); Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select f_tp from tbda_ks  where f_ksbm='"+ photoid +"'";
rs=st.executeQuery(sql);
rs.next();
//InputStream istream = rs.getBinaryStream("f_tp");
//response.setContentType("image/jpeg"); //BufferedInputStream bis = new BufferedInputStream(istream);
BufferedOutputStream bos = new BufferedOutputStream(out); byte[] buffer =rs.getBytes("f_tp");
bos.write(buffer, 0, buffer.length);
bos.flush();
rs.close();
conn.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}}其中html页面我们采用扩展标记生成,如下:
package  allTags;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import javax.servlet.http.*;import java.sql.*;public class  ShowIndexInfo extends TagSupport
{
public int doStartTag() throws JspException
{
//数据库连接对象
Connection conn = null;
Statement stat  = null;
ResultSet rs    = null; //数据库连接参数
Properties props = new Properties();
props.put("user",     "louis");
props.put("password", "louis");
props.put("db",       "pubs");
props.put("server",   "happy:1034"); try
{
JspWriter  out=pageContext.getOut();
//数据的读取
//Driver myDriver = (Driver) Class.forName("weblogic.jdbc.mssqlserver4.Driver").newInstance();
//conn = myDriver.connect("jdbc:weblogic:mssqlserver4", props);
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:sql");
stat=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); String sql="select f_ksbm as 款式编码,f_kskh as 款式款号,f_ksmc as 款式名称,f_gg as 规格,f_sjsj as 设计时间,f_sjr as 设计人 from  tbda_ks";
rs=stat.executeQuery(sql); //数据的显示
rs.last();
if(rs.getRow()<=0)
{
out.println("<h1 style='Color:red'>没有数据</h1>");
}
else
{
rs.beforeFirst();
ResultSetMetaData  rsm=rs.getMetaData();
int fcount=rsm.getColumnCount(); out.println("<table>");
out.println("<tr  style='color:yellow;background-color:blue;'>");
for(int i=1;i<fcount;i++)
{
out.println("<td>");
out.println(rsm.getColumnName(i));
out.println("</td>");
}
out.println("</tr>");
while(rs.next())
{
out.println("<tr>");
for(int i=1;i<fcount;i++)
{ out.println("<td>");
String strtmp=rs.getString(rsm.getColumnName(i)).trim();
if(i==1)
{
out.println("<label  style=\"Color:blue;cursor:help;\"  onclick=\"window.open('info_all.jsp?f_ksbm="+strtmp+"',null,'height=400,width=600,status=yes,toolbar=no,menubar=no,location=no');\">"+strtmp+"</a>");
}
else
{
out.println(rs.getString(rsm.getColumnName(i)));
} out.println("</td>");
}
out.println("</tr>");
}
out.println("</table>");
}
rs.close();
conn.close();
}catch(Exception err)
{
err.printStackTrace();
throw new JspException(err.getMessage());
}
return SKIP_BODY;//注意静态常量的意义。
}
public int doEndTag() throws JspException
{
return EVAL_PAGE;
}
public Tag getParent()
{
return super.getParent();
}
public void release()
{
super.release();
}
public void setPageContext(PageContext pc)
{
super.setPageContext(pc);
}
public void setParent(Tag t)
{
super.setParent(t);
}
}