Я исследовал, как выполнить перезапись URL-адресов на Tomcat 8, и продолжаю сталкиваться с одними и теми же двумя предложениями.
1) Используйте Tukey 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");
}
}
Моя корневая конфигурация
@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
}