2013-11-21 45 views
0

我在使用我寫的servlet時遇到了上述錯誤。戰爭文件設置在安裝在cPanel上的Tomcat ver 7.0.39上。在本地機器上編譯和測試的servlet沒有問題。我瞭解到有一個問題與cPanel/PHP配置有關。我試圖玩cPanel的配置,但沒有運氣 我覺得它與Java代碼無關,但我會把fileUploadServlet無論如何獲取HTTP狀態404 - 502.shtml請求的資源不可用。上傳文件

編輯:我能夠上傳一個非常小的文件,所以它與文件大小有關\長處理時間

package servlet; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.sql.SQLException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.List; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.MultipartConfig; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
import javax.servlet.http.Part; 

import convertor.TextAnalayzer; 

import exception.ZoharException; 

import beans.ParashaBean; 
import beans.UserBean; 

import jdbcHandler.JDBCZhoarHandler; 

import util.ParashaName; 
import util.XmlUrelParaser; 

@WebServlet(urlPatterns = { "/upload" }, loadOnStartup = 1) 
@MultipartConfig 
public class FileUploadServlet extends HttpServlet { 

    private static final long serialVersionUID = 8626646959046203428L; 
    private JDBCZhoarHandler appHandler = new JDBCZhoarHandler(); 
    public static final String ERROR_PARAMETER = "error"; 
    public static final String COMMAND_PARAMETER = "command"; 
    public static final String USER_ATTRIBUTE = "user"; 
    public static final String HANDLER_ATTRIBUTE = "handler"; 

    @Override 
    public void init() throws ServletException { 
     super.init(); 
     try { 
      getServletConfig().getServletContext().setAttribute("list", 
        appHandler.viewParashot()); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void service(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     String command = request.getParameter(COMMAND_PARAMETER); 
     String nextPage = "/login.jsp"; 
     if ("convert".equals(command)) { 
      nextPage = this.upload(request, response); 
     } else if ("login".equals(command)) { 
      nextPage = this.login(request, response); 
     } else { 
     }// do nothing!! 

     this.getServletConfig().getServletContext() 
       .getRequestDispatcher(nextPage).forward(request, response); 
    } 

    private String login(HttpServletRequest request, 
      HttpServletResponse response) { 
     String name = request.getParameter("userName"); 
     String password = request.getParameter("password"); 
     JDBCZhoarHandler handler = new JDBCZhoarHandler(); 
     try { 
      UserBean user = handler.getUser(name, password); 
      HttpSession session = request.getSession(true); 
      session.setAttribute(HANDLER_ATTRIBUTE, handler); 
      session.setAttribute(USER_ATTRIBUTE, user.getId()); 
      return "/uploadFile.jsp"; 
     } catch (Exception e) { 
      request.setAttribute(ERROR_PARAMETER, e.getMessage()); 
      return "/login.jsp"; 
     } 

    } 

    private String upload(HttpServletRequest request, 
      HttpServletResponse response) { 

     // view artifacts 
     HttpSession session = request.getSession(false); 
     ParashaName parashaName = new ParashaName(); 
     JDBCZhoarHandler handler = (JDBCZhoarHandler) session 
       .getAttribute(HANDLER_ATTRIBUTE); 
     List<ParashaBean> list = null; 
     try { 
      list = handler.viewParashot(); 
     } catch (SQLException e1) { 
      request.setAttribute(ERROR_PARAMETER, e1.getMessage()); 
     } 
     session.setAttribute("list", list); 

     // Processing file 
     if ("convert".equals(request.getParameter("command"))) { 

      OutputStream out = null; 
      InputStream filecontent = null; 

      try { 
       // Create path components to save the file 
       XmlUrelParaser xml = new XmlUrelParaser(); 
       SimpleDateFormat format = new SimpleDateFormat(
         "dd-MM-yy_HH-mm-ss"); 
       final Part filePart = request.getPart("file"); 
       if (filePart.getSize() == 0) { 
        throw new ZoharException("you must upload a file first"); 
       } 
       final String fileName = xml.getUR("incomingFilesDir") 
         + session.getAttribute(USER_ATTRIBUTE) 
         + parashaName.convert(Integer.parseInt(request 
           .getParameter("parasha"))) 
         + format.format(new Date()) + ".docx"; 

       out = new FileOutputStream(new File(fileName)); 
       filecontent = filePart.getInputStream(); 

       int read = 0; 
       final byte[] bytes = new byte[1024]; 

       while ((read = filecontent.read(bytes)) != -1) { 
        out.write(bytes, 0, read); 
       } 
       TextAnalayzer ta = new TextAnalayzer(); 
       Integer ID = (Integer)session.getAttribute("user"); 
       ta.analayze(fileName, 
         Integer.parseInt(request.getParameter("parasha")), 
         Boolean.parseBoolean(request.getParameter("orginal")), 
         ID); 
       request.setAttribute(ERROR_PARAMETER, "Upload complete"); 
       return "/uploadFile.jsp"; 
      } catch (Exception e) { 
       request.setAttribute(ERROR_PARAMETER, e.getMessage()); 
      } finally { 
       try { 
        if (out != null) { 
         out.close(); 
        } 
        if (filecontent != null) { 
         filecontent.close(); 
        } 
       } catch (IOException e) { 
        request.setAttribute(ERROR_PARAMETER, e.getMessage()); 
       } 
      } 
     } 
     return "/login.jsp"; 
    } 
} 

回答

0

這是一個內存不足的問題。更好的內存管理代碼解決了這個問題。

相關問題