Я не могу воспроизвести вашу проблему на Tomcat 6.0.29.Там больше в вопросе.Может быть, фильтр в цепочке, который что-то делает с объектом запроса?
Во всяком случае, вот SSCCE во вкусе одиночной JSP:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
</head>
<body>
<p><a href="?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2">click here</a>
<p>URL: ${param.url}
</body>
</html>
Скопируйте и запустите его и нажмите на ссылку.Прямо здесь я вижу следующий результат:
нажмите здесь
URL: http://www.site.com? Param1 = 1¶m2 = 2
То же самое можно воспроизвести с помощью простого сервлета, подобного этому, который вызывается непосредственно из адресной строки браузера:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().write(request.getParameter("url"));
}
Кстати, Tomcat настроен с URIEncoding="UTF-8"
в соединителе HTTP, но даже с ISO-8859-1
(который используется по умолчанию), поведение - как и ожидается в данном конкретном случае - то же самое.