有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个在JBoss中运行的Java web应用程序。我正在使用AngularJS添加一个新的求职网页,我希望它响应这个(RESTful)URL:/job/<job id>/apply

因为我是Angular的新手,所以我试图找出如何路由用户对URL的请求,如:

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

到我的web应用程序中的静态HTML页面,如src/main/webapp/job/apply.html。我的计划是在apply.html模板中指定一个ng-appng-controller,这将调用返回服务器,以获取要在视图中呈现的JSON

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

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

  1. 使用SpringMVC,编写一个侦听RESTfulURL的@Controller,并将请求转发到apply.html。(我甚至还没有在这个web应用程序中使用Spring MVC……还没有。)
  2. 使用SpringMVC和^{}^{}元素将请求的URL映射到HTML页面
  3. 使用web筛选器将传入URL重写为/job/apply.html
  4. 放弃使用RESTful URL,将作业ID改为查询参数,并将我的apply.html重命名为just index.html(这样它会被自动拾取)。例如,用户请求/job/apply?jobId=1,它映射到webapp/job/apply/index.html

我最不确定的是请求URL中的作业ID是否可用于我的angular controller代码,以便从后端获取关于该作业的数据


共 (1) 个答案

  1. # 1 楼答案

    将服务器端的每个请求重定向到索引。在不请求文件时使用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模式”,那对最终用户来说就更干净了