2009-11-28 3 views
4

Допустимо ли иметь несколько записей в качестве корня контекста сервлета?Ядро контекста сервлета Java

Например, во всех примерах Sun используется один номер /catalog или что-то похожее на корень контекста, но может ли это быть /catalog/furniture?

Servlet 2.4 Specification здесь не определен.

Контекст Путь: Путь префикс, связанный с ServletContext, что этот сервлет является частью. Если этот контекст представляет собой «по умолчанию» контекст, основанный на базе пространства имен URL-адресов веб-сервера, этот путь будет пустой строкой. В противном случае, если контекст не укоренен в корневом пространстве имени сервера, путь начинается с символа '/' , но не заканчивается символом '/'.

+0

Множество записей для контекстного корня (WAR), вы имеете в виду '/ multiple/entries' vs'/singleentry' или что-то еще? На самом деле, вы смешиваете концепции веб-приложений с сервлетом, это очень запутанно. –

ответ

1

Да. Это просто префикс. Он должен начинаться с «/» и не может заканчиваться на «/», если это не «/». Разрешены внутренние косые черты.

0

E.g. все примеры Sun используют один «каталог» или похожий на корень контекста, но может ли он быть «каталог/мебель»?

В вашем web.xml, вы предлагаете, что вы хотите отобразить «каталог/» и «Каталог/мебель/» к тому же сервлет? Какой смысл? Я думаю, что механизм сервлета направит оба этих запроса на тот же сервлет.

Если вы предположили, что у вас есть два файла WAR, один из которых называется catalog.war, а другой - что-то еще, и оба должны маршрутизировать все запросы на один и тот же сервлет, либо вам придется иметь. файл класса для этого сервлета в обоих файлах WAR, или корневой сервлет для чего-то другого контекста, должен быть написан так, чтобы он перенаправлял все запросы в корневой сервлет catalog.war.

Вы можете быть немного более четкими относительно того, что именно вы имеете в виду? Я думаю, что то, что вы хотели бы сделать, немного запутанно.

+0

Я не уверен, но я думаю, что речь идет о путях контекста (может ли это быть '/ catalog/furniture' для WAR?), А не для сервлет-сопоставления. Но вопрос довольно неясен. –

+0

Согласовано, «каталог/каталог» был бы контекстом по умолчанию, если у вас установлен каталог. Похоже, что «каталог/мебель» будет излишним. Это похоже на то, что OP хочет иметь разные категории в каталоге («каталог/мебель» будет маршрутизироваться на furniture.jsp и т. Д.) – duffymo

-1

Нет. Вы не можете иметь косую черту в корневом пути контекста.

Тем не менее, вы можете добиться такого же эффекта с помощью корневого контекста, что и «/ catalog». Просто поместите все ваши статические и JSP-файлы в разделе «/ furniture» в WAR и добавьте карту Servlets соответственно.

+0

* «Нет. Вы не можете иметь косую черту в корневом контексте контекста». * Для моей культуры, какова эта ссылка? –

+0

Во всех реализациях контекстный путь используется как часть имени файла или каталога («catalog.xml», «catalog.war» или «/ webapps/catalog /»). Slash не разрешен в именах файлов/каталогов для большинства файловых систем. –

+0

Я создал приложение с обратной косой чертой в корне контекста раньше. Я не верю, что это правда. Это может быть специфичным для реализации. – gbtimmon

2

МЫ не можем предоставить несколько контекстных корней для сервлета. Но мы можем изменить динамически с разными именами в server.xml, как

<web-uri>Project.war</web-uri> 
<context-root>myproj</context-root> 

Мы можем настроить наш контекст проекта корня с разными именами, но это должно быть одно имя.

По умолчанию, если вы вызываете contextPath с использованием объекта запроса как req.getContextPath();, он по умолчанию будет иметь слэш (/) как /myproj.

Для получения дополнительной информации, чтобы изменить корни контекста как статические на динамические, вы можете check here.