Мне пришлось справиться с подобной проблемой: я разрабатываю веб-приложение с интерфейсом Angular 6 и бэкэндом Java (веб-сервис REST, Spring и MyBatis).
Для конфигурации Spring я все еще использую файлы конфигурации XML.
В режиме разработки я работаю на 4200
порте для клиентской части и 8080 для бэкэнда (на Tomcat). Нет проблем в этой ситуации.
Затем я слил приложение Angular на войне, в частности, в папку public
. После этого, когда я запускаю приложение и нажимаю кнопку F5 , я получаю 404 error
.
Для папки public
на стороне Spring я делаю следующую конфигурацию:
<mvc:resources mapping="/public/**" location="/public/">
<mvc:resource-chain resource-cache="false">
<mvc:resolvers>
<bean class="com.example.web.AngularResourceResolver" />
</mvc:resolvers>
</mvc:resource-chain>
</mvc:resources>
AngularResourceResolver
определен так:
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.resource.PathResourceResolver;
public class AngularResourceResolver extends PathResourceResolver {
@Override
protected Resource getResource(String resourcePath, Resource location) throws IOException {
Resource requestedResource = location.createRelative(resourcePath);
Resource defaultResource=location.createRelative("/index.html");
Resource resource = requestedResource.exists() && requestedResource.isReadable() ? requestedResource : defaultResource;
return resource;
}
}
После применения этой конфигурации все работает отлично даже на Tomcat, даже после нажатия F5 .
Надеюсь, это поможет вам.