Тип объекта, возвращаемого входом с веб-страницы - PullRequest
1 голос
/ 11 июня 2010

Я пытаюсь загрузить файл в jsp, а затем использовать файл в другом коде. Моя проблема в том, что он входит в сервлет как объект через вызов request.getAttribute (), поэтому я не знаю, к чему его привести.

У меня есть этот код, чтобы попробовать и проверить, что это такое, но я получаю исключение NullPointerException.

test.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>Input Test</title>
    </head>
    <body>
        <form action="InputServlet" method="POST">
        <input type="file" name="file1">
        <input type="submit" value="submit">
        </form>
    </body>
</html>

inputservlet.java

public class InputServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)       throws ServletException, IOException {

        PrintWriter out = response.getWriter();
        out.println(request.getAttribute("file1").getClass());
    }

}

Мое понимание того, что происходит, ошибочно, или я просто неправильно его кодирую?

Также я ожидаю, что типом будет Object, поэтому, если кто-то знает, что я должен его разыграть, это тоже будет очень полезно.

1 Ответ

1 голос
/ 11 июня 2010

Вероятно, это ноль, потому что это касается совершенно нового и другого request. Вы, вероятно, отправили перенаправление на сервлет вместо форварда?

В любом случае, вы не должны обрабатывать загрузку файла в файле JSP, а в реальном классе сервлетов. В противном случае это рецепт для неприятностей, так как это технология просмотра.

Смотри также:


Обновление : согласно вашему обновлению кода это не будет работать. Вам нужно установить enctype формы multipart/form-data и использовать Commons FileUpload для обработки его в сервлете. Также смотрите приведенные ссылки.

Кстати, кодировка multipart/form-data не поддерживается API сервлетов до версии 3.0, а входные значения недоступны request.getParameter() и поддерживает. Использование request.getAttribute() здесь является заблуждением. Там это не для. Вам необходимо проанализировать request.getInputStream() самостоятельно согласно RFC2388 . Однако вы хотели бы использовать Apache Commons FileUpload для этого, а не изобретать и поддерживать колесо годами. Apache Commons уже сделал это для вас, воспользуйтесь этим.

Если вы уже используете Servlet 3.0 (Glassfish v3), вы можете использовать встроенный request.getParts() для сбора предметов. Большинство контейнеров сервлетов будут использовать Commons FileUpload под капотами, вы не увидите его в /WEB-INF/lib или в импорте, если это по каким-то причинам вас беспокоит.

Смотри также:

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