首页 > 技术文章 > spring学习笔记(4)--spring MVC(基础)

Nick- 2014-03-08 14:42 原文

目前,项目中在cms子系统中使用了spring MVC,以前没接触过,所以现在从入门开始学习一下。

  spring MVC具体流程步骤(来自网络)。

  1. 首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
  2. DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
  3. DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
  4. HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
  5. ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
  6. View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
  7. 返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

  由此,spring MVC的开发步骤:

  1. DispatcherServlet在web.xml中的部署描述,从而拦截请求到Spring MVC。
  2. HandlerMapping的配置,从而将请求映射到处理器。
  3. HandlerAdapter的配置,从而支持多种类型的处理器。
  4.  ViewResolver的配置,从而将逻辑视图名解析为具体视图技术。
  5. 处理器(页面控制器)的配置,从而进行功能处理。

下面是按照这个步骤开发的一个简单的Spring MVC项目。

  以下是需要使用到的jar包:

  

  1、在web.xml里加入DispatcherServlet配置。

<servlet>  
        <servlet-name>dispatcher</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <!-- 
            容器是在启动的时候就加载这个DispatcherServlet(实例化并调用其init()方法),
            它的值必须是一个整数,表示servlet应该被载入的顺序;
            当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
            当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载;
            正数的值越小,该servlet的优先级越高,应用启动时就越先加载;
            当值相同时,容器就会自己选择顺序来加载。
         -->
        <load-on-startup>1</load-on-startup>  
    </servlet>
    
    <servlet-mapping>  
        <servlet-name>dispatcher</servlet-name>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>

 

  这样请求已交给Spring MVC框架处理,因此我们需要配置Spring的配置文件,默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本测试程序需要需要配置/WEB-INF/dispatcher-servlet.xml。

  2、在dispatcher-servlet.xml中配置HandlerMapping和HandlerAdapter。

<!-- HandlerMapping -->  
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>  
   
<!-- HandlerAdapter -->  
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>  

  3、dispatcher-servlet.xml中配置ViewResolver。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>  
    <property name="prefix" value="/"/>  
    <property name="suffix" value=".jsp"/>
</bean>

  nternalResourceViewResolver:用于支持Servlet、JSP视图解析;

      viewClass:JstlView表示JSP模板页面需要使用JSTL标签库。

     prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为test,则该该jsp视图页面应该存放在“/test.jsp”;

  4、开发和配置处理器。  

public class SpringController implements Controller{

    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mv = new ModelAndView();  
        mv.addObject("message", "test");
        mv.setViewName("test");
        return mv;
    }
    
}

  页面控制器/处理器必须实现org.springframework.web.servlet.mvc.Controller接口。将SpringController由spring IOC处理。

<bean name="/test" class="com.spring.mvc.SpringController"/>

  name="/test":前边配置的BeanNameUrlHandlerMapping,表示如过请求的URL为 “上下文/test”,则将会交给该Bean进行处理。

  5、视图页面/test.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>spring mvc test</title>
</head>
<body>
    ${message}
</body>
</html>

运行步骤:

1、  首先用户发送请求http://localhost:8080/projectName/test——>web容器,web容器根据“/test”路径映射到DispatcherServlet(url-pattern为/)进行处理;

2、  DispatcherServlet——>BeanNameUrlHandlerMapping进行请求到处理的映射,BeanNameUrlHandlerMapping将“/test”路径直接映射到名字为“/test”的Bean进行处理,即SpringController,BeanNameUrlHandlerMapping将其包装为HandlerExecutionChain(只包括SpringController处理器,没有拦截器);

3、  DispatcherServlet——> SimpleControllerHandlerAdapter,SimpleControllerHandlerAdapter将HandlerExecutionChain中的处理器(SpringController)适配为SimpleControllerHandlerAdapter;

4、  SimpleControllerHandlerAdapter——> SpringController处理器功能处理方法的调用,SimpleControllerHandlerAdapter将会调用处理器的handleRequest方法进行功能处理,该处理方法返回一个ModelAndView给DispatcherServlet;

5、  test(ModelAndView的逻辑视图名)——>InternalResourceViewResolver, InternalResourceViewResolver使用JstlView,具体视图页面在/test.jsp;

6、  JstlView(/test.jsp)——>渲染,将在处理器传入的模型数据(message=test!)在视图中展示出来;

7、  返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

推荐阅读