2012-04-19 3 views
5

У меня есть настройка сервлета весны-mvc для соответствия * .page запросов. Я настроили радушны-файл-лист в web.xml быть index.pageприветственный файл в web.xml с пружиной не работает?

Это работает, когда я иду в корне моего веб-сервера:

http://me.com действительно попадаю в http://me.com/index.page правильно.

Однако это не перенаправляет когда я использую subdirectoris:

http://me.com/dashboard делает не попадет в http://me.com/dashboard/index.page

Есть ли способ, чтобы получить это отображение работает?

Мой файл web.xml (экстракт):

<welcome-file-list> 
    <welcome-file>index.page</welcome-file> 
</welcome-file-list> 

<servlet-mapping> 
    <servlet-name>spring-mvc</servlet-name> 
    <url-pattern>*.page</url-pattern> 
</servlet-mapping> 

Мой webdefault.xml (от причала):

<init-param> 
     <param-name>dirAllowed</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <init-param> 
     <param-name>welcomeServlets</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>redirectWelcome</param-name> 
     <param-value>false</param-value> 
    </init-param> 

ответ

3

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

Spring MVC позволяет очень сложные отображения URL, так что вам лучше справиться с этим сценарием с @RequestMapping

+0

Hi Bozho. Ты уверен? В документации http://docs.oracle.com/cd/E13222_01/wls/docs81/webapp/web_xml.html#1026980 должно быть показано, что каталоги должны поддерживаться. –

+0

может быть так, как они реализованы в WebLogic. Но Jetty, вероятно, интерпретирует стандарт по-разному. Попробуйте в совершенно новом приложении, без весны, просто для тестирования – Bozho

+0

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

0

Это то, что вам нужно, вероятно, установить в вашем веб-сервере, и поэтому, возможно, сервер конкретных

Для Apache HTTP Server можно достичь, установив директиву DirectoryIndex следующим образом: DirectoryIndex index.page

Видимо, кто-то уже задавал этот вопрос, и принял ответ на web.xml default file in directory (for jetty, or tomcat)? - Смотрите, если он работает для вас.

+0

Привет Райан. Это то, что я делаю в данный момент, но, к сожалению, оно работает только в корне контекста, а не в подкаталогах. –

12

The <welcome-file> должен представлять собой физически существующий файл в произвольной папке, которую вы хотели бы, чтобы служить, когда конечный пользователь запрашивает папку (например, корень /, но она также может быть любой другой папки, такие как /foo/). Вам нужно только понять, что servletcontainer будет проверять свое физическое существование перед выполнением переадресации, если он не существует, будет возвращена ошибка HTTP 404.

В вашем конкретном случае у вас нет физического файла index.page в корневой папке. У вас есть фактически a index.jsp файл в вашей корневой папке. index.page - это просто виртуальный URL. Таким образом, servletcontainer не сможет найти физический index.page файл и, следовательно, без ошибок с 404.

Вы можете обойти это, дурача servletcontainer путем размещения физически существующий index.page файл рядом с файлом index.jsp в той же папке , Этот файл можно просто сохранить полностью пустым. Сервлетконтейнер найдет файл, а затем перейдет на index.page, который затем вызовет сервлет контроллера, который, в свою очередь, фактически будет показывать index.jsp. Все будет хорошо.

+0

Hi BalusC. В файле webdefault.xml в Jetty есть специальный параметр, называемый welcomeServlets. Если вы установите значение true, Jetty будет искать сервлет, который удовлетворяет приветствующему файлу, если физический файл не существует. У меня установлено значение true, и он работал для корневого контекста, но, к сожалению, не работает для подкаталогов. –

+0

Создание пустого файла, чтобы обмануть контейнер, немного гениально. Благодаря! – Kal

+0

Ты гений. –

2

Чтобы избежать переадресации файла приветствия, его лучше добавить для него сопоставление.

<servlet-mapping> 
    <servlet-name>spring-mvc</servlet-name> 
    <url-pattern>index.html</url-pattern> 
    </servlet-mapping> 

И в случае конфигурации Java вы можете переопределить два метода в классе, который расширяет WebMvcConfigurerAdapter

@Override 
public void addViewControllers(ViewControllerRegistry registry) { 
    registry.addViewController("/").setViewName("/index"); 
} 

@Override 
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
    configurer.enable(); 
} 

Если вы хотите служить index.html в явном виде, превратить его в ресурс переопределить метод в том же класс, как показано ниже:

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/index.html").addResourceLocations("/WEB-INF/views/index.html"); 
} 

конечно addResourceLocations обязательно следует папку Выбирается для хранения ваших взглядов.

these samples

Смежные вопросы