首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring servlet映射,servlet 1有"/“,servlet 2有"/server/”吗?

Spring servlet映射,servlet 1有"/“,servlet 2有"/server/”吗?
EN

Stack Overflow用户
提问于 2013-03-19 09:12:40
回答 1查看 398关注 0票数 0

目前,我有以下web.xml配置:

代码语言:javascript
复制
<servlet>
    <servlet-name>Website</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Website</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Server</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Server</servlet-name>
    <url-pattern>/server/</url-pattern>
</servlet-mapping>

至于两个示例控制器:

代码语言:javascript
复制
@Controller
public class ApiRequests {
    protected final Logger logger = Logger.getLogger(ApiRequests.class);

    @RequestMapping(value = "api.json", produces = {"application/json"}, method = RequestMethod.GET)
    @ResponseBody
    public String handleActionJson(final HttpServletRequest request){
        return "{test: 'blaat'}";
    }
}

代码语言:javascript
复制
@Controller
@RequestMapping("/")
public class IndexController {
    @RequestMapping("*.html")
    public void showIndex(){

    }
}

现在我的问题是,当我试图调用/ server /api.json url时,服务器不会给出json响应,而是会给出以下错误:

代码语言:javascript
复制
PageNotFound:1108 - No mapping found for HTTP request with URI [/WorldDefense/server/api.json] in DispatcherServlet with name 'Website'

这基本上意味着它试图在网站servlet中搜索/ Server /api.json,而不是服务器服务器,至于我的问题:是否可以让这个设置工作呢?(So / Server /映射到servlet和所有其他url组合到网站servlet)

编辑1我更新了代码以反映Ciudatu建议的更改,但是它仍然不起作用。我删除了@RequestMapping("/server"),现在只在handleActionJson方法中使用@RequestMapping。这两种错误都会导致以下错误:

代码语言:javascript
复制
10:57:26,046  WARN PageNotFound:1108 - No mapping found for HTTP request with URI [/WorldDefense/server/server/api.json] in DispatcherServlet with name 'Website'
10:57:40,509  WARN PageNotFound:1108 - No mapping found for HTTP request with URI [/WorldDefense/server/api.json] in DispatcherServlet with name 'Website'

根据tomcat日志映射:

服务器-servlet

代码语言:javascript
复制
11:03:49,655  INFO RequestMappingHandlerMapping:178 - Mapped "{[/api.json],methods=[GET],params=[],headers=[],consumes=[],produces=[application/json],custom=[]}" onto public java.lang.String com.world2.worlddefense.server.controllers.ApiRequests.handleActionJson(javax.servlet.http.HttpServletRequest)
11:03:50,125  INFO RequestMappingHandlerMapping:178 - Mapped "{[/api.json],methods=[GET],params=[],headers=[],consumes=[],produces=[application/json],custom=[]}" onto public java.lang.String com.world2.worlddefense.server.controllers.ApiRequests.handleActionJson(javax.servlet.http.HttpServletRequest)

网站-servlet

代码语言:javascript
复制
11:03:50,380  INFO RequestMappingHandlerMapping:178 - Mapped "{[//*.html],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public void com.world2.worlddefense.website.controllers.IndexController.showIndex()
11:03:50,381  INFO RequestMappingHandlerMapping:178 - Mapped "{[/login],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.world2.worlddefense.website.controllers.TempTestController.showTest()
EN

回答 1

Stack Overflow用户

发布于 2013-03-19 09:39:43

您可以在同一个DispatcherServlet中定义多个web.xml,并根据需要映射它们。但是,servlet映射不应该反映在控制器的@RequestMapping中。您的控制器总是映射到相对于servlet映射的路径;在您的示例中,我认为如果您尝试/WorldDefence/server/server/api.json,您可以得到那个JSON响应。

如果希望将不同的控制器与两个dispatchers相关联,则只需确保在相应的应用程序上下文中加载适当的控制器:Website-servlet.xmlServer-servlet.xml,以防您坚持这个约定。

长话短说,您对ApiRequests的映射应该是'/',而不是'/server‘,该控制器只应该包含在“服务器”dispatcher上下文中。

另外,从3.2.x开始,.json扩展由ContentNegotiationManager处理,因此控制器应该返回由Spring机制透明地封送的某个域对象,从而能够毫不费力地生成JSON以外的媒体类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15495361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档