【发布时间】:2017-09-25 14:35:28
【问题描述】:
我正在尝试使用 Angularjs 为 UI 创建一个应用程序,包括用于模块化的 angular-route,然后调用 Spring MVC 以依次调用 DAO 来执行一些基本的 CRUD。问题是让两者同时工作。到目前为止,我所做的一切都会导致 404 中的一个或另一个。
我可能是错的,但我认为问题根源于 web.xml,特别是 url 模式。例如,如果我这样设置映射:
<servlet-mapping>
<servlet-name>MyApp</servlet-name>
<url-pattern>/obviousJunk</url-pattern>
</servlet-mapping>
然后应用程序运行,我可以预览我的 html 页面,并查看我的所有 <div>s 和 <table>s 和 <img>s 看起来都很漂亮。这些页面的 URL 格式为 http://localhost:8080/MyApp/#!/home 或 http://localhost:8080/MyApp/#!/categoryList
依此类推,也就是说,都有角度路线“#!”模式。
有了这个<url-pattern>,当然不能调用我的servlet。但是,如果我将以上内容更改为:
<servlet-mapping>
<servlet-name>MyApp</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
然后点击http://localhost:8080/MyApp/services/category/list,就可以成功执行这个方法了:
@RequestMapping(value="/services/category/list", method=RequestMethod.GET)
public @ResponseBody String listCategory() {
return "Hello, World";
// TODO: modify this method to make a DAO call and return a list of categories
}
但我所有的页面都带有“#!”突然转到 404,因为周围没有控制器方法来为它们服务,也不应该有。
我认为如果我在所有服务调用 url 前加上“/services/”(如上所示),那么我也许可以修改我的 web.xml(带和不带 *)
<servlet-mapping>
<servlet-name>MyApp</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
同样,我更改了@RequestMapping 注释以包含和删除“/services”部分。不好 - 我可以再次查看我的页面,但服务调用 404。甚至从未调用控制器方法。我还注意到一些在服务方法调用结束时添加“.do”的示例,并制作上述<url-pattern>*.do</url-pattern>。这也失败了-http://localhost:8080/MyApp/services/category/list.do 给出 404,而
控制器方法永远不会被调用,即使在 @RequestMapping 值的末尾添加“.do”。
我在这里阅读了其他几个关于从<url-pattern> 中排除特定内容的问题,即带有“#!”的任何内容在里面,但答案都这么说
不可能。我还简单地尝试了一个使用 @RequestMapping(value="/#!/**") 的无操作方法,但它从未被调用(我怀疑它不起作用,但值得一试。)
我该如何解决这个问题?
【问题讨论】:
-
答案在这里:forum.spring.io/forum/spring-projects/web/…,通过这个问题及其答案得出:stackoverflow.com/q/11692837/241291。随意关闭重复。
标签: angularjs spring spring-mvc angular-routing