Java Servlet getParameter para um parâmetro que é uma URL

Estou construindo um site que envia um URL para um servlet para fins de análise. No lado do cliente, envio o URL como um parâmetro codificado. Por exemplo...

Submit: http://www.site.com
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com

No lado do servidor, meu servlet solicita o parâmetro da seguinte maneira ...

String url = request.getParameter("url");

O que eu recebo é uma string decodificada:http://www.site.com. Até aí tudo bem - isso funciona como esperado ... na maioria das vezes.

O problema ocorre quando um parâmetro de URL contém parâmetros próprios ...

Submit: http://www.site.com?param1=1&param2=2
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2

Está tudo bem no site do cliente, mas no meu servlet, quando obtenho o parâmetro, recebo apenas parte do parâmetro url!

http://www.site.com?param1=1

Ele soltou o segundo parâmetro do meu parâmetro de URL de entrada! Definitivamente, estou codificando o parâmetro url antes de enviá-lo ao servidor ... o que está acontecendo?