В чем разница между encodeURL и encodeRedirectURL? - PullRequest
4 голосов
/ 09 февраля 2011

Я видел существующий вопрос: Разница между encodeURL и encodeRedirectURL. Но это не отвечает на вопрос на самом деле. В моем тестировании эти два метода выглядят так же. Что бы я ни использовал для print или sendRedirect, они оба работают нормально.

Так есть ли разница? Я хочу увидеть исходный код, так что, возможно, я смогу найти разницу, но HttpServletResponse - это интерфейс без реализации. Где находится код реализации?

Ответы [ 3 ]

5 голосов
/ 09 февраля 2011

, но HttpServletResponse - это интерфейс без реализации. Где находится код реализации?

Сам сервлет-контейнер является конкретной реализацией Servlet API. В случае, например, Apache Tomcat, конкретная реализация - org.apache.catalina.connector.Response Вот выдержки актуальности:

 1128       /**
 1129        * Encode the session identifier associated with this response
 1130        * into the specified redirect URL, if necessary.
 1131        *
 1132        * @param url URL to be encoded
 1133        */
 1134       public String encodeRedirectURL(String url) {
 1135   
 1136           if (isEncodeable(toAbsolute(url))) {
 1137               return (toEncoded(url, request.getSessionInternal().getIdInternal()));
 1138           } else {
 1139               return (url);
 1140           }
 1141   
 1142       }
 1159       /**
 1160        * Encode the session identifier associated with this response
 1161        * into the specified URL, if necessary.
 1162        *
 1163        * @param url URL to be encoded
 1164        */
 1165       public String encodeURL(String url) {
 1166           
 1167           String absolute = toAbsolute(url);
 1168           if (isEncodeable(absolute)) {
 1169               // W3c spec clearly said 
 1170               if (url.equalsIgnoreCase("")){
 1171                   url = absolute;
 1172               }
 1173               return (toEncoded(url, request.getSessionInternal().getIdInternal()));
 1174           } else {
 1175               return (url);
 1176           }
 1177   
 1178       }

Разница очень тонкая. encodeURL() использует полный абсолютный URL-адрес, если данный (относительный) URL-адрес пуст.

0 голосов
/ 26 сентября 2013

Я искал и искал ответ, я знал, что найду его либо в stackoverflow, либо в coderanch, и там я нашел ответ от Чарльза Лайонса, автора книги в моей руке, прямо сейчас это было весело стечение обстоятельств.

опубликовано 9.08.2008 11:41 Точно - разница в том, что encodeURL всегда записывает ID сеанса в URL (если требуется, например, потому что куки отключено), в то время как encodeRedirectURL содержит дополнительную логику для определить, желательно ли записать идентификатор сеанса в. Это действительно плохая идея дать иностранным веб-сайтам идентификатор сессии, например, с тех пор они могут выдавать себя за сеанс вашего пользователя. следовательно encodeRedirectURL поместит jsessionid в URL, только если этот URL лежит в текущем веб-приложении и не выполняет переписывания в противном случае.

Чарльз Лайонс (SCJP 1.4, апрель 2003 года; SCJP 5, декабрь 2006 года; SCWCD 1.4b, апрель 2004 года) Автор учебного пособия OCEJWCD для экзамена Oracle 1Z0-899 (ISBN 0955160340)

также я нашел этот ответ тоже, который был опубликован ранее,

опубликовано 19.04.2006 8:02 Цитировать Сообщить модератору Привет,

encodeURL используется для кодирования URL для отслеживания сеанса в вперед и включи механизм. EncodeRedirectURL кодирует указанный URL для использования в методе sendRedirect.

Основное различие между двумя заключается в реализации Метод encodeRedirectURL включает логику, чтобы определить, является ли ID сеанса должен быть закодирован в URL в случае, когда вы перенаправление URL в другой контекст, где информация о сеансе не требуется или недействителен. Метод encodeURL не добавляет seesion ID, если куки включены. В дополнение к этому encodeRedirectURL не добавляет информацию о сеансе, если URL-адрес перенаправлен в другой контекст (веб-приложение). Поскольку правила для этого определения могут отличаться от тех, которые используются для решить, следует ли кодировать нормальную ссылку, этот метод является отдельным от метод encodeURL.

Надеюсь, это поможет вам.

Спасибо

Нарендра Дханде

0 голосов
/ 09 февраля 2011

Эти два метода могут давать разные результаты, только если ваш контейнер приложения использует параметры URL для передачи идентификатора сеанса.Поскольку в наши дни почти все используют файлы cookie для этого, маловероятно, что вы увидите разницу в обычном тестировании.

Чтобы принудительно идентифицировать идентификаторы сеансов в URL-адресах, либо отключите сохранение файлов cookie сеансов в своем браузере (и надеемся,сервер приложений обнаруживает этот факт) или явно включает идентификаторы сеансов в URL-адресах на сервере приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...