我们使用angular-route将URL映射到模板。该应用程序以如下方式工作:我们正在从http://servername/appName
导航到http://servername/appName/page1
,浏览器上的网址会发生变化,模板会成功加载。
问题是当页面刷新(或直接访问http://servername/appName/page1
)时,我们从服务器收到404错误。看起来默认处理程序不会将未知URL映射到默认应用程序页面。
我们如何让服务器返回所有这些angularjs URL的默认应用页面?
代码如下:
@Controller
public class HomeController {
@RequestMapping("/")
public String home() {
return "/WEB-INF/views/nbcalendar.html";
}
}
应用配置:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.appname.web"})
public class MvcConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
答案 0 :(得分:1)
您可以在web.xml配置中设置错误处理程序。注意!此web.xml在Servlet容器(E.G. tomcat)中配置您的应用程序,它不是Spring-MVC设置。
添加如下内容:
<error-page>
<error-code>404</error-code>
<location>/MY_HANDLER</location>
</error-page>
MY_HANDLER要么是您的默认位置,要么是记录事件的jsp,然后转发到默认位置。
希望有所帮助。
答案 1 :(得分:1)
您可以在@RequestMapping
中使用wildcard expressions来匹配您的应用及其所有子页面。
@RequestMapping("/**")
public String home() {
return "/WEB-INF/views/nbcalendar.html";
}
答案 2 :(得分:0)
我能够通过将其他URL添加到家庭控制器来解决它:
@Controller
public class HomeController {
private static String DEFUALT_PAGE = "/WEB-INF/views/main.jsp";
@RequestMapping("/")
public String home() {
return DEFUALT_PAGE;
}
@RequestMapping("/welcome")
public String welcome() {
return DEFUALT_PAGE;
}
@RequestMapping("/cluster/{id}")
public String cluster() {
return DEFUALT_PAGE;
}
}
这不是通用解决方案,需要手动添加任何新网址,但它运行良好