2016-01-07 2 views
-1

Я разработал Java-сервлет (tomcat 6.0), который обрабатывает загрузку файлов на сервер с клиента. До сих пор все мои javaapp могут делать прямо сейчас, загружая файл. Я закодировал другое приложение Java, которое сканирует файл (excel document, apachi POI) и анализирует определенную информацию, затем распечатывает информацию.Как обработать файл из процесса Java, загруженного с помощью сервлетов

Целью является в основном использование загруженного файла, а затем вызов java-программы для обработки файла. Затем выложите данные из консоли java (результаты) на страницу HTML.

Вот мой код для сервлета. Я выполнил this учебник, чтобы сделать это.

Servlet:

package net.codejava.upload; 

import java.io.File; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Iterator; 
import java.util.List; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 

/** 
* A Java servlet that handles file upload from client. 
* @author www.codejava.net 
*/ 
public class UploadServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    private static final String UPLOAD_DIRECTORY = "upload"; 
    private static final int THRESHOLD_SIZE  = 1024 * 1024 * 3; // 3MB 
    private static final int MAX_FILE_SIZE  = 1024 * 1024 * 40; // 40MB 
    private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB 

    /** 
    * handles file upload via HTTP POST method 
    */ 
    protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     // checks if the request actually contains upload file 
     if (!ServletFileUpload.isMultipartContent(request)) { 
      PrintWriter writer = response.getWriter(); 
      writer.println("Request does not contain upload data"); 
      writer.flush(); 
      return; 
     } 

     // configures upload settings 
     DiskFileItemFactory factory = new DiskFileItemFactory(); 
     factory.setSizeThreshold(THRESHOLD_SIZE); 
     factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); 

     ServletFileUpload upload = new ServletFileUpload(factory); 
     upload.setFileSizeMax(MAX_FILE_SIZE); 
     upload.setSizeMax(MAX_REQUEST_SIZE); 

     // constructs the directory path to store upload file 
     String uploadPath = getServletContext().getRealPath("") 
      + File.separator + UPLOAD_DIRECTORY; 
     // creates the directory if it does not exist 
     File uploadDir = new File(uploadPath); 
     if (!uploadDir.exists()) { 
      uploadDir.mkdir(); 
     } 

     try { 
      // parses the request's content to extract file data 
      List formItems = upload.parseRequest(request); 
      Iterator iter = formItems.iterator(); 

      // iterates over form's fields 
      while (iter.hasNext()) { 
       FileItem item = (FileItem) iter.next(); 
       // processes only fields that are not form fields 
       if (!item.isFormField()) { 
        String fileName = new File(item.getName()).getName(); 
        String filePath = uploadPath + File.separator + fileName; 
        File storeFile = new File(filePath); 

        // saves the file on disk 
        item.write(storeFile); 
       } 
      } 
      request.setAttribute("message", "Upload has been done successfully!"); 
     } catch (Exception ex) { 
      request.setAttribute("message", "There was an error: " + ex.getMessage()); 
     } 
     getServletContext().getRequestDispatcher("/message.jsp").forward(request, response); 
    } 
} 

Web XML файл:

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

    <servlet> 
    <description></description> 
    <display-name>UploadServlet</display-name> 
    <servlet-name>UploadServlet</servlet-name> 
    <servlet-class>net.codejava.upload.UploadServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>UploadServlet</servlet-name> 
    <url-pattern>/UploadServlet</url-pattern> 
    </servlet-mapping> 
</web-app> 

Моя загрузка JSP-страница:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>File Upload</title> 
</head> 
<body> 
    <center> 
     <form method="post" action="UploadServlet" enctype="multipart/form-data"> 
      Select file to upload: <input type="file" name="uploadFile" /> 
      <br/><br/> 
      <input type="submit" value="Upload" /> 
     </form> 
    </center> 
</body> 
</html> 

Мое сообщение JSP-страница:

<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Upload</title> 
</head> 
<body> 
    <center> 
     <h2>${requestScope.message}</h2> 
    </center> 
</body> 
</html> 

Может кто-нибудь, пожалуйста, проведет меня по поводу того, что делать сейчас, о том, как вызвать отдельную программу java, которую я сделал (код не размещен здесь) для обработки файла, а затем заставить его выплевывать данные из консоли java (результаты) на страницу «message» HTML jsp? Я везде искал и не могу понять, как решить эту проблему. Это сводит меня с ума.

+0

Что вы имеете для общения с этой другой программой Java? Что оно делает? Можете ли вы запустить его из командной строки для обработки этого файла? –

+0

Так что в основном другая программа, которую я написал, действительно является только одним классом кода. Он может читать документ Excel и анализировать информацию из него и распечатывать его. Эта программа, которую я разместил здесь, представляет собой в основном веб-приложение. То, что я пытаюсь сделать, - это загрузить документ онлайн, запустить его в моей программе Java, которая анализирует информацию, а затем распечатать результаты на странице html, которую я создал. Я действительно не понимаю, как взять загруженный документ с сервера, а затем отправить его в мою программу java для ее запуска. Кроме того, я очень люблю в java. Я все еще очень новичок в этом языке. – ihoaxed

+0

вместо хранения файла во временном месте, сохраните его в определенном месте и затем получите файл из этого физического местоположения для обработки. –

ответ

0

Сначала вам нужно создать один метод, который возвращает String и принимает значение String в качестве аргумента.

public String getContent(String filePath) { 
    // logic goes here 
} 

Вы уже создали один класс для этого внутри, вам нужно создать этот метод. Тогда вам необходимо изменить некоторые части сервлета:

Объявите переменную String fileName = ""; в doPost методы и изменить

if (!item.isFormField()) { 
    String fileName = new File(item.getName()).getName(); 

в

if (!item.isFormField()) { 
    fileName = new File(item.getName()).getName(); // remove String 

Позвоните свой класс после того, как во время цикла (Пусть говорят FilterData является название вашего класса)

while (iter.hasNext()) { 
    // Code 
} 
FilterData fd = new FilterData(); 
String data = fd.getData(uploadPath + "//" + fileName); 
request.setAttribute("message", data);   

И удалить

request.setAttribute("message", "Upload has been done successfully!"); 

Надеюсь, что это поможет !!!

0

Если вы написали другой код Java, просто включите класс в свой проект: создайте экземпляр класса и передайте ему файл. Здесь в сервлет, где записать файл на диск

// saves the file on disk 
    item.write(storeFile); 

Вы можете создать экземпляр класса и передать ему объект файла или путь к файлу.

+0

Я ценю ответ, но я все еще теряюсь, как действительно начать это. Как я уже говорил выше, как это будет работать, как только пользователь отправит документ и загрузит его? Я действительно просто не знаю, как начать эту часть кода. – ihoaxed

Смежные вопросы