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]

Reply via email to