我正在使用grunt作为我的角度js app,而tomcat则用于我的服务器端。
无论何时需要,在dev env中,我运行Grunt构建,获取dist文件夹并将其放在tomcat webapp文件夹中。
但是,我有一个奇怪的问题。只有当我从HTML页面点击它们时,应用程序中的URL才有效。
e.g。如果我输入http://localhost:8080/upload
- 我会得到404 page not found error
,但是如果从索引页面http://localhost:8080
,我点击页面中的链接,导致上传工作正常。
可能是什么问题?
如果我在node.js上运行应用程序,链接可以完美运行!只是在Tomcat上,它没有按预期工作。
EDITED
我在角度js中定义了这样的网址
angular.module('angularjsApp')
.config(function ($stateProvider) {
$stateProvider
.state('upload', {
url: '/upload',
templateUrl: 'app/upload/upload.html',
controller: 'UploadCtrl'
});
});
答案 0 :(得分:1)
要通过AngularJs服务器,请在域后添加/#/
,并确保默认启用 html5 模式为false
($locationProvider.html5mode
)。为您的应用程序提供来自客户端站点(angular-js)的内容
http://localhost:8080/#/upload
答案 1 :(得分:1)
你设置角度的方式是使用历史推送状态进行导航,更改浏览器的URL而不会实际导致浏览器从后端重新获取其内容。
因此,使用推送状态,浏览器中的角度可以很好地导航,但是当请求实际发送到服务器时,它会响应404,因为您没有任何内容可以为HTML提供服务。
有两种解决方案:
您需要发送回初始HTML内容的servlet才能为所有路由发送 - 因此映射到/*
而不仅仅是/
所以它给出了任何路径始终返回相同的HTML。
所以你的web.xml有一个看起来像这样的servlet:
<servlet>
<servlet-name>StaticHtmlServlet</servlet-name>
<servlet-class>com.example.StaticHtmlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>StaticHtmlServlet</servlet-name>
<url-pattern>/</url-pattern>
<url-pattern>/*</url-pattern> <!-- so this is what's added -->
</servlet-mapping>
答案 2 :(得分:0)
链接是否是实际的标准HTML链接?如果Tomcat没有回答http://localhost:8080/upload
,那么可能它不是GET
请求。