【发布时间】:2014-12-10 02:50:30
【问题描述】:
我正在编写 spring mvc 应用程序。
在我的应用程序中,我有网页以及其他 Web 服务来处理 ajax 调用。
我已经在 web.xml 中完成了下面的条目
<servlet>
<servlet-name>myapp</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring_myapp-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myapp</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
我是否应该使用相同的 servlet 映射我的 rest url
<servlet-mapping>
<servlet-name>myapp</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
或者我应该为休息创建新的 servlet 条目。
我已经在 pom.xml 中为“org.codehaus.jackson”完成了必需的条目,并且我已经在我的 spring_myapp-servlet.xml 中做了必需的条目。
对于 html 页面,我在控制器中使用以下代码
@RequestMapping(value = "/htmlUrl")
public ModelAndView ModifyValiodation(HttpServletRequest request) {
// my code
}
我正在使用的休息服务
@RequestMapping(value = "/restUrl")
public @ResponseBody Map<String, String> restUrl(HttpServletRequest request) {
// my code
}
如果我只使用一个 servlet 进行两个 url 映射,则总共会生成 4 个 url。
- myapp/htmlUrl.html
- myapp/restUrl.html
- myapp/rest/htmlUrl
- myapp/rest/restUrl
如果我将两个不同的 servlet 与单独的 dispacherServlet 一起使用,那么我是否必须在 servlet.xml 中输入 spring 的每个组件和服务?
请指出暴露REST Web服务的解决方案。
谢谢!
【问题讨论】:
-
不,你不需要,不,你不需要复制任何东西。如果您想让 2 个 servlet 将公共内容迁移到由
ContextLoaderListener加载的通用应用程序上下文,那么它就是在所有DispatcherServlets之间共享的父上下文。虽然您可以使用 2 个 servlet,但您也可以简单地将控制器映射到/rest/restUrl。 -
调度程序期望映射到
/。其他的都是针对特殊情况的。您应该将调度程序映射到/并让它处理所有 请求。另外,停止使用 XML;如果您只是在学习 Spring,那么没有理由学习过时的信息。使用现代 Java,您还可以取消web.xml。 -
感谢您的回复。因为我想将 .html 附加到我的 url,所以我已将其映射到 *.html。春天有什么办法可以附加.html,这样我就可以从web.xml映射中删除它。
-
@BoristheSpider 你能给我一些关于如何使用 web.xml 而不是使用 xml 的更多信息
-
@M.Deinum 和 @BoristheSpider 感谢您的帮助。我从你的回答中得到了我的解决方案。现在我将
/用于DispatcherServlet,在控制器中我使用/rest/restUrl。非常感谢,我已经花了很长时间来搜索它。 @BoristheSpider,如果你能提供一些关于如何使用 web.xml 而不是使用 xml 的链接或信息,那就太好了
标签: java spring rest servlets web.xml