今天我们来讲解一下Springmvc执行流程中的处理器这一部分。
首先,先说一下前面我们在自定义我们的处理器的时候实现的是Controller这个接口,其实处理器除了 实现Controller接口外,还可以实现或者继承其他的类来完成一些特殊的功能。
public class MyController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView model = new ModelAndView();
// 设置携带的属性
model.addObject("message", "Hello SpringMVC Word!");
model.setViewName("/WEB-INF/jsp/index.jsp");
return model;
}
}
首先这是我们第一个SpringMVC项目中的代码,我们的处理器实现了Controller这个接口,通过设置setViewName方法完成了页面的跳转。相应的可以帮助我们完成自定义处理器的类或者接口还有:HttpRequestHander 接口、AbstractController类、MultiActionController类。为了实现不同的功能可以进行选择,接下来我们逐一进行讲解。
一、 HttpRequestHander 接口
public class MyRequestHandler implements HttpRequestHandler{
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("message", "Hello SpringMVC Word!");
request.getRequestDispatcher("/WEB-INF/jsp/res.jsp").forward(request, response);
}
}
我们这里通过设置request的setAttribute方法 和转发来同样实现我们Controller的功能本质上是一样的。
二、AbstractController类
接下来我们看一下AbstractController类 打开源码我们可以看到该类继承自WebContentGenerator 这个类,并实现了Controller这个接口,该类是WebContentGenerator的子类,而WebContentGenerator类具有supportedMethods属性,可以设置支持的http数据提交的方式,默认为get、post。