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

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

热度:155   发布时间:2016-05-02 03:53:36.0
Spring学习笔记-springMVC基于注解的控制器(Demo)

springmvc的整体运行流程图:
这里写图片描述

基于@Controller@RequestMapping是springmvc示例代码

  • 在web.xml中配置springmvc核心分发器DispatcherServlet
....<servlet>       <servlet-name>springmvc</servlet-name>       <servlet-class>           org.springframework.web.servlet.DispatcherServlet       </servlet-class>       <init-param>           <param-name>contextConfigLocation</param-name>           <param-value>classpath:springmvc-servlet</param-value>       </init-param>       <locad-on-startup>1</load-on-startup></servlet><servlet-mapping>        <servlet-name>springmvc</servlet-name>        <url-pattern>/</url-pattern></servlet-mapping>
  • 配置springmvc核心配置文件springmvc-servlet.xml
<?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:mvc="http://www.springframework.org/schema/mvc"       xmlns:context="http://www.springframework.org/schema/context"       xmlns:p="http://www.springframework.org/schema/p"       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                            http://www.springframework.org/schema/mvc                            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">    <!--注解类扫描路径-->    <context:component-scan base-pakage="com.springmvc.test.controller"/>    <!--添加springmvc注解驱动-->    <mvc:annotation-driven/>    <!--注册spirngmvc红最常用的视图解析器:内部资源视图解析器-->    <bean id="viewResolver"          class="org.springframework.web.servlet.view.InternalResourceViewResolver">          <!--前缀-->         <property name="prefix" value="/WEB-INF/jsp/"/>         <!--后缀-->         <property name="suffix" value=""/>    </bean></beans>

需要说明的是,<mvc:annotation-driven/>这个标签的作用是注册一个用于支持基于注解的处理器映射(HandlerMapping)。

  • 编写Controller类
package com.springmvc.test.controller;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;import com.springmvc.test.domain.Product;//添加Controller注解,注册到spring容器@Controllerpublic class ProductController{       private static final Log logger = LogFactory.getLog(ProductController.class);       //添加RequestMapping,映射到一个uri       @RequestMapping(value="/product_input")       public String inputProduct(){             logger.info("inputProduct called");             return "productForm";       }       //保存商品       @RequestMapping(value="/product_save")       public String saveProduct(Product product,Model model)       {             logger.info("save Product called");             //save product             model.addAttribute("product",product);'             return "productDetails";       }}

有两处需要说明一下,对于第二个方法中的Model参数,springmvc对于每个请求都会创建一个Model实例,用于增加需要显示再视图后果的属性,也就是利用合格对象将数据从Controller传递到jsp中

model.addAttribute("product",product);

这样,product就可以像被添加到HttpServletRequest中那样访问了。

  • jsp页面(略)。

以上就是一个简单 但比较完整的springmvc代码示例。


下面在补充两个个比较常用的知识点:请求参数 和 类路径变量,@ModelAttribute

请求参数和路径变量都可以用于发送数据给服务器,二者都是url的一部分,请求参数以key=value的形式,并且用&分隔,例如下面这样

http://localhost:8080/springmvc/product_retrieve?productId=3

在传统的servlet编程中,可以使用HttpServletRequest的getParameter方法来获取一个请求参数值:

String productId = request.getParameter("productId");

SpringMVC提供了一个比较简洁的方法来获取请求参数值:通过使用RequestParam注解类型来注解方法参数,例如

public void sendProduct(@RequestParam int productId)

路径变量类似请求参数,但没有key部分,只是一个值,就像这样

/product_view/productId

起哄productId是标示产品标识符的整数。在springmvc中,productId被称为路径变量,它用来发送一个值到服务器。
eg:

@RequestMapping("/product_view/{id}")public String viewProduct(@PathVariable Long id, Model model){      Product product = productService.get(id);      model.addAttribute(“product”,product);      return "productView"}

1)为了使用路径变量,首先要在RequestMappng注解的值属性中添加一个变量,该变量必须放在花括号之间。例如上面的实例。

2)然后,在方法签名中添加一个同名变量,[email protected]??签名,当该方法被调用时,请求url的id值被复制到路径变量中,可以在方法中使用。
也可以指定多个路径变量

@RequestMapping("/product_view/{userId}/{orderId}")

@ModelAttribute注解类型

SpringMVC在每次调用请求方法时,都会创建Model类型的一个实例,若打算使用该实例,额可以在方法中添加一个Model对象。

[email protected]??来访问Model实例。

[email protected]?[email protected]?对象添加到Model对象中,例如,springmvc中将每次调用submitOrder方法时创建的一个Order实例。

@RequestMapping(method=RequestMethod.POST)public String submitOrder(@ModelAttribute("newOrder") Order order, Model model){     ......}

输入或创建Order实例将用newOrder建值添加到Model对象中。如果没有定义键值名称,则将使用该对象的类名称,例如,每次调用下面的方法是时,会使用键值order将Order实例添加到Model对象中。

public String submitOrder(@ModelAttribute Order order,Model model)

@ModelAttribute的第二个用途是标注一个非请求的处理[email protected]?[email protected]?[email protected]?[email protected]?个void类型,如果返回是一条对象,则返回对象会被自动添加到Model中。

@ModelAttributepublic Porduct addProduct(@RequestParam String productId){     return productService.get(productId);}

若方法返回值为void,则还必须添加一个Model类型的餐宿,并手动将实例添加到Model中

@ModelAttributepublic void populateModel(@RequestParam String id,Model model){     model.addAttriute(new Account(id));}

参考:SpringMVC学习指南。

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

  相关解决方案