首先,一点背景:
的web.xml:
我将所有/ app / *请求与我的调度员匹配:
<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>/app/*</url-pattern>
</servlet-mapping>
我的问题,为什么在返回String时调用/ app / import / view有效:
控制器:
public class ImportController extends MultiActionController {
public String view(HttpServletRequest request, HttpServletResponse response) throws Exception
return "importer.home";
}
但不是在返回ModelAndView时:
public class ImportController extends MultiActionController {
public ModelAndView view(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("importer.home");
mav.addObject(new ExlFile());
return mav;
}
如果我们使用ModelAndView,是否有不同的命名约定?
答案 0 :(得分:2)
您正在使用MultiActionController
,它对方法命名约定和签名有非常严格的约束。
但是,您根本不应该使用MultiActionController
,它已过时且已弃用。按照Spring手册中的说明编写控制器,即使用@Controller
和@RequestMapping
,然后您可以获得更灵活的方法签名。
答案 1 :(得分:2)
如果您使用的是spring 3.0,那么我更喜欢使用注释。
@Controller
@RequestMapping(value = "/app")
public class ImportController {
@RequestMapping(value="/importer/home")
public ModelAndView view(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("importer.home");
mav.addObject(new ExlFile());
return mav;
}