处理器适配器
要清晰的认识SpringMVC的处理器适配器,就先必须知道适配器以及它的作用。我们先通过下图,直观的了解一下:
从上图就可以看出来 网线的插口,HDMI口和鼠标、键盘这些可以看成我们的Controller控制器,而USB接口可以看成适配器,因为电脑上面USB接口比较通用。在springmvc中可以看出来可以把所有不同的控制器,最终都可以看成是适配器类型,从而执行适配器中定义的方法。更深层次的是,可以把公共的方法都定义在适配器中,从而减少每种控制器的中都有的重复性代码。
其实Springmvc中的适配器也是多种的。
- SimpleControllerHandlerAdapter(使用此适配器,适用的控制器写法:要求实现Controller接口)
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test01Controller implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){
ModelAndView mv=new ModelAndView();
mv.setViewName("success1");
return mv;
}
}
同时要在SpringMvc.xml配置文件中添加以下信息
<!--实现了Controller接口-->
<bean id="simpleControllerHandlerAdapter" class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<bean name="/test01say" class="com.bigface.controller.Test01Controller"></bean>
</beans>
- HttpRequestHandlerAdapter(实现了HttpRequestHandler接口)
import org.springframework.web.HttpRequestHandler;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 第二种方式实现HttpRequestHandler接口
* */
public class Test02Controller implements HttpRequestHandler {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/pages/success2").forward(request,response);
}
}
在Springmvc.xml增加以下配置
<!--实现了HttpRequestHandler接口-->
<bean name="/test02" class="com.bigface.controller.Test02Controller"></bean>
<bean id="httpRequestHandlerAdapter" class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
- AnnotationMethodHandlerAdapter(这种方式也是我们实际开发中采用最多的。它的要求是我们用注解@Controller配置控制器)
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController {
@RequestMapping("/hello")
public String test01(){
System.out.println("test01执行了");
return "success";
}
}
在Springmvc.xml增加以下配置
<bean id="requestMappingHandlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<!--通常我们使用以下注解替代上面的配置-->
<mvc:annotation-driven></mvc:annotation-driven>