Tomcat,Grunt构建

时间:2015-01-05 07:38:07

标签: java angularjs node.js tomcat gruntjs

我正在使用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'
      });
  });

3 个答案:

答案 0 :(得分:1)

要通过AngularJs服务器,请在域后添加/#/,并确保默认启用 html5 模式为false$locationProvider.html5mode)。为您的应用程序提供来自客户端站点(angular-js)的内容

http://localhost:8080/#/upload

答案 1 :(得分:1)

你设置角度的方式是使用历史推送状态进行导航,更改浏览器的URL而不会实际导致浏览器从后端重新获取其内容。

因此,使用推送状态,浏览器中的角度可以很好地导航,但是当请求实际发送到服务器时,它会响应404,因为您没有任何内容可以为HTML提供服务。

有两种解决方案:

  1. 切换到使用#!网址,以便从服务器获取相同的网址(请参阅其他答案)。
  2. 更新您的服务器,为所有路径提供相同的静态HTML(此答案)。
  3. 您需要发送回初始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请求。