Cant in Einzelheiten erklären, warum dies geschieht, aber ich kann Ihnen einen Weg beschreiben, ich dieses Problem gelöst werden. Also habe ich UrlRewriterFilter für mein SpringMvc-Backend verwendet. Eckige allgemeine Modulkonfiguration:
var app = angular.module('ilonaChatGeneralModule',
[
'ui.router'
]);
app.config(function($locationProvider){
$locationProvider.html5Mode(true);
});
app.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
var home = ['/', {
url: '/',
templateUrl: 'views/userlist.html'
}];
var login = ['login', {
url: '/login',
templateUrl: 'views/login.html'
}];
var privateRoom = ['privateroom', {
url: '/privateroom',
templateUrl: 'views/privateroom.html'
}];
$stateProvider
.state(home)
.state(login)
.state(privateRoom)
;
});
Meine Homepage, Index.html:
<html ng-app="ilonaChatGeneralModule" ng-controller="ilonaChatGeneralCtrl">
<head>
<base href="/">
...
</head>
<body>
<div>
<div ui-view=""></div>
</div>
</body>
</html>
Dies ist Frontend. Ich UrlRewriteFilter für Backend verwendet, können Sie es mit folgenden Maven Abhängigkeit erhalten:
package com.sbk.config;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.tuckey.web.filters.urlrewrite.UrlRewriteFilter;
import javax.servlet.*;
import java.nio.charset.StandardCharsets;
import java.util.EnumSet;
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
private static final String URL_REWRITE_FILTER_NAME = "urlRewrite";
private static final String URL_REWRITE_FILTER_MAPPING = "/*";
...
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
FilterRegistration.Dynamic urlReWrite = servletContext.addFilter(URL_REWRITE_FILTER_NAME, new UrlRewriteFilter());
EnumSet<DispatcherType> urlReWriteDispatcherTypes = EnumSet.of(DispatcherType.REQUEST, DispatcherType.FORWARD);
urlReWrite.addMappingForUrlPatterns(urlReWriteDispatcherTypes, true, URL_REWRITE_FILTER_MAPPING);
}
}
Dieser Filter erfordert urlrewrite.xml unter file:
<dependency>
<groupId>org.tuckey</groupId>
<artifactId>urlrewritefilter</artifactId>
<version>4.0.3</version>
</dependency>
ich es meinem SpringMVC WebAppInitializer in der nächsten Weise hinzugefügt haben Ihr WEB-INF-Verzeichnis (scheint in konfigurierbar aber Standard-Ort - hier). Inhalt dieser Datei:
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
"http://www.tuckey.org/res/dtds/urlrewrite2.6.dtd">
<urlrewrite>
<rule>
<from>/login$</from>
<to>index.html</to>
</rule>
<rule>
<from>/privateroom$</from>
<to>index.html</to>
</rule>
</urlrewrite>
ich nicht Handbücher sorgfältig gelesen habe, aber ich vermute, dass Idee ist, wenn Sie ur-Browser mit http://yourhost:xxxx/privateroom ur App aktualisieren versuchen physicaly bestehende Ansicht http://yourhost:xxxx/privateroom zu finden. Aber es ist abwesend. Und wenn Sie es auf Ihre Basisseite umlenken, würde die korrekte Verbindung zur physischen Datei mit der Definition des Status erstellt. Ich kann in der Theorie verwechseln, aber es funktioniert in der Praxis
Das ist im Grunde die Lösung. Eine Sache möchte ich hinzufügen: Wenn Ihr Backend auch dynamische Daten, z. Wenn Sie eine API verwenden, möchten Sie die API von dieser Umleitung isolieren. Daher müssen Sie diese Regel nur hinzufügen, wenn eine Datei, die der Anforderung entspricht, nicht existiert und auch keine andere API-Route übereinstimmt. –
Guter Punkt. Meine Antwort wurde aktualisiert. Wie für APIs, bevorzuge ich es, sie von einer separaten URL/Domäne auszuführen. –
Es gibt ein gutes Beispiel für NodeJS, die hier ein SPA anbieten: http://stackoverflow.com/questions/20396900/angularjs-routing-in-expressjs – mbokil