PDA

View Full Version : [JAVA] multipart form doorsturen


ecko
05-10-2007, 11:38
Ik moet hier een class aanpassen zodat deze een multipart/form-data POST request kan verwerken en (belangrijker) kan doorsturen na een aantal parameters aangepast te hebben. (inclusief de file)
Ik krijg alles mooi binnen, maak gebruik van com.oreilly.servlet.MultipartRequest en ClientHttpRequest (http://www.devx.com/Java/Article/17679/0/page/3).
Punt is: de post wordt niet doorgegeven naar de andere pagina. :(

Iemand tips hoe je zo'n probleem normaalgezien zou oplossen? Let wel: ik kan in principe enkel die class wat aanpassen en het is geen servlet. (don't ask)

Bavo
05-10-2007, 11:40
Waar kan ik mijn magische debugger attachen?

Het is onduidelijk wat je exact wilt doen. Als je alles goed binnenkrijgt is het eitje reeds gebakken, toch? Of ga je alles binnenhalen, verwerken, en dan terug client spele en dat doorsturen als een HTTP post naar een andere pagina (wegens legacy redenen dan). Daarvoor gebruik je die client? Ik voorzie daar wel wat problemen mee, ja, zeker als je wilt dat die andere pagina het antwoord naar de echte client levert ook.

ecko
05-10-2007, 12:13
Het stuk wat ik schrijf is inderdaad je tweede interpretatie. Dit stuk krijgt alles binnen vanuit de client via POST, verwerkt wat en past wat parameters aan en speelt dan inderdaad client om een nieuwe POST te doen naar een andere URL. Deze andere url geeft dan een response die ook weer moet teruggegeven worden naar de client.

Bavo
05-10-2007, 12:27
Ik zie een mogelijkheid voor een filter, schrijf een stuk code die je in een ServletFilter plaatst en haak het tussen het normale proces voor die servlet. Dat is de beste hack.

Anders kan je werken met ene proxymechanisme: ontvang de request met de POSTS erbij, en forward die naar een andere servlet, vang de response op en zend terug.

Dat eerste is een simpele oefening p filters, het tweede wordt bij ons gedaan metde hulp van onder andere HttpClient. Dat zijn enkele 100den lijnen code dus ik raad toch die filter eens aan.

ecko
08-10-2007, 13:22
Blijkbaar werd de post dus wel mooi doorgegeven. :) Enige probleem blijven nu de SESSIONID's herschrijven. Uiteindelijk zal ik het wel vinden.

Bavo
08-10-2007, 13:25
Toch hoort daar een filter. Je filtert een request en wijzigt die, niet meer, niet minder. Intern de bestemming veranderen is nogal drastisch in dit geval, het is gewoon niet zinvol.

ecko
08-10-2007, 13:27
Jammer genoeg is dit gewoon een aanpassing van een bestaande omgeving om ze ook met multipart/form-data overweg te laten kunnen en is de optie om de huidige omgeving te wijzigen denk ik niet aanwezig.

Bavo
08-10-2007, 13:34
Als ik het goed zie voeg jij toch een extra servlet toe, die de data verwerkt en dan dorstuurt naar een nieuwe servlet? Dat heeft imlpact op de pageflow. Dan is een filter ertussen zetten makkelijker. Tenzij dat mechanisme er al was, maar hoe vreemd is dat niet?

edit: ach ja, het zal wel een legacy-systeem zijn die het al zo deed.

ecko
08-10-2007, 13:51
Het is een klasse die al bestaat. (GEEN SERVLET!) -jaja ik weet het, don't ask-
Ik moet die klasse gewoon aanpassen zodat ze ook met multipart forms overweg kan.

Het leek eerst simpel, maar heb er toch al behoorlijk wat tijd in gestoken eer ik de huidige situatie wat begon te snappen en dat de multipart post werkte. Het had beter en sneller geweest door een servlet oplossing te maken, maar dat was geen optie.

Bavo
08-10-2007, 14:27
Waarom is het geen servlet? Is het dan een klasse die door een servlet wordt gebruikt, of een deel van een eigen HTTP server? Allez, puur uit nieuwsgierigheid.

ecko
08-10-2007, 14:43
Het is een gewone class die mooi vanuit een JSP wordt opgeroepen ('2000 style)

Bavo
08-10-2007, 14:59
Nja, dna kan je in principe je context wel meegeven (JSP is een servlet), en zo aan de session vars geraken

ecko
08-10-2007, 15:13
Die heb ik wel, volgens mij ligt het nu aan hun applicatie en niet aan de component die ik heb aangepast. Enfin, ze gaan het eens nakijken. :)