Tomcat,Grunt构build

我正在使用我的angularjs应用程序和tomcat服务器端的咕噜声。

无论何时需要,在开发环境,我运行Grunt生成,采取dist文件夹,并把它放在tomcat webapp文件夹中。

但是,我有一个奇怪的问题。 只有当我从HTML页面点击它们时,应用程序中的URL才能起作用。

例如,如果我inputhttp://localhost:8080/upload – 我将得到404 page not found error ,但是如果从索引页 – http://localhost:8080 ,我点击页面上的链接,导致上传它的作品精细。

可能是什么问题呢?

如果我运行node.js上的应用程序,链接工作完美! 只是在Tomcat上它不能按预期工作。

EDITED

我用angular度js来定义这样的url

 angular.module('angularjsApp') .config(function ($stateProvider) { $stateProvider .state('upload', { url: '/upload', templateUrl: 'app/upload/upload.html', controller: 'UploadCtrl' }); }); 

通过angular度设置其使用历史logging的状态来导航,更改浏览器的URL,而不会实际导致浏览器从后端重新获取其内容。

所以使用push状态在浏览器angular度可以导航就好了,但是当一个请求实际发送到服务器,它响应404,因为你没有什么可以为你的HTML服务。

有两个解决scheme:

  1. 切换到使用#! 从服务器,你总是得到相同的URL(请参阅其他答案)。
  2. 更新您的服务器为所有path提供相同的静态HTML(这个答案)。

您需要发回您的初始HTML内容的servlet为所有路由发送 – 如此映射到/*而不是/所以它给出的任何path总是返回相同的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> 

为了通过AngularJs服务器,然后添加/#/域后,并确保默认启用html5模式为false$locationProvider.html5mode )。下面的例子为您的应用程序提供客户端网站的内容(angular-js)

 http://localhost:8080/#/upload 

链接是否是实际的标准HTML链接? 如果Tomcat不回答http://localhost:8080/upload ,那么也许它不是GET请求。