The only question I would ask is why your storing it in the ActionForm? If it's request-scoped, that means you are reading the image from the database with each request (or from server cache I suppose), which is something I would suggest avoiding if possible. If the form is session-scoped (which I see below that it is), I would be weary of storing something as large as an image in it, most especially if you are working in a clustered environment. Even in a single-server environment though, it is always best to keep session size as small as possible, and a few K for an image is something I would personally think long and hard about.
Do you have a reason for storing it in the ActionForm? Maybe you have a requirement that causes that to make more sense? -- Frank W. Zammetti Founder and Chief Software Architect Omnytex Technologies http://www.omnytex.com On Thu, September 29, 2005 10:15 am, Braun, James F said: > I didn't mean for this to become debate. I was stuck with a legacy app > that required storing images in the db. > > With the help of this list and some digging I think I came up with a > relatively elegant solution (subject to expert critique which is > welcome). I don't know if attachments are allowed on this list so I've > included the how-to I write up for myself after every quest of this > sort. Any suggestions on how to improve this would be appreciated. > > Although I'm new to struts I've collected several of these how-to > articles which address problems I've seen on this list. Is there an > archive I can post them where they can be critiqued and shared with > others? > > Thanks for all the help. > > J. > > J. Braun > Polaroid Corp. > Waltham MA USA > +1 (781) 386 6871 > [EMAIL PROTECTED] > > "Lemmings, as a group, have a very bad reputation. But no individual > lemming has ever been singled out for blame." > Anonymous > > /// code ///////////////////////////////////////// > > How to read an image from a db and display in an html page > > Goal: Display an image in a .jsp page that is stored in a database blob > > Synopsis: The blob is read into a byte array that is stored in the > ActionForm. The .jsp page uses a <img tag to call an action that writes > the byte array to the response. > > Reference: http://struts.apache.org/userGuide/struts-html.html#img > > The code: > > -- This reads the image in from the db > try > { > pictureStream = rs.getBinaryStream("picture"); > byte[] bytes = new byte[1024*1024]; // some maximum size > > int byteSize = pictureStream.read(bytes); // read in the bytes > > byte[] bytesX = new byte[byteSize]; // create a new array of > the proper size > > for(int i=0;i<byteSize;i++) // copy them into the new array > { > bytesX[i] = bytes[i]; > } > > pictureBytes = bytesX; // assign it to the form variable > } > catch(FileNotFoundException ex) > { > System.err.println("selectionForm.populate.picturefile: " + > ex.getMessage()); > logger.error("selectionForm.populate.picturefile: " + > ex.getMessage()); > } > catch(IOException ex) > { > System.err.println("selectionForm.populate.picturefile: " + > ex.getMessage()); > logger.error("selectionForm.populate.picturefile: " + > ex.getMessage()); > } > > -- This is the .jsp code > <tr> > <td height="210" colspan="2" valign="top" > align="center"> > <!-- this is the photo section --> > <div align="center"> > <html:img action="/jpegServerAction.do" > width="105" height="142" > alt="Client photo" /> > </div> > </td> > </tr> > > -- This is the action code that writes the array to the response > > public class JpegServerAction > extends Action > { > public ActionForward execute(ActionMapping actionMapping, > ActionForm actionForm, > HttpServletRequest request, > HttpServletResponse response) > { > WL_Logger logger = new WL_Logger(); > > SelectionForm selectionForm = (SelectionForm)actionForm; > > try > { > response.setContentType("image/jpeg"); > ServletOutputStream out = response.getOutputStream(); > if(selectionForm.getPictureBytes() != null) > { > out.write(selectionForm.getPictureBytes()); > } > } > catch(IOException ex) > { > System.err.println("JpegServerAction.execute: " + > ex.getMessage()); > logger.error("JpegServerAction.execute: " + ex.getMessage()); > } > > return null; // tells the Action servlet to not do anything more > } > } > > -- This is the struts-config.xml entry - scope must be session! > > <action name="selectionForm" > path="/jpegServerAction" > scope="session" > type="transcard15.JpegServerAction" > validate="false" /> > > -- > This transmission is intended only for use by the addressee(s) named > herein and may contain information that is proprietary, confidential > and/or legally privileged. If you are not the intended recipient, you are > hereby notified that any disclosure, copying, distribution, or use of the > information contained herein (including any reliance thereon) is STRICTLY > PROHIBITED. If you received this transmission in error, please immediately > contact the sender and destroy the material in its entirety, whether in > electronic or hard copy format. Thank you. > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]