spring3引入了 mvc XML 配置命名空间, 简化了在 web 应用程序中设置 Spring mvc 的过程。
1、mvc:annotation-driven
<mvc:annotation-driven /> 是一种简写形式,完全可以手动配置替代这种简写形式,简写形式可以让初学都快速应用默认配置方案。<mvc:annotation-driven /> 会自动注册DefaultAnnotationHandlerMapping与AnnotationMethodHandlerAdapter 两个bean,是spring MVC为@Controllers分发请求所必须的。并提供了:
- 支持使用 ConversionService 实例对表单参数进行类型转换
- 支持使用 @NumberFormat annotation、@DateTimeFormat
- 注解完成数据类型的格式化
- 支持使用 @Valid 注解对 JavaBean 实例进行 JSR 303 验证
- 支持使用 @RequestBody 和 @ResponseBody 注解
<mvc:annotation-driven ></mvc:annotation-driven>相当于如下配置。
<!--
<mvc:annotation-driven ></mvc:annotation-driven>
-->
<!-- 上面的标签相当于 如下配置-->
<!-- Begin -->
<!-- HandlerMapping -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping "></bean>
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!-- HandlerAdapter -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter "></bean>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- HadnlerExceptionResolvers -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver "></bean>
<bean class="org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver"></bean>
<bean class="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver"></bean>
<!-- End -->
总结:
前两个是
HandlerMapping
接口的实现类,用来处理请求映射的。其中第一个是处理@RequestMapping
注解的。第二个会将controller类的名字映射为请求url。
中间三个是用来处理请求的。确定调用哪个controller的哪个方法来处理当前请求。第一个处理@Controller
注解的处理器,支持自定义方法参数和返回值。第二个是处理继承HttpRequestHandler的处理器。第三个处理继承自Controller接口的处理器。
后面三个是用来处理异常的解析器。
<context:component-scan/>
标签是告诉Spring扫描指定包下的类,并注册被@Component
,@Controller
,@Service
,@Repository
等注解标记的组件。<mvc:annotation-scan/>
是告知Spring启用注解驱动。然后Spring会自动为我们注册上面说到的几个Bean到工厂中,来处理我们的请求。
2、mvc:view-controller
对应WEB-INF目录下面的JSP页面,我们知道是不能直接使用URL访问到。需要通过转发的方式,而我们一般都是在控制器中做转发映射,具体操作如下:
uccess.jsp页面的目录如下:
一般我们需要配置一个spring配置文件中配置一个视图解析器
1 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 2 <property name="prefix" value="/WEB-INF/"/> 3 <property name="suffix" value=".jsp"></property> 4 </bean>
然后在配置一个控制器
1 @Controller 2 public class UserController { 3 4 @RequestMapping("/toSuccess") 5 public String update(){ 6 return "success"; 7 } 8 9 }
这里使用http://localhost:8080/springmvcdemo/toSuccess 可以正确得到页面。
但是对应一些我们不需要其他操作的JSP页面,我们可以使用<mvc:view-controller path=""/>来配置,这样就可以不用再控制器中再去做转发映射。具体操作如下:
在springmvc配置文件中配置
1 <mvc:view-controller path="/login/success"/>
注意:path是JSP页面相对WEB-INF的路径
下面我们使用http://localhost:8080/springmvc-1/login/success来访问,同样可以得到正确页面。
现实开发中一定要开启<mvc:annotation-driven />注解。不然会报404。