Я использую Spring 3 и пытаюсь настроить простое веб-приложение, используя аннотации для определения отображений контроллера. Это кажется невероятно трудным без добавления всех URL-адресов с помощью * .form или * .do
.
Поскольку часть сайта должна быть защищена паролем, все эти URL-адреса находятся в папке / secure. В файле web.xml есть <security-constraint>
, защищающий все под этим корнем. Я хочу отобразить все контроллеры Spring в / secure / app /.
Примеры URL будут:
/ Обеспечения / приложение / LandingPage
/ Безопасный / приложение / редактировать / клиент / {идентификатор}
каждый из которых я бы обработал с соответствующим jsp / xml / чем угодно.
Итак, в web.xml у меня есть это:
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/secure/app/*</url-pattern>
</servlet-mapping>
И в despatcher-servlet.xml у меня есть это:
<context:component-scan base-package="controller" />
В пакете Controller у меня есть класс контроллера:
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
@Controller
@RequestMapping("/secure/app/main")
public class HomePageController {
public HomePageController() { }
@RequestMapping(method = RequestMethod.GET)
public ModelAndView getPage(HttpServletRequest request)
{
ModelAndView mav = new ModelAndView();
mav.setViewName("main");
return mav;
}
}
В / WEB-INF / jsp у меня есть "main.jsp", и для этого указывается подходящий преобразователь вида. У меня все работало при отображении диспетчера с использованием * .form, но я не могу заставить что-либо работать с использованием приведенного выше кода.
Когда запускается Spring, кажется, что все отображается правильно:
13:22:36,762 INFO main annotation.DefaultAnnotationHandlerMapping:399 - Mapped URL path [/secure/app/main] onto handler [controller.HomePageController@2a8ab08f]
Я также заметил эту строку, которая выглядела подозрительно:
13:25:49,578 DEBUG main servlet.DispatcherServlet:443 - No HandlerMappings found in servlet 'dispatcher': using default
И во время выполнения любая попытка просмотра / secure / app / main просто возвращает ошибку 404 в Tomcat с таким выводом журнала:
13:25:53,382 DEBUG http-8080-1 servlet.DispatcherServlet:842 - DispatcherServlet with name 'dispatcher' determining Last-Modified value for [/secure/app/main]
13:25:53,383 DEBUG http-8080-1 servlet.DispatcherServlet:850 - No handler found in getLastModified
13:25:53,390 DEBUG http-8080-1 servlet.DispatcherServlet:690 - DispatcherServlet with name 'dispatcher' processing GET request for [/secure/app/main]
13:25:53,393 WARN http-8080-1 servlet.PageNotFound:962 - No mapping found for HTTP request with URI [/secure/app/main] in DispatcherServlet with name 'dispatcher'
13:25:53,393 DEBUG http-8080-1 servlet.DispatcherServlet:677 - Successfully completed request
Итак ... Spring сопоставляет URL, а затем "забывает" об этом сопоставлении через секунду? Что происходит?
Спасибо.