Hi, Wasn't sure whether to start a new thread but my question is in regards to the previous code. As well as the jpeg I also have some html that I wanted to include in the same page - so the html snippet is in a directory outside of the webapps directory and when a user selects a link I'd like to include it in the web output. I was hoping to use the jsp:include tag to include the snippet (no html or body tags) - I tried with the same code that Chris sent to open a jpeg - thinking it might be the same solution for the html but have gotten an internal error at the jsp include line. The servlet works great with a jpeg. I've pasted the error below - I just want to check that it really would be along the same lines to include html in a jsp as it was to include an image (both being outside the webapps directory) Or am I way off base? Thanks
java.lang.IllegalStateException org.apache.jasper.runtime.ServletResponseWrapperInclude.getOutputStream(ServletResponseWrapperInclude.java:63) sbml.test.OpenFile.sendFile(OpenFile.java:48) sbml.test.OpenFile.service(OpenFile.java:89) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:965) org.apache.jsp.web.testdetails_jsp._jspService(testdetails_jsp.java:163) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) Servlet: import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class OpenFile extends HttpServlet { private static final int BUFFER_SIZE = 4096; protected File findFile(HttpServletRequest request) throws IOException { String plot = request.getParameter("plot"); File file = new File(plot); return file; } protected String getMimeType(HttpServletRequest request, File file) { ServletContext application = super.getServletConfig ().getServletContext(); return application.getMimeType(file.getName()); } protected void sendFile(File file, HttpServletResponse response) throws IOException { BufferedInputStream in = null; try { int count; byte[] buffer = new byte[BUFFER_SIZE]; in = new BufferedInputStream(new FileInputStream(file)); ServletOutputStream out = response.getOutputStream(); while(-1 != (count = in.read(buffer))) out.write(buffer, 0, count); out.flush(); } finally { if (in != null) { try { in.close(); } catch (IOException ioe) { System.err.println("IO exception caught"); } } } } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { File file = findFile(request); if(null == file || !file.exists()) { response.sendError(HttpServletResponse.SC_NOT_FOUND); } else if(!file.canRead()) { response.sendError(HttpServletResponse.SC_FORBIDDEN); } else { response.setStatus(HttpServletResponse.SC_OK); response.setContentType(getMimeType(request, file)); response.setHeader("Content-Type",String.valueOf(file.length ())); response.setHeader("Content-Disposition","attachment; filename="+ file.getName()); sendFile(file, response); } } } On Tue, Mar 25, 2008 at 9:33 AM, Kimberly Begley <[EMAIL PROTECTED]> wrote: > Thanks so much!! > The image is coming up now! > So much appreciated! > Kimberly > > > On Tue, Mar 25, 2008 at 12:03 AM, Christopher Schultz > <[EMAIL PROTECTED]> wrote: > > -----BEGIN PGP SIGNED MESSAGE----- > > Hash: SHA1 > > > > Kimberly, > > > > > > Kimberly wrote: > > | I might have messed it up when getting it to compile - I was having > > | problems with the getMimeType method with messages like this: > > > > Oops. It looks like I gave you some bad code, too. > > > > > > | /usr/local/jdk1.5.0_14/bin/javac -d ../../classes/ OpenFile.java > > | OpenFile.java:35: cannot find symbol > > | symbol : method getServletContext() > > | location: interface javax.servlet.http.HttpServletRequest > > | ServletContext application = request.getServletContext(); > > > > Obviously, that should have been: > > > > ServletContext application = > > ~ super.getServletConfix().getServletContext(); > > > > > > | OpenFile.java:38: incompatible types > > | found : java.lang.String > > | required: java.io.File > > | return application.getMimeType(file.getName()); > > > > And it looks like this should have been > > > > protected String getMimeType(HttpServletRequest request, File file) > > > > { > > ~ // This is a reasonable default implementation. > > ~ // Feel free to change it. > > ~ ServletContext application = request.getServletContext(); > > > > ~ return application.getMimeType(file.getName()); > > } > > > > ...which will also fix this problem: > > > > > > | OpenFile.java:92: setContentType(java.lang.String) in > > | javax.servlet.ServletResponse cannot be applied to (java.io.File) > > | response.setContentType(getMimeType(request, file)); > > > > Try my fixes and see what happens. > > > > If the image does not appear, try using LiveHTTPHeaders or some other > > tool to watch the HTTP request/response for the image and see what > > status code is returned. Feel free to add debug logging statements to > > the class to give yourself more information. > > > > > > - -chris > > -----BEGIN PGP SIGNATURE----- > > Version: GnuPG v1.4.8 (MingW32) > > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > > > iEYEARECAAYFAkfntJQACgkQ9CaO5/Lv0PBudwCgqOgUD3S9+GAePwQRAJpRNSHQ > > NqgAoKuqx54kAqfzGaO+MbaWDMbySgCe > > =yuDp > > > > > > -----END PGP SIGNATURE----- > > > > --------------------------------------------------------------------- > > To start a new topic, e-mail: users@tomcat.apache.org > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > -- > >