Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Portlet与Servlet的DefaultAnnotationHandlerMapping_Spring Mvc - Fatal编程技术网

Spring mvc Portlet与Servlet的DefaultAnnotationHandlerMapping

Spring mvc Portlet与Servlet的DefaultAnnotationHandlerMapping,spring-mvc,Spring Mvc,我在Servlet环境中使用SpringMVC开发已有相当一段时间了,主要是在Spring3.1.x和3.2.x上,但最近我将工作转移到了一家使用Spring3.0.6的Portlet和Servlet混合使用的公司 首先,DefaultAnnotationHandlerMapping似乎有两个版本,一个用于,另一个用于。我对Portlet的有限知识使我相信它们只是Servlet的一个扩展,因此我可以模糊地理解需要有两个单独的HandlerMapping,一个用于处理泛型Servlet,另一个用于

我在Servlet环境中使用SpringMVC开发已有相当一段时间了,主要是在Spring3.1.x和3.2.x上,但最近我将工作转移到了一家使用Spring3.0.6的Portlet和Servlet混合使用的公司

首先,DefaultAnnotationHandlerMapping似乎有两个版本,一个用于,另一个用于。我对Portlet的有限知识使我相信它们只是Servlet的一个扩展,因此我可以模糊地理解需要有两个单独的HandlerMapping,一个用于处理泛型Servlet,另一个用于处理Portlet的细节。让我感到困惑的是,他们在Regards上的表现似乎各不相同,他们如何处理@RequestMapping注释,以及我的新雇主如何选择进行设置

在过去,我为整个应用程序使用了一个DispatchHandler。我知道您可以有多个DispatchHandler,但我从未看到过子上下文XML分离的好处。无论如何,在过去,我会将一个DispatchHandler映射到“/”,然后每个控制器使用@RequestMapping(“/someUrl”)在顶部设置一个映射,然后在每个处理程序方法上设置另一个@RequestMapping进一步扩展URL映射。因此,从浏览器中,我可以得到如下信息:

第一个“/myWar”映射到WAR部署,下一个“/myWar”映射到DispatchServlet,“/myController”是控制器的映射,之后的任何内容都使用URL签名、请求方法、参数等组合匹配到某个方法

现在让我们来评估一下我在新公司看到了什么。首先,每个控制器都有自己的DispatchServlet,因此定义了20-30个DispatchServlet,它们都映射了不同的基本URI,有些具有相同的基本应用程序上下文XML,有些具有不同的基本应用程序上下文XML,所有这些都使用来自ContextLoaderListener的相同应用程序上下文。随后的每个DispatchServlet的路径都与它们的“映射”控制器上的@RequestMapping相同,因此在上面的示例中,DispatchServlet将具有路径“/myController”,控制器将具有@RequestMapping(/myController”)。除此之外,在控制器的方法级别,@RequestMapping上指定的值似乎完全忽略了应用于它的任何附加路径

例如,如果我有一个带有@RequestMapping(“/myController”)的控制器,后跟一个带有@RequestMapping(“/edit”)的方法,点击URL就会得到一个404。但是,如果我将方法级别@RequestMapping更改为@RequestMapping(parameter=“actionMethod=edit”),并将URL更改为,那么它映射得很好,我就得到了我的页面。此外,如果我将方法级别@RequestMapping更改为@RequestMapping(value=“/edit”,params=“actionMethod=view”),则根本不起作用。问题是,现在要在方法级别获得除默认映射之外的任何内容,需要我使用“?actionMethod=edit”,而不是简单地使用添加的路径扩展URI。而且,它阻止我使用RESTful方法,因为现在我不能定义像@RequestMapping(“/somePath/{id}”)这样的东西

我脑子里有这么多困惑,比如为什么web.xml中的DispatchServlet映射与控制器@RequestMapping重叠,为什么当我将value属性设置为有效的URI映射时控制器方法级别的@RequestMapping不起作用,但当我设置一些参数映射时效果很好

哦,很抱歉发了这么长的帖子。我只是想更好地了解这里正在发生的事情,这样我就可以用明智的方法处理它,或者回到我的新团队,说“这应该改变,这就是原因”。如果有帮助的话,我可以用一些简化的代码示例来扩展这个冗长的问题