在Jsp Spring上显示本地驱动程序的图像

时间:2014-10-30 02:51:39

标签: spring jsp

我正在创建一个maven项目,我尝试从我的计算机显示图像,但JSP不允许它。 所以在Stackoverflow上搜索之后我得到了一个解决方案是使用FileServlet来处理它, 但尝试之后,我仍然无法显示图像,所以请帮助我

这是我的代码:

FileServlet.java

package fileServer;

import java.io.*;
import java.net.URLDecoder;

import javax.servlet.*;
import javax.servlet.http.*;

public class FileServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

  private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
  private String filePath;

 /**
  * @see HttpServlet#HttpServlet()
  */
  public FileServlet() {
    super();
    // TODO Auto-generated constructor stub
  }

 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  *      response)
  */
 public void init() throws ServletException {

   // Define base path somehow. You can define it as init-param of the
   // servlet.
   this.filePath = "F:\\DrugStore\\Medicine";

   // In a Windows environment with the Applicationserver running on the
   // c: volume, the above path is exactly the same as "c:\files".
   // In UNIX, it is just straightforward "/files".
 }

 protected final void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {

   System.out.println("In do get");

   // Get requested file by path info.
   String requestedFile = request.getPathInfo();

   // Check if file is actually supplied to the request URI.
   if (requestedFile == null) {
     // Do your thing if the file is not supplied to the request URI.
     // Throw an exception, or send 404, or show default/warning page, or
     // just ignore it.
     response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
     return;
   }

   // Decode the file name (might contain spaces and on) and prepare file
   // object.
   File file = new File(filePath, URLDecoder.decode(requestedFile, "UTF-8"));

   // Check if file actually exists in filesystem.
   if (!file.exists()) {
     // Do your thing if the file appears to be non-existing.
     // Throw an exception, or send 404, or show default/warning page, or
     // just ignore it.
     response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404.
     return;
   }

   // Get content type by filename.
   String contentType = getServletContext().getMimeType(file.getName());

   // If content type is unknown, then set the default value.
   // For all content types, see:
   // http://www.w3schools.com/media/media_mimeref.asp
   // To add new content types, add new mime-mapping entry in web.xml.
   if (contentType == null) {
     contentType = "application/octet-stream";
   }

   // Init servlet response.
   response.reset();
   response.setBufferSize(DEFAULT_BUFFER_SIZE);
   response.setContentType(contentType);
   response.setHeader("Content-Length", String.valueOf(file.length()));
   response.setHeader("Content-Disposition", "attachment; filename=\""
            + file.getName() + "\"");

   // Prepare streams.
   BufferedInputStream input = null;
   BufferedOutputStream output = null;

   try {
     // Open streams.
     input = new BufferedInputStream(new FileInputStream(file),
                DEFAULT_BUFFER_SIZE);
     output = new BufferedOutputStream(response.getOutputStream(),
                DEFAULT_BUFFER_SIZE);

     // Write file contents to response.
     byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
     int length;
     while ((length = input.read(buffer)) > 0) {
       output.write(buffer, 0, length);
     }
   } finally {
     // Gently close streams.
     close(output);
     close(input);
   }
 }

 protected final void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    System.out.println("In do post");

 }

 private static void close(Closeable resource) {
   if (resource != null) {
     try {
       resource.close();
     } catch (IOException e) {
       // Do your thing with the exception. Print it, log it or mail
       // it.
       e.printStackTrace();
     }
   }
 }
}

的web.xml

<servlet>
    <display-name>fileServlet</display-name>
    <servlet-name>fileServlet</servlet-name>
    <servlet-class>fileServer.FileServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>fileServlet</servlet-name>
    <url-pattern>/fileServlet</url-pattern>
</servlet-mapping>

的index.jsp

<td colspan="2"><img src="fileServlet?path=${pr.imgname}" /></td>

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我不清楚你的代码是如何编写的,但我猜你所有的jsp页面都在 WEB-INF 文件夹中,并且只能通过springMVC请求访问。这是由于spring dispatcher过滤器,为了让静态资源被排除在过滤器之外,你可以将静态文件类型添加到默认的servlet映射中,如下所示:

<servlet-mapping>
   <servlet-name>default</servlet-name>
   <url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
   <servlet-name>default</servlet-name>
   <url-pattern>*.bmp</url-pattern>
</servlet-mapping>