我正在使用 Spring 3,并尝试使用注释来定义控制器映射来设置一个简单的 Web 应用程序。如果不使用 *.form 或 *.do 填充所有网址,这似乎非常困难
由于网站的部分内容需要密码保护,因此这些网址均位于 /secure 下。有一个<security-constraint>
在 web.xml 中保护该根目录下的所有内容。我想将所有 Spring 控制器映射到 /secure/app/。
示例 URL 为:
/安全/应用程序/登陆页面
/secure/app/edit/customer/{id}
我将使用适当的 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" />
在控制器包中我有一个控制器类:
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 的尝试都会在 Tomcat 中返回 404 错误,日志输出如下:
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,然后在一秒钟后“忘记”了该映射?到底是怎么回事?
Thanks.