下面这个页面先session这个student对象 
<% 
for(int i=0; i <nn; i++) 
{ student[i] =(Studentdata)request.getAttribute("aa"+i); //循环获取值变量名自动加i; 
session.setAttribute("student",student[i]); 
%> 
<tr> 
<td> <%=student[i].getSId() %> </td> 
<td> <%=student[i].getSName() %> </td> 
<td> <%=student[i].getSSex()%> </td> 
<td> <%=student[i].getSAddress() %> </td> 
<td> 
<img src="picture.jsp"/> //在在这里预想能够通过picture.jsp读取照片显示出来在这个页面,因为每次到这里就循环读取一次信息 
</td> 
</tr> 
<% }%>
然后再新建一个picture.jsp用来显示照片 
  <% Studentdata student=(Studentdata)request.getAttribute("student");%> 
    <table border="1"> 
      <tr> 
      <td> <%    //预想让这段代码显示图片在这个表格中 
                response.setContentType("image/jpeg"); 
                OutputStream sout = response.getOutputStream(); 
                InputStream in = student.getSPicture().getBinaryStream(); //这里读取照片 
                  byte b[] = new byte[in.available()]; 
                int len=0; 
                while ((len = in.read(b))!= -1) { 
                sout.write(b,0,len); 
                }              
                sout.flush(); 
                sout.close(); 
                in.close(); 
            %> 
      </td> 
      </tr> 
      </table> 
我是想查询所有学生的信息,并显示每个学生的对应照片,可是结果是所有的照片都是最后一个学生的照片,我确定所有的照片不是一样的。我预想是让一个循环,每次循环都session.setAttribute("student",student[i]); 那继续执行代码的话,按理img显示的图片是不同的,可是就是全部都是最后一个学生的照片,学生信息没有错。希望高手们给点建议和提醒,是不是代码的执行顺序有什么不对啊还是其他的原因,小弟我不懂,先谢谢了

解决方案 »

  1.   

    这个原因很简单,就是http加载图片的过程楼主没弄清楚
    http请求,响应这个过程,服务器返回的只有html代码,注意我是相对css和img等说的。
    当浏览器解析html的时候,读到需要外联的css或图片的时候,就会再发请求,这也是为什么当网络状况非常不好的时候,
    会出现外联的css丢失,图片不显示等情况的发生。针对楼主的代码,html解析完的时候,session里的student就是最后一个,不论你的picture.jsp请求几次,都是这个student。
    不知道我解释清楚了没有所以解决办法就是不要把student放session里。
    你可以这样
    <img src="picture.jsp?sid=<%= student[i].getSId() %>"/>
    然后在picture.jsp里获取sid,根据student的id取照片
      

  2.   

    有明白和不明白,不明白的是如果根据你说的方法,在picture.jsp中根据student的id取照片,那我是不是还要在picture.jsp中再一次从数据库中根据id来查询student信息,再把图片显示出来啊。还是有另一种意思啊
      

  3.   

    那我是不是还要在picture.jsp中再一次从数据库中根据id来查询student信息,再把图片显示出来啊
    ----------------------------------------------------------------------------------------
    完全正确,说白了,picture.jsp必须知道你要取谁的照片。之前你的方法是不行的
      

  4.   

    传id过来后,根据id取出对应的数据,不然的话picture.jsp这个页面就会显示循环的最后条记录的信息.
      

  5.   

    恩,知道了,只有这种办法了现在,不过如果有更好的办法,不用那么麻烦就好了,比如可以不用使用另外一个页面来显示图片,直接在用的页面像输出数据那样输出来就好了。
    谢谢你们的宝贵意见,对了,如果我在pictue.jsp中获取img传递的值是不是用request.getquerrystring();啊
      

  6.   

    原来是写asp的吧?
    java里就是request.getParameter
      

  7.   

    是java的,那就用request.getParameter
      

  8.   

    请问如何在jsp加载的时候就自动触发相应的action并传值过去,而不是要必须通过form表单提交。就是正常的表单按钮提交都要按钮触发请求,但是我想不通过按钮,而是在jsp加载的时候就自动触发相应的action并传值