Сокращение URL-адреса: перенаправление на цель «file://» (цель файлового протокола)

Я пробую простую реализацию сокращения URL-адресов, такого как tinyurl.com или bit.ly. В настоящее время я делаю response.sendRedirect(targetURL) в своем сервлете, который отлично работает для целевых URL-адресов http/ftp.

Однако у меня возникают проблемы с перенаправлением на такие цели, как file:///c:/temp (где c:\temp, конечно, находится в локальной/клиентской системе).

Ввод file:///c:/temp в адресной строке Firefox работает, но перенаправление с сервера, кажется, ничего не делает.

Это невозможно по какой-то причине безопасности? Или я что-то не так здесь делаю?

Заранее спасибо!


person ragebiswas    schedule 17.12.2009    source источник
comment
P.S. Радж, хорошо принять мой второй ответ, так как он лучше объясняет. Причина, по которой я спрашиваю об этом, заключается в том, что ответ, который вы принимаете, раньше прикреплялся вверху, чтобы помочь другим читателям. Таким образом, в этом случае это не даст ничего полезного. Этот ответ для своего рода развлечения. Спасибо.   -  person Adeel Ansari    schedule 17.12.2009


Ответы (2)


Не хочу портить красоту моего первого ответа, объясняя суть. Поэтому я решил, что объяснение должно быть здесь.

Ну как вы думаете получить доступ к локальному диску вашего клиента, во-первых. Это действительно проблема безопасности. У вас нет доступа к файловой системе вашего клиента, просто так.

Кажется, что у вас нет никаких требований для этого. Если вам нужно, по какой-то запутанной причине, то вы можете подумать о подписанном апплете или что-то в этом роде, я думаю.

Что касается вашего замешательства, это работает на вашем Firefox. Это потому, что у вас есть доступ к вашей собственной машине, и URL-адрес отлично подходит для понимания firefox. Однако внутри сервлета вы не можете просто сделать это. Прочитайте документы для sendRedirect(), там написано

Если местоположение является относительным без ведущего «/», контейнер интерпретирует его как относительно текущего URI запроса. Если местоположение указано относительно с начальным знаком «/», контейнер интерпретирует его как относительно корня контейнера сервлета.

person Adeel Ansari    schedule 17.12.2009
comment
Спасибо - это имеет смысл. Однако в IE перенаправление работает для «некоторых» целей. Перенаправление на локальный диск «C:\foo.doc», похоже, не работает, но «D:\foo.doc» работает, где «D» — сетевой диск. - person ragebiswas; 17.12.2009
comment
Где D сетевой диск и он смонтирован. Действительно, что бы работало, почему бы и нет. Не уверен насчет проблемы с доступом к вашему C диску через IE. Какое сообщение вы получаете, кстати? - person Adeel Ansari; 17.12.2009
comment
Вы уверены, что у вас есть файл foo.doc на вашем диске C? Если да, то должно быть что-то о основном разделе Windows или разделе NTFS или что-то в этом роде. Не уверен, ничего точно сказать не могу. Никогда не сталкивался с этим, так как у меня нет Windows. ;) - person Adeel Ansari; 17.12.2009

Это невозможно по какой-то причине безопасности? Или я что-то не так здесь делаю?

Да.

person Adeel Ansari    schedule 17.12.2009