2013-09-08 6 views
0

Я написал сервлет, чтобы загружать файлы на сервер и хранить их. Пока я запускаю DevelopmentMode (это проект GWT), все работает нормально. Но так как я развернула веб-приложение на сервере Tomcat сервлет даже не называется ..Java Servlet не работает на Tomcat

public class ImageService extends HttpServlet { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
private static final long MAX_FILE_SIZE = 1024 * 1024 * 1024; //1GB 

@Override 
protected void doPost(final HttpServletRequest request, 
     final HttpServletResponse response) { 

    slog("SERVLET STARTED"); 

    boolean isMultipart = ServletFileUpload.isMultipartContent(request); 

    if (isMultipart) { 
     slog("REQUEST IS MULTIPART"); 
     response.setStatus(HttpServletResponse.SC_OK); 
     response.setContentType("text/html"); 

     FileItemFactory factory = new DiskFileItemFactory(); 
     ServletFileUpload upload = new ServletFileUpload(factory); 
     upload.setFileSizeMax(MAX_FILE_SIZE); 
     try { 
      List<FileItem> items = upload.parseRequest(request); 
      Iterator<FileItem> iterator = items.iterator(); 
      while (iterator.hasNext()) { 

       FileItem item = iterator.next(); 

       if (!item.isFormField()) { 
        String fileName = item.getName(); 
        slog("TROVATO FILE " + item.getName()); 
        String root = getServletContext().getRealPath("/"); 
        File path = new File(root + "/fileuploads"); 
        slog("SALVO FILE IN " + path.getAbsolutePath()); 
        if (!path.exists()) { 
         path.mkdirs(); 
        } 

        File uploadedFile = creaFileNonAmbiguo(path, fileName); 
        slog("NOME ASSEGNATO AL FILE " + uploadedFile.getName()); 
        item.write(uploadedFile); 
        response.getWriter().write(uploadedFile.getName() + ";"); 

       } 
      } 

      response.getWriter().flush(); 
      slog("RISPOSTA INVIATA"); 

     } catch (Exception e) { 
      e.printStackTrace(); 

     } 
    } else { 
     slog("LA RICHIESTA NON E' MULTIPART"); 
     response.setStatus(HttpServletResponse.SC_NO_CONTENT); 
    } 
    slog("SERVLET TERMINATA"); 
} 

@Override 
protected void doGet(final HttpServletRequest request, 
     final HttpServletResponse response) { 


    response.setContentType("image/jpeg"); 
    String root = getServletContext().getRealPath("/").concat(
      "fileuploads/"); 
    String path = root.concat(request.getParameter("src")); 

    File file = new File(path); 
    response.setContentLength((int) file.length()); 
    FileInputStream in; 
    try { 
     in = new FileInputStream(file); 
     OutputStream out = response.getOutputStream(); 
     byte[] buf = new byte[1024]; 
     int len = 0; 
     while ((len = in.read(buf)) >= 0) { 
      out.write(buf, 0, len); 
     } 
     in.close(); 
     out.close(); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

} 

private File creaFileNonAmbiguo(File path, String fileName) { 

    File res = new File(path + "/" + fileName); 
    if (!res.exists()) 
     return res; 
    else { 
     return creaFileNonAmbiguo(path, "c".concat(fileName)); 
    } 
} 

private void slog(String s) { 
    System.out.println("FILE SERVLET: " + s); 
} 

} 

Что случилось с моим кодом? Почему это работает в devmode, а не на Tomcat?

это моя web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"> 

<!-- Servlets --> 


<servlet> 
    <servlet-name>dataLayerServlet</servlet-name> 
    <servlet-class>com.tesi.server.DataLayerServiceImpl</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>dataLayerServlet</servlet-name> 
    <url-pattern>/segnalazioni_degrado/dataLayer</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>loginServlet</servlet-name> 
    <servlet-class>com.tesi.server.LoginServiceImpl</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>loginServlet</servlet-name> 
    <url-pattern>/segnalazioni_degrado/login</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>mailServlet</servlet-name> 
    <servlet-class>com.tesi.server.MailServiceImpl</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>mailServlet</servlet-name> 
    <url-pattern>/segnalazioni_degrado/mail</url-pattern> 
</servlet-mapping> 


<servlet> 
    <servlet-name>imageServlet</servlet-name> 
    <servlet-class>com.tesi.server.ImageService</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>imageServlet</servlet-name> 
    <url-pattern>/segnalazioni_degrado/imageUpload</url-pattern> 
</servlet-mapping> 


<!-- Default page to serve --> 
<welcome-file-list> 
    <welcome-file>Segnalazioni_Degrado.html</welcome-file> 
</welcome-file-list> 

+0

Что произойдет, если вы попробуете называть его вручную (т. Е. Введите сервлет-url в браузере)? – Tomer

+0

@fatman Вы имеете в виду вот это? http: // localhost: 8080/Segnalazioni_Degrado /? imageServlet ничего не происходит. – Filippo

+0

Да, какая ошибка у вас? – Tomer

ответ

0

OK Я решил. Проблема заключалась в том, что сервлет был сопоставлен с /segnalazioni_degrado/imageUpload, а мой основной модуль GWT - Segnalazioni_Degrado (заглавные буквы). Изменение шаблона url сделало трюк.

0

Прежде всего, в соответствии с вашими web.xml, то imageServlet отображается:

/segnalazioni_degrado/imageUpload 

Во-вторых, вы должны удалить знак вопроса из URL-адреса попробуйте изменить его на:

localhost:8080/Segnalazioni_Degrado/imageUpload 

и посмотреть, что произойдет.

+0

Я получаю сообщение об ошибке 404 – Filippo