Однако, что мне не нравится, - это то, что URL, привязанный к действию, должен быть полностью указан в java-файле
Так что полагайтесь на ControllerClassNameHandlerMapping
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
Помните, что ControllerNameHandlerMapping удалить Суффикс контроллера , если он существует и вернуть оставшийся текст в нижнем регистре Если вы просто хотите, чтобы первая буква в нижнем регистре установите для свойства caseSensitive значение true
Предположим, здесь идет ваш контроллер
package br.com.ar.view.resources;
@Controller
public class UserController {
/**
* mapped To /user/form
*/
@RequestMapping(method=RequesMethod.GET)
public void form(Model model) {
model.add(categoryRepository().getCategoryList());
}
/**
* mapped To user/form
*/
@RequestMapping(method=RequesMethod.POST)
public void form(User user) {
userRepository.add(user);
}
}
Существует больше: если вы используете модульное приложение, вы можете положиться на свойство basePackage . Предположим, у вас есть модуль финансовых и человеческих ресурсов, например
br.com.ar.view.financial.AccountController;
br.com.ar.view.resources.ManagementController;
Вы определяете свой базовый пакет
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="basePackage" value="br.com.ar.view"/>
</bean>
Вы можете вызвать свой AccountController form метод как
/financial/account/form
И вы можете вызвать свой метод ManagementController form как
/resources/management/form
Поскольку я уверен, что вы используете соглашение TranslateToViewName по умолчанию для конфигурации, ваша структура каталогов должна выглядеть как
/WEB-INF
/view
/financial
/user
form.jsp
/resources
/management
form.jsp
Не забудьте определить свой InternalResourceViewResolver
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/view/"/>
<property name="suffix" value=".jsp"/>
</bean>
И, наконец, если ваш запрос не нуждается в контроллере . Нет проблем, определите ваше свойство defaultHandler
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="basePackage" value="br.com.ar.view"/>
<property name="caseSensitive" value="true"/>
<property name="defaultHandler">
<bean class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>
</property>
</bean>
Теперь, если вы вызываете, например, /index.htm (я полагаю, ваш DispatcherServlet перехватывает расширение htm) и у вас нет IndexController, Spring будет искать
/WEB-INF/view/index.jsp
Хорошо, нет ???