2012-01-24 3 views
0

Я использую весенний mvc. У меня есть 3 страниц моего сайта (на самом деле контроллер обработки этих запросов):spring mvc url форматирование

localhost/post.html 
localhost/search.html 
localhost/list.html 

Я хотел бы URL, чтобы быть localhost/XXX/post.html где XXX является параметром, который будет transffered в качестве параметра метода контроллера. Например, если пользователь запрашивает localhost/bla/post.html, тогда метод контроллера /post получит в качестве параметра bla.

Возможно ли это весной mvc?

ответ

1

Да, и довольно легко сделать. При определении отображения для URL обработчика вы можете поместить переменную в путь, как это:

@RequestMapping("/{blah}/post.html") 
public ModelAndView handleRequest(@PathVariable("blah") String blah) { 
    // 
} 

Spring установит значение строки для вас, когда вызывается метод.

(Хотя это и не является абсолютно необходимым, также нормально иметь подкаталог сервлетов диспетчера в ваших путях. Отображение диспетчера в корневой каталог может быть больно. Например, загружает статический доступ к ресурсам, например, localhost/MyApp/бла/post.html)

+0

Спасибо. Я не понял вашу последнюю рекомендацию о сервлете диспетчера. Я не хочу, чтобы пользователи моего сайта занимались серфингом в домене/myapp/post.html. Я бы хотел, чтобы они занимались серфингом domain/post.html (или domain/XXX/post.html) – Naor

+0

в web.xml, избегая сопоставления org.springframework.web.servlet.DispatcherServlet в/*. Все будет проще, поскольку приложение будет расти, если вы нарисуете его на уровне до/app/* или что-то в этом роде. Apache или IIS на интерфейсе могут переписывать довольно общедоступные URL-адреса во что угодно. – Affe

+0

Но тогда пользователь должен ввести domain/app/post.html вместо домена/post.html. – Naor

0

Это легко можно сделать с помощью аннотаций:

@Controller 
public class MyController 
{ 

    @RequestMapping(value = "/{id}/post", method = RequestMethod.POST) 
    public String post(@PathVariable("id") String id) 
    { 
    } 

    @RequestMapping(value = "/{id}/search", method = RequestMethod.GET) 
    public String search(@PathVariable("id") String id) 
    { 
    } 

    @RequestMapping(value = "/{id}/list", method = RequestMethod.GET) 
    public String list(@PathVariable("id") String id) 
    { 
    } 

} 
Смежные вопросы