URL веб-сайтов без расширения файла?

Что такое NullPointerException?

Хорошим местом для начала является JavaDocs . Они охватывают это:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Выполнение длины null, как если бы это был массив.
  • Доступ или изменение слотов с нулевым значением, как если бы это был массив.
  • Бросать нуль, как если бы это было значение Throwable.

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

blockquote>

Также, если вы попытаетесь использовать нулевую ссылку с synchronized, который также выдаст это исключение, за JLS :

SynchronizedStatement:
    synchronized ( Expression ) Block
  • В противном случае, если значение выражения равно null, NullPointerException.
blockquote>

Как это исправить?

Итак, у вас есть NullPointerException. Как вы это исправите? Возьмем простой пример, который выдает NullPointerException:

public class Printer {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }
}

Идентифицирует нулевые значения

. Первый шаг - точно определить , значения которого вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:

Exception in thread "main" java.lang.NullPointerException
    at Printer.printString(Printer.java:13)
    at Printer.print(Printer.java:9)
    at Printer.main(Printer.java:19)

Здесь мы видим, что исключение выбрано в строке 13 (в методе printString). Посмотрите на строку и проверьте, какие значения равны нулю, добавив протоколирующие операторы или используя отладчик . Мы обнаруживаем, что s имеет значение null, а вызов метода length на него вызывает исключение. Мы видим, что программа перестает бросать исключение, когда s.length() удаляется из метода.

Трассировка, где эти значения взяты из

Затем проверьте, откуда это значение. Следуя вызовам метода, мы видим, что s передается с printString(name) в методе print(), а this.name - null.

Трассировка, где эти значения должны быть установлены

Где установлен this.name? В методе setName(String). С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок , что эти методы вызывают, а метод set не будет называться после методом печати. ​​

Этого достаточно, чтобы дать нам решение: добавить вызов printer.setName() перед вызовом printer.print().

Другие исправления

Переменная может иметь значение по умолчанию setName может помешать ему установить значение null):

private String name = "";

Либо метод print, либо printString может проверить значение null например:

printString((name == null) ? "" : name);

Или вы можете создать класс, чтобы name всегда имел ненулевое значение :

public class Printer {
    private final String name;

    public Printer(String name) {
        this.name = Objects.requireNonNull(name);
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer("123");
        printer.print();
    }
}

См. также:

Я все еще не могу найти проблему

Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).

14
задан Pindatjuh 4 July 2010 в 15:22
поделиться

9 ответов

Ваш браузер не заботится о расширении файла, только тип контента, о котором сообщает сервер. (Ну, если Вы не используете IE, потому что в Microsoft они думают, что знают больше о том, что Вы подаете, чем Вы делаете). Если Ваш сервер сообщает, что подаваемым содержанием является Тип контента: текст/HTML, затем Ваш браузер, как предполагается, рассматривает его как, он - HTML, каково имя файла.

24
ответ дан 1 December 2019 в 06:21
поделиться

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

А, которыми полное обсуждение темы может быть найдено в статье Tim Berners-Lee's, Охлаждаются, URIs не Изменяются , который спорит в пользу сокращения несоответствующего хлама в URIs как средство помощи избежать проблем, которые происходят, когда реализации действительно изменяются, и когда ресурсы действительно перемещаются в другой URL. Сама статья содержит хорошие общие рекомендации по тому, чтобы распланировать схему URI и определенно стоит чтения.

11
ответ дан 1 December 2019 в 06:21
поделиться

Более конкретно, чем большинство этих ответов:

веб-контент не использует расширение файла для определения, какой файл подается (если Вы не Internet Explorer). Вместо этого они используют Content-type HTTP-заголовок, который отправляется вниз провод, прежде чем содержание изображения, страницы HTML, загрузит, или что бы то ни было. Например:

Content-type: text/html

обозначает, что страница, которую Вы просматриваете, должна быть интерпретирована, поскольку HTML, и

Content-type: image/png

обозначает, что страница является изображением PNG.

веб-серверы часто используют расширение файла, если файл подается непосредственно от диска до , определяют , что Content-type для присвоения но веб-приложения могут также генерировать страницы с любым Content-type, они любят в ответ на запрос. Неважно, структура или расширение имени файла, пока фактическое содержание страницы соответствует заявленному Content-type, рендеринг данных, как предназначено.

6
ответ дан 1 December 2019 в 06:21
поделиться

Для веб-сайтов, которые используют Apache, они, вероятно, используют mod_rewrite, который позволяет им переписать URL (и сделать их большим количеством пользователя и SEO дружественный)

, можно читать больше здесь http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html и здесь http://www.sitepoint.com/article/apache-mod_rewrite-examples/

РЕДАКТИРОВАНИЕ : Там переписывают модули для IIS также.

5
ответ дан 1 December 2019 в 06:21
поделиться

Традиционно расширение файла представляет файл, который подается.

, Например

http://someserver/somepath/image.jpg

Позже тот же самый подход использовался, чтобы позволить процессу сценария параметр

http://somerverser/somepath/script.php?param=1234&other=7890

В этом случае, файл был сценарием PHP, которые обрабатывают "запрос" и представили динамично созданный файл.

В наше время, приложения намного более сложны, чем это (а именно, амазонка, которую Вы упомянули)

Затем существует не единственный сценарий, который обрабатывает запрос (но остроумие намного более сложного приложения несколько файлов/методов/функций/объектов и т.д.), и URL больше похож на точку входа для веб-приложения (это может иметь сценарий позади, но что другая вещь), поэтому теперь веб-приложения как амазонка и да, который stackoverflow не показывают файлу в URL, но чем-либо прибытие, обрабатывается приложением в стороне сервера.

URL веб-сайтов без расширения файла?

Здесь я вопросы представляют веб-приложение и 322747 параметр

, я надеюсь, что это небольшое объяснение помогает Вам понять лучше все другие ответы.

3
ответ дан 1 December 2019 в 06:21
поделиться

В зависимости от настроек Вашего сервера можно использовать (или не) любое расширение, которое Вы хотите. Вы могли даже установить расширения, чтобы быть ".JamesRocks", но это не будет очень полезно :)

Так или иначе на всякий случай Вы плохо знакомы с веб-программированием весь этот мусор на конце существуют аргументы ПОЛУЧИТЬ операции а не расширению страницы.

0
ответ дан 1 December 2019 в 06:21
поделиться

Много сообщений упомянули это, и я взвешусь. Это абсолютно - система перезаписи URL, и много платформ имеют способы реализовать это.

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

я рекомендовал бы брать технологию, Вы хотите работать с, и образцы исследования механизма перезаписи URL для той платформы. Для.NET, например, там Google 'перезапись URL asp.net' или использование дополнительная платформа как MVC, который делает эту функциональность из поля.

0
ответ дан 1 December 2019 в 06:21
поделиться

Много людей использует больше" УСПОКОИТЕЛЬНЫЙ " архитектура типа... или по крайней мере, выглядящие словно REST URL.

Этот сайт (StackOverflow) dosn't показывает расширение файла... это использует ASP.NET MVC.

0
ответ дан 1 December 2019 в 06:21
поделиться

В Django (платформа веб-приложений для Python), Вы разрабатываете URL сами, независимый от любого имени файла или даже любого пути на сервере в этом отношении.

Вы просто говорите что-то как, "Я хочу /news/<number>/ URL быть обработанным этой функцией"

-1
ответ дан 1 December 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: