Код, который вы указали, не добавляет пробел, который возвращает код, указанный выше "http://host/downloads?tags=sequence%20diagram"
Ваш целевой сервлет выполняет подстановку. Независимо от того, на что отображается "/ downloads", выполняется синтаксический анализ параметра тегов и выполнение декодирования URL. Вы можете восстановить возможные кодировки следующим образом. Вам нужно будет обработать исключение UnsupportedEncodingException в следующем.
String encoded = URLEncoder.encode( request.getParameter( name ), "UTF8" );
К сожалению, это только возможная кодировка и по умолчанию преобразует пробелы в "+". Чтобы вернуть «% 20», вам нужно прибегнуть к
encoding = encoding.replaceAll( "+", "%20" );
Это может сработать для вас или нет. В целом, более целесообразно нормализовать декодированное значение вместо кодированного, поскольку существует много возможных кодировок на декодированное значение.