2013-09-08 2 views
0

서블릿을 작성하여 서버에 파일을 업로드하고 저장했습니다. DevelopmentMode (GWT 프로젝트)를 실행하는 한 모든 것이 정상적으로 작동합니다. 하지만 Tomcat에 webapp을 배포 했으므로 서블릿은 호출되지 않습니다.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); 
} 

} 

내 코드에 어떤 문제가 있습니까? 어떻게 Tomcat이 아닌 devmode에서 작동합니까?

내의 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

나는 그것을 풀었다. 문제는 서블릿이 /segnalazioni_degrado/imageUpload으로 매핑되었지만 GWT 주 모듈은 Segnalazioni_Degrado (대문자)였습니다. URL 패턴을 변경하면 트릭을 만들었습니다.

0

우선이다, 당신의 web.xml에 따르면, imageServlet을 맵 : 둘째

/segnalazioni_degrado/imageUpload 

, 당신은 제거해야 URL의 물음표는 다음과 같이 변경하십시오.

localhost:8080/Segnalazioni_Degrado/imageUpload 

그리고 어떻게되는지보십시오.

+0

404 오류 메시지가 나타납니다. – Filippo

관련 문제