SpringMVC学习(3)--基于注解的控制器

来源:互联网 发布:老电影修复软件 编辑:程序博客网 时间:2024/06/04 18:39

在上一节中,为了便于理解Controller的作用,我仍然使用了Controller接口,这样一个实现了Controller接口的类只能处理一个动作,下面来看SpringMVC的基于控制器的注解

下面是新的项目结构:
这里写图片描述

1.dispatcher-servlet.xml

要使用注解的控制器,需要在配置文件中加入对应的命名空间,关于Schema命名空间的声明,我从网上找到一张图片:

这里写图片描述
下面是我们的配置文件:

<?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.xsd        http://www.springframework.org/schema/context        http://www.springframework.org/schema/context/spring-context.xsd">    <!-- context命名空间将扫描下面指定的package-->    <context:component-scan base-package="controller"/>    <!--视图解析器 -->    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/WEB-INF/jsp/"/>        <property name="suffix" value=".jsp"/>    </bean></beans>

2.Controller注解

使用基于注解的控制器的优点是1.一个控制器可以处理多个动作;2.请求映射不需要存储在配置文件中(使用RequsetMapping注解可以对一个方法进行请求处理)

@Controller注解用于表示某一个类是一个控制器
@RequestMapping注解为每个动作指定对应的处理发方法
下面是我们的控制器:

package controller;import domain.Product;import form.ProductForm;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;/** * Created by kay on 2016/12/26. */@Controllerpublic class ProductController {    private static final Log logger = LogFactory.getLog(ProductController.class);    @RequestMapping("/input_product")    public String inputProduct(){        logger.info("inputProduct 调用");        return "ProductForm";    }    @RequestMapping("/save_product")    public String saveProduct(ProductForm productForm, Model model){        logger.info("saveProduct 调用");        //无需再从request中取出表单数据再ProductForm实例化        Product product=new Product();        product.setName(productForm.getName());        product.setDescription(productForm.getDescription());        product.setPrice(Float.parseFloat(productForm.getPrice()));        model.addAttribute("product",product);        return "ProductDetails";    }}

2个请求方法用过@RequestMapping注解进行URL映射,当程序接收到对应的URL时将调用处理方法。@RequestMapping有一些属性,除了value还可以指定处理方法为GET、POST等等,详细可以查文档。

3.请求处理方法

请求处理方法可以有多个不同类型的参数和一个多种类型的返回值。如果需要在请求处理中使用类似HttpSession、HttpServletRequest/Response等等,可以直接写在参数的位置,Spring将会正确的传递到方法中。它是一个包含Map对象的SpringMVC类型,每次调用请求处理方法时将创建Model对象并将其注入到各种对象中。

请求处理的返回类型:
ModelAndView
Model
Map包含的模型的属性
View
代表逻辑视图名的String
void
·····

小结:以上简单的将之前的Controller接口改为注解类型,并理解这样做的好处,下面将学习继续基于注解的其他配置。kay

参考:《Spring MVC 学习指南》
XML基础知识–>Spring配置http://www.iteye.com/topic/1123630

0 0
原创粉丝点击