Странная проблема при загрузке файла из JSP в сервлет - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь загрузить файл .csv из JSP в сервлет. Он отлично работает на моей локальной машине (Java 1.8 на Websphere 8.5.5.11), но когда я перемещаю его в тестовые среды (Java 1.6 на WebSphere 8.5.5.12), я получаю сообщение об ошибке:

java.lang.UnsupportedOperationException: SRVE8020E: Сервлет не принимает многокомпонентные запросы

Что кажется странным, потому что isMultipart возвращается как истина.

Вот моя форма JSP:

<form method="POST" name="batchForm" action="BatchTierProcessing" enctype="multipart/form-data">
    <input type="hidden" name="pageName" value="batchTierProcess"/>
    <text>Upload File for Batch Processing:</text>
    <input type="file" name="file" id="file"/>
    <input type="submit" value="Upload" name="upload" id="upload"/>
</form>

Вот мой сервлет:

 @WebServlet(name = "UWTSAS", urlPatterns = {"/UWTSAS"}, loadOnStartup = 1)
@MultipartConfig
public class PMSTandalone extends AWRServlet {

    @Override
    protected void doPost(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletException, IOException {
        boolean isMultipart = ServletFileUpload.isMultipartContent(aRequest);
        FileItem csv = null;
        String pageNameMultiPart = "";
        Exception fakeException = new Exception();
        PageNameEnum pageName = null;
        Part filePart = null;
        //if a multipart request (batch process) grab file before request is touched by anything else
        if(isMultipart) {
            LogMessageUtility.log("INFO", "Is multipart request", fakeException);
            filePart = aRequest.getPart("file");        
            pageName = PageNameEnum.getValue("pmSABTS");
            LogMessageUtility.log("INFO", "Page Name Multipart", fakeException);
        }
        else {          
            pageName = PageNameEnum.getValue(aRequest.getParameter("pageName"));
        }
        HttpSession aSession = aRequest.getSession(false);
        if(aSession == null) {
            aSession = aRequest.getSession(true);
        }
        buildUserSession(aRequest, aSession);

        boolean batchSuccessful = true;
        String destination = "PMStandBatchRes";
        LogMessageUtility.log("INFO", "Batch Processing Started", fakeException);
                    try {
                        batchSuccessful = getFinalScoresBatch(aRequest, aResponse, aSession, filePart);
                    }
                    catch(Exception e) {
                        LogMessageUtility.log("ERROR", e.getMessage(), e);
                    }
            }

        if(!destination.equals("") && batchSuccessful) {
            dispatchToResource(aRequest, aResponse, WebRatingProperty.getSetting(destination));
        }
    }

Я попытался настроить Eclipse для компиляции этого проекта с использованием Java 6, но безуспешно. Насколько я знаю, я не могу настроить локальный экземпляр WebSphere для работы с 1.6. Я попытался использовать Apache Commons FileUpload и Commons IO вместо того, чтобы делать это с помощью Java, но безуспешно, и начинаю задумываться над тем, как выяснить, как анализировать запрос вручную.

У кого-нибудь есть идеи о том, что происходит, или идеи о том, что я должен попробовать? Я уже просмотрел эти вопросы и ответы:

Как загрузить файлы на сервер, используя JSP / Servlet?

Удобный способ анализа входящих параметров multipart / form-data в сервлете

Как я могу прочитать другие параметры в многочастной форме с Apache Commons

Как загрузить файлы на сервер, используя JSP / Servlet?

Заранее спасибо за любую помощь или идеи.

1 Ответ

0 голосов
/ 10 сентября 2018

Я понял это. Пришлось удалить аннотацию @MultipartConfig, реализовать интерфейс javax.servlet.Servlet и использовать библиотеку Apache Commons FileUpload.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...