Spring学习笔记-springMVC基于注解的控制器(Demo)
2015-08-17 20:55
761 查看
springmvc的整体运行流程图:
基于
在web.xml中配置springmvc核心分发器
配置springmvc核心配置文件springmvc-servlet.xml
需要说明的是,
编写Controller类
有两处需要说明一下,对于第二个方法中的Model参数,springmvc对于每个请求都会创建一个Model实例,用于增加需要显示再视图后果的属性,也就是利用合格对象将数据从Controller传递到jsp中
这样,product就可以像被添加到HttpServletRequest中那样访问了。
jsp页面(略)。
以上就是一个简单 但比较完整的springmvc代码示例。
下面在补充两个个比较常用的知识点:请求参数 和 类路径变量,@ModelAttribute
请求参数和路径变量都可以用于发送数据给服务器,二者都是url的一部分,请求参数以key=value的形式,并且用&分隔,例如下面这样
在传统的servlet编程中,可以使用HttpServletRequest的getParameter方法来获取一个请求参数值:
SpringMVC提供了一个比较简洁的方法来获取请求参数值:通过使用RequestParam注解类型来注解方法参数,例如
路径变量类似请求参数,但没有key部分,只是一个值,就像这样
起哄productId是标示产品标识符的整数。在springmvc中,productId被称为路径变量,它用来发送一个值到服务器。
eg:
1)为了使用路径变量,首先要在RequestMappng注解的值属性中添加一个变量,该变量必须放在花括号之间。例如上面的实例。
2)然后,在方法签名中添加一个同名变量,并加上@PathVariable注解。看一下上面的实例中的方法签名,当该方法被调用时,请求url的id值被复制到路径变量中,可以在方法中使用。
也可以指定多个路径变量
@ModelAttribute注解类型
SpringMVC在每次调用请求方法时,都会创建Model类型的一个实例,若打算使用该实例,额可以在方法中添加一个Model对象。
实际上还可以在使用的方法中添加@ModelAtttribute注解来访问Model实例。
可以用@ModelAttribute注解来注解方法或方法参数。带有@ModelAttribute注解的方法会将其输入或创建的参数对象添加到Model对象中,例如,springmvc中将每次调用submitOrder方法时创建的一个Order实例。
输入或创建Order实例将用newOrder建值添加到Model对象中。如果没有定义键值名称,则将使用该对象的类名称,例如,每次调用下面的方法是时,会使用键值order将Order实例添加到Model对象中。
@ModelAttribute的第二个用途是标注一个非请求的处理方法。被@ModelAttribute注释的方法会在每次调用该控制器的请求处理方法时被调用。SpringMvc会在调用请求处理方法之前调用带有@ModelAttribute注解的方法。带有@ModelAttribute注解的方法可以返回一个对象或一个void类型,如果返回是一条对象,则返回对象会被自动添加到Model中。
若方法返回值为void,则还必须添加一个Model类型的餐宿,并手动将实例添加到Model中
参考: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容器 @Controller public 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)然后,在方法签名中添加一个同名变量,并加上@PathVariable注解。看一下上面的实例中的方法签名,当该方法被调用时,请求url的id值被复制到路径变量中,可以在方法中使用。
也可以指定多个路径变量
@RequestMapping("/product_view/{userId}/{orderId}")
@ModelAttribute注解类型
SpringMVC在每次调用请求方法时,都会创建Model类型的一个实例,若打算使用该实例,额可以在方法中添加一个Model对象。
实际上还可以在使用的方法中添加@ModelAtttribute注解来访问Model实例。
可以用@ModelAttribute注解来注解方法或方法参数。带有@ModelAttribute注解的方法会将其输入或创建的参数对象添加到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的第二个用途是标注一个非请求的处理方法。被@ModelAttribute注释的方法会在每次调用该控制器的请求处理方法时被调用。SpringMvc会在调用请求处理方法之前调用带有@ModelAttribute注解的方法。带有@ModelAttribute注解的方法可以返回一个对象或一个void类型,如果返回是一条对象,则返回对象会被自动添加到Model中。
@ModelAttribute public Porduct addProduct(@RequestParam String productId){ return productService.get(productId); }
若方法返回值为void,则还必须添加一个Model类型的餐宿,并手动将实例添加到Model中
@ModelAttribute public void populateModel(@RequestParam String id,Model model){ model.addAttriute(new Account(id)); }
参考:SpringMVC学习指南。
相关文章推荐
- 谈谈Java中的集合
- Java学习笔记(十二):泛型的使用
- 关于java的设计目标
- Java线程:线程状态的转换
- Java陷阱之assert关键字
- java如何正确停止一个线程
- 一致性哈希算法学习及JAVA代码实现分析
- java中split以"."分割
- Java Prim算法
- MyEclipse 快捷键
- [JavaWeb基础] 011.Struts2 配置拦截器
- HashMap和HashSet的区别
- Java解析XML
- java环境配置
- eclipse-hadoop插件
- java枚举基础及使用
- Java反射破坏单例模式
- 浅谈Java反射机制
- Spring---AOP原理浅析
- Java web学习路线