1、默认加载组件
我们不用配置组件也可以使用,因为SpringMVC配置了默认的组件,配置文件位置:
文件内容:
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
简单解释:
LocaleResolver:识别服务器在哪个国家
ThemeResolver:校验拦截不合法的字符
HandlerMapping:处理器映射器配置
BeanNameUrlHandlerMapping:配置式
DefaultAnnotationHandlerMapping:注解式,如果controller中使用了@RequestMapping(value=”/WEB-INF/hello.jsp”注解,就默认使用该处理器映射器
HandlerAdapter:处理器适配器
HttpRequestHandlerAdapter:controller实现HttpRequestHandler接口时使用
ResponseStatusExceptionResolver:controller实现Controller接口时使用
DefaultHandlerExceptionResolver:如果controller中使用了@controller时使用
ViewResolver:InternalResourceViewResolver(jsp视图解析器)
2、配置处理器映射器HandlerMapping
注解式处理器映射器,对类中标记了@ResquestMapping的方法进行映射。根据@ResquestMapping定义的url匹配@ResquestMapping标记的方法,匹配成功返回HandlerMethod对象给前端控制器。
HandlerMethod对象中封装url对应的方法Method。
从spring3.1版本开始,废除了DefaultAnnotationHandlerMapping的使用,推荐使用RequestMappingHandlerMapping完成注解式处理器映射。
打开DefaultAnnotationHandlerMapping源码即可看到:
在springmvc.xml中配置:
<!-- 处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
3、配置处理器适配器HandlerAdapter
注解式处理器适配器,对标记@ResquestMapping的方法进行适配。
从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用RequestMappingHandlerAdapter完成注解式处理器适配。
打开RequestMappingHandlerAdapter源码可以看到:
在springmvc.xml中配置:
<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
4、注解驱动
直接配置处理器映射器和处理器适配器比较麻烦,可以使用注解驱动来加载。
SpringMVC使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter
可以在springmvc.xml配置文件中使用<mvc:annotation-driven>替代注解处理器和适配器的配置。
<!-- 注解驱动 -->
<mvc:annotation-driven />
5、配置视图解析器ViewResolver
视图解析器使用SpringMVC框架默认的InternalResourceViewResolver,这个视图解析器支持JSP视图解析
在springmvc.xml中配置:
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置逻辑视图前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"></property>
<!-- 配置逻辑视图后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
controller:
@Controller
public class ItemController {
@RequestMapping(value = "/item/itemlist.action")
public ModelAndView itemlist() {
//准备数据(模拟从数据库中查到)
List<Items> list = new ArrayList<Items>();
list.add(new Items(1, "1华为 荣耀8", 2399f, new Date(), "质量好!1"));
list.add(new Items(2, "2华为 荣耀8", 2399f, new Date(), "质量好!2"));
list.add(new Items(3, "3华为 荣耀8", 2399f, new Date(), "质量好!3"));
list.add(new Items(4, "4华为 荣耀8", 2399f, new Date(), "质量好!4"));
list.add(new Items(5, "5华为 荣耀8", 2399f, new Date(), "质量好!5"));
list.add(new Items(6, "6华为 荣耀8", 2399f, new Date(), "质量好!6"));
//该对象用来存放数据和视图
ModelAndView mav = new ModelAndView();
//设置跳转的视图
mav.setViewName("itemList");
//设置保存的数据
mav.addObject("itemList", list);
return mav;
}
}
mav.setViewName("itemList");中路径就可以省略前缀:/WEB-INF/jsp和后缀.jsp
@RequestMapping(value = "/item/itemlist.action")中的.action可以省略,因为进入前端控制器后只比对路径,不会比对后缀,但是请求路径中的.action不能省,省略后前端控制器不拦截。