您的位置:首页 > 编程语言 > Java开发

springMVC注解驱动

2016-01-12 17:10 501 查看
今天又详细学习一下springMVC

springMVC简介

大部分java应用都是web应用,展现层是web应用最为重要的部分。Spring为展现层提供了一个优秀的web框架——Spring MVC。和众多其他web框架一样,它基于MVC的设计理念,此外,它采用了松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵活性。

SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,无需实现任何接口,同时,SpringMVC还支持REST风格的URL请求。

此外,SpringMVC在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现。

它在框架设计、扩展性、灵活性等方面全面超越了Struts、WebWork等MVC框架,从原来的追赶者一跃成为MVC的领跑者。

SpringMVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet是SpringMVC框架的总导演、总策划,它负责截获请求并将其分派给相应的处理器处理。

springMVC的整体架构

如图所示:



1、 用户发起请求到前端控制器(DispatcherServlet),前端控制器没有能力处理业务逻辑;

2、 通过HandlerMapping查找模型(Controller、Handler);

3、 返回执行链,执行链包含了2部分内容,Handler对象以及拦截器(组);

4、 通过HandlerAdapter执行模型(Handler)

5、 适配器调用Handler对象处理业务逻辑;

6、 模型处理完业务逻辑,返回ModelAndView对象,view不是真正的视图对象,而是视图名称;

7、 将ModelAndView对象返回给前端控制器;

8、 前端控制器通过视图名称经过视图解析器查找视图对象;

9、 返回视图对象;

10、前端控制器渲染视图;

11、返回给前端控制器;

12、前端控制器将视图(html、json、xml、Excel)返回给用户;

本文重点

这里主要想说的是mvc的注解驱动

web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="MyWebApp" version="2.5">
<display-name>springmvc</display-name>

<!-- springmvc 入口 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 启动顺序 -->
<load-on-startup>1</load-on-startup>
<!-- 默认查找配置文件规则  /WEB-INF/servletName-servlet.xml -->
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 所有请求以*.do会进入MVC框架 -->
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

</web-app>


下面是springmvc的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 
<!-- 注册HandlerMapping -->
<!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> -->

<!-- 注册简单适配器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> -->

<!-- 推荐使用的注解的HandlerMapping -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->

<!-- 推荐使用的注解适配器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->

<!-- mvc的注解驱动 -->
<mvc:annotation-driven/>
<!-- 扫描包,使@Controller生效 -->
<context:component-scan base-package="cn.vincce.springmvc.controller"/>

<!-- 自定义Handler -->
<!-- <bean name="/hello.do" class="cn.vincce.springmvc.controller.HelloController"/> -->

<!-- prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" -> "/WEB-INF/jsp/test.jsp"  -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/WEB-INF/views/"/>
<!-- 后缀 -->
<property name="suffix" value=".jsp"/>
</bean>

</beans>


根据上面springmvc的整体架构,做上面的相关配置,这一块儿的配置根据源码

   <!-- 推荐使用的注解的HandlerMapping -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->

<!-- 推荐使用的注解适配器 -->
<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->


可以用

<!-- mvc的注解驱动 -->

<mvc:annotation-driven/>


代替,项目启动时打印的日志信息:红色标记

2016-01-12 16:57:09,250 [localhost-startStop-1] [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]-[DEBUG] Looking for request mappings in application context: WebApplicationContext for namespace 'springmvc-servlet': startup date [Tue Jan 12 16:57:08 CST 2016]; root of context hierarchy
2016-01-12 16:57:09,277 [localhost-startStop-1] [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping]-[INFO] Mapped "{[/test/mv],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.web.servlet.ModelAndView com.vincce.study.controller.TestController.page()


为什么mvc的注解驱动可以替代HandleMapping和HandleAdapter这两个的配置?

查看源码:



有点豁然开朗。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: