在Java Web应用程序中将RESTful URL映射到静态HTML页面

时间:2014-01-25 15:49:56

标签: java spring angularjs spring-mvc

我有一个在JBoss中运行的Java Web应用程序。我正在使用AngularJS添加一个新的网页来申请工作,我希望它能回复这个(RESTful)网址:/job/<job id>/apply

由于我是Angular的新手,我正在试图弄清楚如何路由用户的URL请求:

GET /job/1/apply(其中“1”是作业ID)

到我的网络应用中的静态HTML页面,例如src/main/webapp/job/apply.html。我的计划是在ng-app模板中指定ng-controllerapply.html,它会将返回调用到服务器以获取JSON以在视图中呈现。

那么如何在我的基于Java的Web应用程序中配置路由,以便请求/job/1/apply产生/job/apply.html,并且apply.html加载的控制器JS代码可以轻松访问网址参数“1”?

我想出了几种可能的方法来实现这一点,但它们似乎都不是那么简单或直截了当:

  1. 使用Spring MVC,编写一个监听RESTful URL的@Controller,并将请求转发给apply.html。 (我甚至没有在这个网络应用程序中使用Spring MVC ......)
  2. 使用Spring MVC和<mvc:resources><mvc:view-controller>元素将请求的URL映射到HTML页面。
  3. 使用网络过滤器将传入的网址重写为/job/apply.html
  4. 放弃使用RESTful网址,将作业ID改为查询参数,并将apply.html重命名为index.html(以便自动获取)。例如。用户请求/job/apply?jobId=1,其映射到webapp/job/apply/index.html
  5. 我最不确定的是请求URL中的作业ID是否可用于我的角度控制器代码,以便从后端获取有关该作业的数据。

1 个答案:

答案 0 :(得分:0)

在不请求文件时将每个请求服务器端重定向到index.html并使用ng-route(http://docs.angularjs.org/api/ngRoute。$ route)加载正确的模板,如

app.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
    when('/job/:jobid/apply', {
        templateUrl: '/job/apply.html'
    }).
    otherwise({
        redirectTo: '/'
    });
  }
]);

如果您可以使用ngLocation(http://docs.angularjs.org/guide/dev_guide.services。$ location)的“html5模式”,那么对于最终用户来说更加清晰。