当前位置: 代码迷 >> VC/MFC >> Spring学习笔记-springMVC基于引文的控制器(基本概念)
  详细解决方案

Spring学习笔记-springMVC基于引文的控制器(基本概念)

热度:295   发布时间:2016-05-02 03:53:45.0
Spring学习笔记-springMVC基于注解的控制器(基本概念)

在spring2.5以前的版本中,实现一个mvc的Controller的唯一方法就是实现Controller接口,一个控制器只能响应一个客户端请求,在2.5以后的版本中,spring引入了注解,利用注解简化配置文件,利用注解实现bean的声明和依赖注入(DI),注解也同样被引入到spring的web模块springMVC中。

  • 使用基于注解的控制器有两个优点
    第一:一个控制器可以处理多个动作,而不是像以前那样一个控制器只能处理一个请求
    第二:省略的在配置文件中对bean的声明和依赖注入,显著提高开发效率
    Controller和RequestMapping注解是SpringMVC中最重要的两个注解类型,下面对这两个注解做详细说明。

  • Controller注解

org.springframework.stereotype.Controller注解用于指示spring类的实例是一个控制器。下面是一个Controller注解的使用示例

package com.springmvc.test.controller;import org.spirngframework.stereotype.Controller;...@Controllerpublic class CustomerController(){     //request handle method}

Spring使用扫描机制来找到应用程序中所有基于注解的控制器类,为了spring能找到你的控制器,需要做两件事:
第一,在springMVC配置文件中声明spring-context。

<beans    xmlns:context="http://www.springframework.org/schema/context"  ...   xsi:schemaLocation="http://www.springframework.org/schema/context                            http://www.springframework.org/schema/context/spring-context-3.0.xsd" >...

第二,在配置文件中声明<component-scan/>元素,如下所示

<context:component-scan base-package="basePackage"/>

<component-scan/>元素中制定控制器类的基本包。例如,若所有的控制器类都在com.springmvc.test.controller包及子包下,则需要写一个如下的<component-scan/>元素:

<context:component-scan base-package="com.springmvc.test.controller"/>

现在整个配置文件的配置如下:

<?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:context="http://www.springframework.org/schema/context"  xsi:schemaLocation="http://www.springframework.org/schema/beans                            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd                            http://www.springframework.org/schema/context                            http://www.springframework.org/schema/context/spring-context-3.0.xsd">....</beans>
  • RequestMapping注解类型

    现在,我们需要在控制器类的内部为每一个动作开发相应的处理方法。要让spring知道哪一种方法来处理他的动作,需要使用org.springframework.web.bind.annotation.RequestMapping注解类型映射到URI与方法。

RequestMapping注解类型的作用同其名字所表达的意思一样:映射一个请求和一种方法。可以使用RequestMapping注解一种方法或类。

一个参与RequestMapping注解的方法将成为一个处理请求的方法,并由控制器DispatcherServlet将请求关联到这个方法上。
应用RequestMapping很简单,就像下面这样:

package com.spirngmvc.test.controller;import org.springframework.stereotype.Conroller;import org.springframework.web.bind.annotation.RequestMapping;...@Controllerpublic class CustomerController{     @RequestMapping(value="/customer_input")     public String inputCustomer(){            //handler here         retur "customerForm";     }}

这样,当访问下面的地址时就会被这个方法处理

http://localhost/springmvctest/customer_input

RequestMapping除了具有value属性外,还有其他属性。例如method属性用来指示该方法处理哪些http方法。
例如,当且仅当请求方法为HTTP POST或PUT方法时,才用下面的方法处理:

...import org.springframwork.stereotype.Controller;import org.springframwork.web.bind.annotation.RequestMapping;import org.springframwork.web.bind.annotation.RequestMethod;...     @RequestMapping(value="/order_process",          method={RequestMethod.POST,RequestMethod.PUT})      public String processOrder(){         //handle here         retur "orderForm";     }

若指定一种请求方法,则无需大括号

@RequestMapping(value="/order_proess",method=RequestMethod.POST)

如果没有制定method属性,则任意请求方法都可以。

前面所过,RequestMapping既可以作用于方法,也可以作用于类,那么作用于类的ReqeustMapping是怎么回事呢?

...import org.springframework.stereotype.Controller;import ogr.springframework.web.bind.annotation.RequestMapping;import org.springframework.bind.annotation.RequestMethod;...@Controller@RequestMapping("/customer")public class CustomerController{     @RequestMapping(value="/delete"           method=RequestMethod.POST);     public String deleteCustomer(){       //handle          return ...;     }}

用下面的url可以访问到该方法:

http://domain/context/customer/delete

一目了然了,是为了简化对控制器中方法的路径配置,因为通常情况下,同一个controller下的方法处理的url都有一个相同的跟路径,就像/customer

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案