Springmvc 的HandlerMapping(处理器映射器)

本文深入解析 Spring MVC 中用于处理 URL 请求的映射器,包括 BeanNameUrlHandlerMapping、SimpleUrlHandlerMapping 和 RequestMappingHandlerMapping 的工作原理与配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DispatchServlet (前端控制器)拦截用户输入的URL,然后就会去找处理器映射器(根据是否实现了HandlerMapping接口去识别是不是映射器),而映射器会帮助找到用户请求的handler(Controller)

一、BeanNameUrlHandlerMapping

这个映射器的映射规则是,让DispatchServlet找bean的name与URL相对应的handler
在springmvc.xml文件中配置
http://localhost:8080/springmvc1110/itemList.action

<bean id="itemController1" name="/itemList.action"
		class="cn.itcast.springmvc.first.ItemController1" />
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

二、SimpleUrlHandlerMapping

这个映射器的规则是,让DispatchServlet去找bean的id与URL相对应的handler
在springmvc.xml文件中配置
http://localhost:8080/springmvc1110/itemsTest1.action

<bean id="itemController1" name="/itemList.action"
		class="cn.itcast.springmvc.first.ItemController1" />
<bean id="itemController2" class="cn.itcast.springmvc.first.ItemController2"></bean>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/itemsTest1.action">itemController1</prop>
				<prop key="/itemsTest2.action">itemController2</prop>
			</props>
		</property>
	</bean>

三、RequestMappingHandlerMapping

这个映射器主要是在Controller类中配置
首先在springmvc中配置(注解映射器应该和注解适配器成对使用)

<!-- 注解处理器映射器 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 注解适配器 -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" 

在control中应该配置

public class ItemController3 {
	//商品列表,@RequestMapping中url建议和方法名一致,方便开发维护
	@RequestMapping("/queryItems")
	public ModelAndView queryItems(){
		
		// 使用静态数据将商品信息列表显示在jsp页面
		// 商品列表
		List<Items> itemsList = new ArrayList<Items>();

		Items items_1 = new Items();
		items_1.setName("联想笔记本");
		items_1.setPrice(6000f);
		items_1.setCreatetime(new Date());
		items_1.setDetail("ThinkPad T430 联想笔记本电脑!");

		Items items_2 = new Items();
		items_2.setName("苹果手机");
		items_2.setPrice(5000f);
		items_2.setDetail("iphone6苹果手机!");

		itemsList.add(items_1);
		itemsList.add(items_2);
		
		ModelAndView modelAndView = new ModelAndView();
		modelAndView.addObject("itemsList", itemsList);
		//指定逻辑视图名
		modelAndView.setViewName("itemsList");

		return modelAndView;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值