SpringMVC环境搭建

来源:互联网 发布:linux chkconfig命令 编辑:程序博客网 时间:2024/05/16 01:26

随着Annotation的流行,一些主流框架都加入了对Annotation的支持。使用Annotation能够简化很多配置工作,能够很大程度上提高程序开发的效率。下面主要讲解Sping MVC 注解功能,介绍如何使用注解配置替换传统的基于 XML 的 Spring MVC 配置。 

SpringMVC model类似于Struts。在多线程服务对象这点上,Spring的Controller类似于Struts Action,只有一个实例处理所有客户的请求。然而,我们相信Spring的MVC比起Struts有很多优点,例如: Spring在controllers,JavaBean,models和views提供了一个非常清晰的划分。

Spring 的MVC是非常灵活的。不像Struts,它强制你的Action和Form对象进入固化的层次之中(因而迫使你使用Java的实体承), Spring MVC完全是基于接口的。而且,通过插入你自己的接口几乎Spring MVC 框架的所有部分都是可配置的。

 

基于注解的Controller 是如何定义做到这一点的

package xxx.user.web;  …………………………  @Controller // <——①      @RequestMapping("/user.html") //<——②  public class UserController {      private String showListUserPage = "user/listUser";       ………………………………………      @Resource // <——③      private UserManager userManger;        @"RequestMapping(“/work/staff/addStaff.do”) //<——④      public String listUser(ModelMap model) {          String roleMapJSON = UserConstants.getRoleMapJSON();          model.addAttribute("roleMapJSON", roleMapJSON);          return showListUserPage;      }      ………………………  }  



①@Controller注解标明该类需要Spring容器自动加载,将一个类成为 Spring 容器的 Bean。 
②: @RequestMapping 这个注解使得该类具有了Spring MVC Controller 的功能。 
@RequestMapping注解标识UserController处理来自/user.html的请求。 
@RequestMapping 可以标注在类定义处,将 Controller 和特定请求关联起来;还可以标注在方法签名处(注解4后面详细介绍)。所以在类声明处标注的 @RequestMapping 相当于让 POJO 实现了 Controller 接口,而在方法定义处的 @RequestMapping 相当于让 POJO 扩展 Spring 预定义的 Controller(如 SimpleFormController 等)。 
③:注解方式注入 UserManager 
④: 此处又用了一个@RequestMapping注解,这里的这个注解是为了细粒度区分各个Controller方法,也就是说 listUser 这个方法来处理 /work/staff/addStaff.do的请求

 

此外,我们注意到此处返回值是一个String类型,Spring MVC会认为这是你告诉他返回的视图名称,当然此处你也可以返回一个ModelAndView类型,假若你什么也不返回-void,那么Spring会试图查找和你的请求URL同名的视图进行匹配(与配置文件相关)。 

 

启用Spring MVC 功能

web.xml 

Xml代码 

……………………….  

<!-- Spring MVC的Servlet,它将加载WEB-INF/annomvc-servlet.xml的配置文件,以启动Spring MVC模块 -->  

<servlet>     <servlet-name>spring</servlet-name>     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>      <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>/WEB-INF/spring-servlet.xml</param-value>   </init-param>     <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping>     <servlet-name>spring</servlet-name>    <url-pattern>/</url-pattern> </servlet-mapping>


 

启用Spring MVC 注解功能

 

web.xml 中定义了一个名为 spring的 Spring MVC 模块,按照 Spring MVC 的契约,需要在 WEB-INF/spring-servlet.xml 配置文件中定义 Spring MVC 模块的具体配置。 

Spring MVC 会自动加载 spring-servlet.xml 配置文件,要使用注解功能,主要对其进行配置。 

 

<?xml version="1.0" encoding= "UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xmlns:context="http://www.springframework.org/schema/context"      xmlns:mvc="http://www.springframework.org/schema/mvc"      xsi:schemaLocation="http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd           http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd           http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.0.xsd">   <mvc:annotation-driven/>  <context:component-scanbase-package="com.tgb.SpringMVC1"/>    <beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">     <propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/>     <propertyname="prefix" value="/"></property>     <propertyname="suffix" value=".jsp"></property>   </bean>    </beans>


图解


HandlerMapping

DispatcherServlet要将一个请求交给哪个特定的Controller,它需要咨询一个Bean——这个Bean的名字为“HandlerMapping”。

HandlerMapping是把一个URL指定到一个Controller上,(就像应用系统的web.xml文件使用<servlet-mapping>将URL映射到servlet)。

Spring带有三种HandlerMapping,(SpringMVC中的所有HandlerMapping都实现了接口org.springframework.web.servlet. HandlerMapping)。

 

ViewResolver

在Spring MVC中,当Controller将请求处理结果放入到ModelAndView中以后,DispatcherServlet会根据ModelAndView选择合适的视图进行渲染。那么在Spring MVC中是如何选择合适的View呢?View对象是是如何创建的呢?答案就在ViewResolver中,ViewResolver接口定义了resolverViewName方法,根据viewName创建合适类型的View实现。

<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">

     <propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/>

     <propertyname="prefix" value="/"></property>

     <propertyname="suffix" value=".jsp"></property>

   </bean>


Handleradapter 

Spring MVC通过HandlerAdapter来实际调用处理函数。 
以AnnotationMethodHandlerAdapter为例 
DispatcherServlet中根据handlermapping找到对应的handler method后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。通过调用handlerAdapter中的handle方法来处理及准备handler method中的参数及annotation(这就是spring mvc如何将reqeust中的参数变成handle method中的输入参数的地方),最终调用实际的handle method。


原创粉丝点击