2008-09-15 7 views
9

У меня есть сервлет, который используется для множества различных действий, используемых в Front Controller pattern. Кто-нибудь знает, можно ли сказать, являются ли данные, отправленные обратно к нему, enctype = "multipart/form-data"? Я не могу прочитать параметры запроса, пока не решит это, поэтому я не могу отправить запрос правильному контроллеру.Может ли сервлет определить, являются ли данные, отправленные на него, enctype = "multipart/form-data"?

Любые идеи?

ответ

15

Да, Content-type заголовок в запросе пользовательского агента должен включать multipart/form-data, как описано в (по крайней мере) спецификации HTML4:

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

+0

Это то, что я искал; Благодаря! – pkaeding 2008-09-15 20:23:08

8

Вы можете вызвать метод для получения типа содержимого.

http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html#getContentType()

В соответствии с http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2, тип контента будет "многочастному/форм-данных".

Не забывайте, что:

  1. request.getContentType() может возвращать нуль.

  2. request.getContentType() может быть не равным «multipart/form-data», но может только начаться с него.

Таким образом, с учетом всего этого:

if (request.getContentType() != null && 
    request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1) 
{ 
    << code block >> 
} 
+1

Кайл, ты изменил свой ответ, чтобы быть моим ответом после того, как я отправил * правильный * ответ. Возможно, по крайней мере, ссылаясь на этот факт, может быть круто ... – 2014-04-13 04:30:58

1

Вы должны прочитать параметры запроса, чтобы определить это, по крайней мере, на некоторых уровня. Класс ServletRequest имеет метод getContentType, который вы хотите посмотреть.

15

Если вы собираетесь попробовать использовать метод request.getContentType(), представленный выше, следует знать, что:

  1. request.getContentType() может возвращать нуль.
  2. request.getContentType() может не быть равным «multipart/form-data», но может только начаться с него.

Имея это в виду, чек вы должны запустить это:

if (request.getContentType() != null && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1) { 
// Multipart logic here 
}