Проблема с шаблоном Spring MVC URI - PullRequest
2 голосов
/ 14 ноября 2010

В Spring MVC 3 на Tomcat 6 я не могу заставить работать RequestMappings вида / x / y / z./ x / y, кажется, работает нормально, и это то, что показывают все примеры в документации.

Например, почему это работает

@RequestMapping(value="/browse/{categoryName}"); 

, но это не работает:

@RequestMapping(value="/browse/category/{categoryName}");

При просмотре http://localhost:8080/myapp/browse/category/books генерируется HTTP 404 от Tomcat.Метод выглядит следующим образом:

@Controller
public class BrowseController {
    @RequestMapping(value = "/browse/category/{categoryName}", method = RequestMethod.GET)
    public String showCategory(@PathVariable("categoryName") String categoryName, Model model) {
        model.addAttribute("categoryName", categoryName);
        return "Browse";
    }
}

Я вижу это сообщение в окне вывода Tomcat в Netbeans 6.9:

Nov 14, 2010 2:02:03 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/myapp/browse/category/model] in DispatcherServlet with name 'dispatcher'

РЕДАКТИРОВАТЬ: добавлена ​​дополнительная информация трассировки из журнала.Пожалуйста, не обращайте внимания на временные метки, поскольку эти вопросы редактировались в течение двух дней.

После развертывания приложения:

Nov 15, 2010 9:33:28 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing WebApplicationContext for namespace 'dispatcher-servlet': startup date [Mon Nov 15 21:33:28 EST 2010]; parent: Root WebApplicationContext
Nov 15, 2010 9:33:28 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
Nov 15, 2010 9:33:29 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@143c423: defining beans [browseController,homeController,showController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping#0,viewResolver]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@1ea763a
Nov 15, 2010 9:33:29 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/browse] onto handler 'browseController'
Nov 15, 2010 9:33:29 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/browse/*] onto handler 'browseController'
Nov 15, 2010 9:33:29 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/home] onto handler 'homeController'
Nov 15, 2010 9:33:29 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/home/*] onto handler 'homeController'
Nov 15, 2010 9:33:29 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/show] onto handler 'showController'
Nov 15, 2010 9:33:29 PM org.springframework.web.servlet.handler.AbstractUrlHandlerMapping registerHandler
INFO: Mapped URL path [/show/*] onto handler 'showController'
Nov 15, 2010 9:33:29 PM org.springframework.web.servlet.FrameworkServlet initServletBean
INFO: FrameworkServlet 'dispatcher': initialization completed in 501 ms

Когда я позвонил http://localhost:8080/myapp/browse/category/model,

Nov 15, 2010 9:34:28 PM org.springframework.web.servlet.DispatcherServlet noHandlerFound
WARNING: No mapping found for HTTP request with URI [/myapp/browse/category/model] in DispatcherServlet with name 'dispatcher'

А вот мой конфиг диспетчера web.xml:

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

Так есть ли причины, по которым шаблон URI работает, а другой - нет?

Ответы [ 3 ]

1 голос
/ 15 ноября 2010

Вы можете добавить отображение запроса для контроллера просмотра.Попробуйте это

@Controller
@RequestMapping("/browse")
public class BrowseController
{
    @RequestMapping(value = "/category/{categoryName}", method = RequestMethod.GET)
    public String showCategory(@PathVariable("categoryName") String categoryName, Model model)
    { 
        model.addAttribute("categoryName", categoryName);
        return "Browse";
    }
}
1 голос
/ 16 ноября 2010

Исправлена ​​проблема в другом потоке: spring-mvc: как отобразить шаблоны URI в форме "a / b / {c}"?

0 голосов
/ 15 ноября 2010

Ваш шаблон URL должен быть / * в отображении сервлета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...