Filters?

Olá, estou desenvolvendo uma pequena webapp e tenho um serlvet que trata todas as requisições num uso mea boca do mvc. Bom, agora tenho que fazer um esquema de upload de um arquivo. Decidi usar essa lib. Acontece que, para recuperar os dados do form onde o arquivo é escolhido para o upload, tenho que usar a classe MultipartRequest que, quando instanciada, faz de cara o upload e renomeia conforme eu determinar num FileRenamePolicy (interface tambem do pacote).

O problema: como uso apenas um servlet como controlador, nem sempre terei que usar o MultipartRequest. No caso de um login por exemplo, recuperarei tudo normalmente. Daí, dei umas fuçadas e ao que parece, usar um filtro seria o recomendado, eu criaria um filtro qualquer que decidiria para onde ir de acordo com o content-type do request. O ruim disso: adeus serlvet controller.

Enfim, o que vcs recomendam? Usar outra lib para o upload? Criar um filtro mesmo? Só não vale dizer para ir estudar algum framework que implemente mvc… :lol: agora não dá mesmo… :cry:

Até.

Esquece essa classe da cos… nunca vi um negocio funcionar tao mal ou tao limitadamente. Use o pacote da Jakarta,

http://jakarta.apache.org/commons/fileupload/index.html

que eh muito melhor e tem mais recursos.

Em relacao ao teu problema, voce pode criar uma classe auxiliar, tipo, MeuHttpServletRequest, que verifica se eh multipart ou nao, e usar ele no controller… ( claro que somente assim ele fica meio inutil dependendo da forma como vc fazer, mas da para bolar umas coisas interessantes, como trocar valores do request ou adicionar, por exemplo ).

Nao entendi pq vc disse que perde o controlador… vc pode diretamente verifica se eh multipart, ou sempre usar a classe que tambem processa os file uploads… claro que tem um pequeno overhead a mais, mas eh uma solucao rapida.

Rafael

[quote=“Rafael Steil”]Esquece essa classe da cos… nunca vi um negocio funcionar tao mal ou tao limitadamente. Use o pacote da Jakarta,

http://jakarta.apache.org/commons/fileupload/index.html

que eh muito melhor e tem mais recursos.
[/quote]
Valeu Rafael, vou dar uma olhada. O cos tá meio chato mesmo e estava usando porque ele tava me permitindo fazer o que eu queria, o upload.

Por essa logica, a classe MeuHttpServletRequest não vai funcionar como um filtro em si? Ou vc está falando apenas em fazer algo como:

MeuHttpServletRequest decide = MeuHttpServletRequest(request); if(decide.decidiu()) { //action1; } else { //action2; }

[quote=“Rafael Steil”]
Nao entendi pq vc disse que perde o controlador… vc pode diretamente verifica se eh multipart, ou sempre usar a classe que tambem processa os file uploads… claro que tem um pequeno overhead a mais, mas eh uma solucao rapida.

Rafael[/quote]
Eu achava que fazer um filtro iria complicar porque, pelo que estava imaginando, eu criaria um servlet para tratar outras requisições e um apenas para fazer o upload.

Até.

A maneira mais simples seria de fato fazer

MeuHttpServletRequest req = MeuHttpServletRequest(request);

e usar esse objeto “req” no sistema… Assim voce tem acesso aos arquivos de upload e aos dados da requisicao normal…
Voce pode ainda colocar uns metodo adicionais, como “getUploadedFile”, por exemplo, para simplificar a tua vida ( ja que, geralmente, voce tem que fazer uns casts ou verificar o tipo de conteudo que esta vindo na variavel atual do request )…

Se estiver meio confuso, de uma olhada em

http://cvs.sourceforge.net/viewcvs.py/jforum/JForum/src/net/jforum/ActionServletRequest.java?rev=1.9&view=auto

Veja que la tem um if() para ver se eh multipart, e entao eu faco um tratamento especial… ha ainda um outro metodo, no final da classe, para me ajudar a pegar conteudo nao-string.

Como exemplo de uso, veja

http://cvs.sourceforge.net/viewcvs.py/jforum/JForum/src/net/jforum/view/forum/UserVH.java?rev=1.7&view=auto

no metodo “editSave”… Se a comparacao

if (this.request.getObjectParameter("avatar") != null)

retornar true, entao eu sei que o cara mandou alguma imagem.

Claro que o codigo esta meio baguncado ainda, mas pode ajudar como exemplo ( ou compliar ainda mais… hehe )

Rafael

Rafael, obrigado mesmo pela ajuda. O codigo foi bastante util em especial a linha:

isMultipart = FileUpload.isMultipartContent(superRequest);

:smiley:

Só mais uma pergunta: JForum?! Onde posso ver mais sobre?! Tentei a url (http://www.jforum.net) que havia no codigo mas não funcionou.

Até.