2008-09-15 13 views
9

J'ai une servlet qui est utilisée pour de nombreuses actions différentes, utilisée dans le Front Controller pattern. Est-ce que quelqu'un sait s'il est possible de dire si les données qui y sont postées sont enctype = "multipart/form-data"? Je ne peux pas lire les paramètres de la requête tant que je n'en ai pas décidé ainsi, je ne peux pas envoyer la demande au contrôleur approprié.Une servlet peut-elle déterminer si les données qui lui sont envoyées sont enctype = "multipart/form-data"?

Des idées?

Répondre

8

Vous pouvez appeler une méthode pour obtenir le type de contenu.

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

Selon http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2, le type de contenu sera "multipart/form-data".

Ne pas oublier que:

  1. request.getContentType() peut retourner null. Request.getContentType() peut ne pas être égal à "multipart/form-data", mais peut simplement commencer par.

Donc, avec tout cela à l'esprit:

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

Kyle, vous avez changé votre réponse pour être ma réponse après avoir soumis la réponse * correcte *. Peut-être que le fait de référencer ce fait pourrait être cool ... –

1

Vous devez lire les paramètres de la requête afin de déterminer, au moins sur un certain niveau . La classe ServletRequest possède une méthode getContentType que vous voudrez regarder.

15

Si vous allez essayer d'utiliser la méthode request.getContentType() présenté ci-dessus, sachez que:

  1. request.getContentType() peut retourner null. Request.getContentType() peut ne pas être égal à pour "multipart/form-data", mais peut simplement commencer par.

Dans cet esprit, le chèque que vous devez exécuter est:

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