在springmvc3.1版本以前,
会默认加载一个注解映射器:org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
和一个注解适配器:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
在3.1版本之后,它们已经不被建议使用了。现在建议使用如下的注解映射器和适配器来代替它们:
mapping:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
adapter:org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
下面介绍下使用注解开发handler的步骤:
1、配置注解映射器
<!-- 注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
2、配置注解适配器
<!-- 注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
注意:该适配器不要求实现任何接口,但它需要与RequestMappingHandlerMapping注解映射器配对使用;
在handler中使用@Controller标识此类是一个handler控制器
使用@RequestMapping指定handler中的方法所对应的url
3、开发handler
package com.js.springmvc01;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.js.po.Items;
/**
* 第3个controller
* 适配:RequestMappingHandlerAdapter,注解方式开发
* 该适配器不要求实现任何接口
* 该适配器要求与RequestMappingHandlerMapping搭配使用
* 入门程序:商品列表的查询
* @author jiangs
*
*/
@Controller
public class ItemController03 {
/**
* @RequestMapping中的url我们建议和方法名一致,但这不是强制要求
* @param request
* @param response
* @return
*/
@RequestMapping("/query")
public ModelAndView queryItem(){
//使用静态数据把商品列表显示在jsp页面
List<Items> itemsList = new ArrayList<Items>();
Items items_1 = new Items();
items_1.setName("联想笔记本");
items_1.setPrice(6000f);
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("/WEB-INF/jsp/itemsList.jsp");
return modelAndView;
}
}
4、配置handler:
<bean class="com.js.springmvc01.ItemController03"/>
虽然在handler中配置的RequestMapping中路径为“/query”,但是由于我在web.xml中DispatcherServlet配置如下:
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
可以配置/,此工程所有的请求全部由springmvc解析,此种方式可以实现RESTful 方式,需要特殊处理静态文件的解析,不能由springmvc解析
可以配置*.do或*.action,所有请求的扩展名为.do或.action时,由springmvc来解析,此种方法常用
不可以配置/*,如果配置/*,返回jsp也由springmvc解析,会再次经过springmvc处理,这是不对的
-->
<url-pattern>*.action</url-pattern>
</servlet-mapping>
所以在浏览器中访问/query.action方可访问到结果。
另外,当大量使用注解方式开发handler时,建议使用如下的spring组件扫描来代替繁琐的手动配置handler:
<context:component-scan base-package="com.js.springmvc01"></context:component-scan>