Я изучаю, как выполнять перезаписи URL-адресов на Tomcat 8 и продолжать работать в тех же двух предложениях.Tuckey URL Rewrite Filter Конфигурация Java-класса
1) Использовать Tuckey URLRewriteFilter. 2) Запустите Apache поверх Tomcat, чтобы использовать mod_rewrite.
В отношении первого, у URLRewriteFilter отсутствует документация о том, как настроить в формате Java, а не в формате XML. Мое приложение Spring MVC не использует файл web.xml - вся конфигурация выполняется через классы Java - и поэтому я не могу настроить XML.
Есть ли способ настроить таким образом или есть хорошие альтернативы, кроме попытки запустить Apache поверх Tomcat?
Например, есть способ для достижения этой цели в Java, в отличие от XML:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
Это мой WebApplicationInitializer класс:
public class Initializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext =
new AnnotationConfigWebApplicationContext();
rootContext.register(RootConfig.class);
// Manage the lifecycle of the root application context
container.addListener(new ContextLoaderListener(rootContext));
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext =
new AnnotationConfigWebApplicationContext();
dispatcherContext.register(WebAppConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher =
container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/*");
dispatcher.addMapping("*.html");
}
}
Мой RootConfig
@Configuration
@ComponentScan(basePackages={"com.ucrisko.*"},
excludeFilters={
@ComponentScan.Filter(type=FilterType.ANNOTATION, value=EnableWebMvc.class)
})
public class RootConfig {
}
И мой WebAppConfig
@Configuration
@EnableWebMvc
@ComponentScan(basePackages={"com.ucrisko.*"})
public class WebAppConfig extends WebMvcConfigurerAdapter{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
...various other beans
}
Верхняя часть вашего ответа, по-видимому, работает хотя бы частично. В моем журнале сервера я получаю org.apache.catalina.core.ApplicationContext.log org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: загружен (conf ok) и, похоже, он может найти файл urlrewrite.xml. Тем не менее, у меня нет ссылок на любые URL-адреса, которые были переписаны. Например, следующее не приводит к попытке перенаправления на страницу index.html. ^пользователи <ввести = «перенаправления»> index.html –
Ravioli87
Если ничего не происходит, то весна, вероятно, просто инициализирует класс UrlRewriteFilter (вызывая сообщения журнала вы видите), но это не на самом деле зарегистрируйте фильтр (другими словами - он не работает). Что произойдет, если вы попытаетесь использовать нижний подход? Как вы запускаете приложение Spring MVC? (например, у вас есть класс, который реализует интерфейс WebApplicationInitializer? Где вы указываете свой основной класс конфигурации javaconfig?) –
Да, у меня есть WebApplicationInitializer, но он немного отличается от того, что у вас есть. Я добавлю это к моему вопросу выше. – Ravioli87