Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > url mapping


Автор: SuperFly 30.11.2007, 01:47
Всем привет!

Хочется узнать, как можно установить сервлет, который запускается в Tomcat по умолчанию.

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

Код

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <url-pattern>/images/*</url-pattern>
        <servlet-name>???????</servlet-name>
    </servlet-mapping>


Видимо как-то так нужно.

Автор: tux 30.11.2007, 02:29
Именно так. Все, что ты исключишь из обработки своим сервлетом, будет обработано дефолтным.

Автор: SuperFly 30.11.2007, 10:02
tux, я тут расплылся в улыбе...

Цитата(tux @  30.11.2007,  02:29 Найти цитируемый пост)
Именно так.

Как "именно так"? Оставить "????????" на своем месте? Что-то мне вместо них надо написать.
Посмотрел в webjavenue, дык там какой-то "default", который IDEA подсвечивает как невалидный.

Автор: tux 30.11.2007, 10:50
А зачем тебе обрабатывать все? Обрабатывай конкретное расширение, например.
Код

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.fly</url-pattern>
    </servlet-mapping>
</servlet-mapping>

Это обычная практика. Все остальное будет обрабатываться дефолтным сервлетом.

Автор: SuperFly 30.11.2007, 13:07
Хнык, так не интересно... хотя спасибо за 1 из вариантов.

НО я хотел бы, чтоб у меня URL был такого вида:

Цитата

http://mysite.ru/car/add


и никаких суффиксов.

Автор: SuperFly 30.11.2007, 13:29
в идеале конечно хотел сделать http://mysite/авто/добавить
Но, так и не получилось настроить Tomcat, чтоб он требовал у FF отсылать URL или URI в UTF-8 кодировке.

Автор: tux 30.11.2007, 15:51
Цитата(SuperFly @  30.11.2007,  13:29 Найти цитируемый пост)
в идеале конечно хотел сделать http://mysite/авто/добавить

Ну тогда поставь default из webjavenue. Или тебя волнует что думает о нем IDEA?

Автор: SuperFly 30.11.2007, 16:04
tux, Ж_Ж ну так-то да.
Вы как-то не договариваете. Я в этом на самом деле еще плохо разбираюсь...
"default из webjavenue" непонятно откуда вообще взялось, я пробовал отключить инспекцию, компилировалось, но не загружалось, т.е. исключение выбрасывает.

Автор: tux 30.11.2007, 17:12
Странно. Что за исключение? default - Это дефолтный сервлет Томката. Чтобы его увидеть вживую, можно заглянуть в TOMCAT_HOME/conf/web.xml.

Автор: SuperFly 30.11.2007, 17:15
И правда что!!! хм, надо еще тогда попробовать.

Автор: SuperFly 30.11.2007, 20:08
да с default всё вроде разрешилось, но вот беда, не хочет работать:

Код

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/images/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

не получается.
ресурс не найден в случае /images/*

Если какой-то суффикс поставить для dispatcher, тоже не получается.
ресурс не найден и в том и в другом случае.

Дааа, для справки должен сказать, возможно это архиважно. у меня путь к приложению лежит
localhost:8080/velo/*
т.е. есть преффикс, возможно он что-то коверкает?

Автор: SuperFly 30.11.2007, 22:51
Осталось последние 2 проблемы разрешить, и я буду полностью готов перейти на Java for Web!!!
Поможите кто чем может.

Автор: Platon 1.12.2007, 10:56
Бедный паренек, столько вопросов, еще раз убеждаюсь, что дело Java for Web гиблое, уж больно туго становление происходит...

Автор: SuperFly 1.12.2007, 11:18
Ну, я честно сказать, тоже не ожидал таких штыков... Но, бесспорно, сама Java предоставляет намного больше возможностей, чем PHP, поэтому то и борюсь!

Автор: SuperFly 1.12.2007, 13:25
Вернемся к нашим баранам.
Нет, я не буду делать *.fly потому, что это не позволяет обработать папки, к примеру http://mysite.ru/cars/

а если делать с welcome file, я видел, какие танцы с бубном просиходят у спринговцев.
Скажите просто: в url-pattern реальный reg-exp или упрощенный?

Добавлено через 7 минут и 43 секунды
Я вообще его логику понять не могу...

<url-pattern>/*</url-pattern> должен идти обязательно с / иначе ошибка
а <url-pattern>*.fly</url-pattern> дык без / в чем разница???

http://www.roguewave.com/support/docs/leif/leif/html/bobcatug/7-3.html
Я не могу понять, почему шаблону <url-pattern>/status/*</url-pattern> подходит http://example.com/examples/status

Автор: tux 1.12.2007, 15:57
Цитата(SuperFly @  1.12.2007,  13:25 Найти цитируемый пост)
Я не могу понять, почему шаблону <url-pattern>/status/*</url-pattern> подходит http://example.com/examples/status 

Каждое джавное веб-приложение обладает контекстом. Ну или иными словами это корень приложения. Например в данном случае для приложения контекст - это '/examples'. По контексту контейнер определяет какому приложению передать управление и все что внутри этого контекста уже управляет самим приложением. Поэтому маска в паттерне - /status/*. Какой контекст соответствует приложению управляется средствами веб-контейнера. У Томката по дефолту это имя war-файла, но можно поменять хоть на '/'.

Цитата(Platon @  1.12.2007,  10:56 Найти цитируемый пост)
Бедный паренек, столько вопросов, еще раз убеждаюсь, что дело Java for Web гиблое, уж больно туго становление происходит... 

Это относительно к вам дело гиблое? В мировом масштабе факты говорят об обратном. Подавляющее большинство приложений на Java - как раз веб-приложения. И корпорации вкладывают гигантские деньги в инструменты и сами приложения. Много ли денег крутится в PHP? У Java и PHP разные ниши. У Java гораздо большая масштабируемость и огромное количество технологий, нужных для корпоративных приложений. Результат - большая сложность.

Автор: ivg 1.12.2007, 18:53
Нв самом деле в варианте с
Код

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/images/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

дефолтный сервлет вызывается, а
Цитата(SuperFly @  30.11.2007,  20:08 Найти цитируемый пост)
ресурс не найден в случае /images/*

потому что путь для поиска ресурса, при указанном сервлет-маппинге, он берёт как то, что идет после /images (request.getPathInfo()), а ищет относительно корневой директории контекста. Баг?  smile
Попробуйте http://localhost:8080/velo/images/images/image.gif...
Можно, конечно придумать workaround, но чем не устраивает вариант webjavenue:
Код

<servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.gif</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

ну или dispatcher замапить на несколько папок, а корень оставить дефолтному сервлету
Если и это не подходит, то javax.servlet.RequestDispatcher вам в руки  smile

[off]А что такая сессия короткая на форуме, пока ответ наберёшь, уже вылетел :( [/off]

Автор: SuperFly 1.12.2007, 19:42
Цитата(ivg @  1.12.2007,  18:53 Найти цитируемый пост)
Попробуйте http://localhost:8080/velo/images/images/image.gif...

Да, реально работает smile


Цитата(ivg @  1.12.2007,  18:53 Найти цитируемый пост)
Можно, конечно придумать workaround, но чем не устраивает вариант webjavenue:

А потому, что хочется тупо публичную папку, в которой будут все данные, которые разрешено извлекать.

Автор: ivg 1.12.2007, 19:51
Цитата(SuperFly @  1.12.2007,  19:42 Найти цитируемый пост)
А потому, что хочется тупо публичную папку, в которой будут все данные, которые разрешено извлекать

так закройте диспетчером то что нельзя извлекать, корень и все остальные папки будут "публичными":
Код

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/somewhat/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/blabla/*</url-pattern>
    </servlet-mapping>

Автор: SuperFly 2.12.2007, 00:58
ivg, всё лишь бы не отвечать на вопрос ^_^
я хочу сделать 1 папку публичной и все осталные обрабатываемые диспетчером, а не наоборот.

Автор: SuperFly 2.12.2007, 01:38
Цитата(tux @  1.12.2007,  15:57 Найти цитируемый пост)
Это относительно к вам дело гиблое?

Обидно.. досадно..

Цитата

Например в данном случае для приложения контекст - это '/examples'.


Нет, меня на самом деле удивило не это. На самом деле я говорил про то, что /status/* есть обратный слеш. и как бы я и не могу понять, почему тут examples/status без закрывающего слеша проходит?

Автор: SuperFly 2.12.2007, 08:49
ivg, до меня только щас дошщел ваш пост!!! Спасибо!!!
Бескрайне рад.
Тогда, чтоб url был красивый, я сделаю <url-pattern>/public/*</url-pattern>
Получится: http://mysite.ru/public/images/1.gif
http://mysite.ru/public/html/page.html
http://mysite.ru/public/html/filestorage/g.zip
Просто бескрайне рад!!!

Остался последний вопрос!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)