SpringMVC 另一种基于xml的处理器、适配器(了解)

>另一种处理器映射器:SimpleUrlHandlerMapping

之前的beanNameHandlerMapping,是根据handler的bean标签的name属性,作为访问的url;

SpringMVC还提供了另外一个非注解的处理器映射器SimpleUrlHandlerMapping,这个映射器可以实现对bean

的url的集中管理,首先配置一个handler Bean通过bean ID与property元素中的prop子元素关联,key属性配置的是访问的业务的url,prop元素内容为bean ID,表示当访问到/queryItem1.action业务时,SpringMVC通过映射器查询到itemListhandler,然后将它交由Handler适配器去执行。如下所示:

注意:对于SpringMVC来说,可以让多个处理器映射器共存,由前端控制器判断用户请求的url能让哪些映射器来处理,就让哪个正确的的映射器处理。

 >另一种处理器适配器:HttpRequestHandlerAdapter

补充:基本数据类型int 默认值为0; 引用数据类型默认值为null;

在上面的入门程序中,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter就是一个非注解的适配器。此适配器要求所有的Handler处理器必须实现Controller接口。使用方式参考入门程序。

org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter是SpringMVC提供的另外一种非注解的处理器适配器,配置如下图所示(同时配置多种适配器是可以的,因为程序可能有多种handler):

查看该类的原码如下:

此适配器要求Handler处理器必须实现HttpRequestHandler接口,测试类如下所示:

通过上面测试类的编写,大家会发现这种编程非常类似JSP、Servlet中Servlet的代码编写。大家可能会认为这种方式不如上面实现Controller接口的handler更加直观。但是这种方式却比较灵活,因为实现Controller接口的handler返回值就是一个ModelAndView对象,如果需要服务器端响应后,返回json格式的数据,返回image对象数据,它就不能实现。而使用第二种方式,可以通过修改response对象,设置响应格式,所以在开发时可根据需要实现不同类型的handler。

总结:在SpringMVC中多个处理器映射器、适配器是可以共存的。通过用户访问的url路径映射到一个具体的handler对象后,SpringMVC来确定此handler的类型来决定此Handler应该交由哪种适配器去调用执行。

注意:如果在springmvc.xml文件即使不配置处理器映射器、处理器适配器,程序仍然可以正常执行,原因如下:在前端控制器DispatcherServlet所在的包org.springframework.web.servlet下包含一个DispatcherServlet.properites属性文件,在该文件中配置了大量的处理器映射器、处理器适配器、视图解析器等组件,如果在springmvc.xml配置文件中没有配置映射器、适配器,那么SpringMVC就使用该属性文件中默认配置的组件。

猜你喜欢

转载自blog.csdn.net/AhaQianxun/article/details/94591006