转自:http://blog.csdn.net/daybreak1209/article/details/50667079
MVC模式的特点就在于将页面、业务逻辑、实体分层管理,那三层之间如何进行数据传输,Spring MVC与其他web 框架相比,有何独到之处。
在MVC框架模式中,大部分的参数传递都是通过发送request请求到controller控制器,Controller中调用后台Service业务,获取数据,回显View 界面。所以主要的参数传递是在Controller和View之间进行的。下面就来介绍Controller和View之间数据的发送和接收方式。
一、Controller接收View参数
1、通过HttpServletRequest
通过HttpServletRequest 进行页面与控制器间参数传递是典型的Servlet参数传递方式,像使用Servlet作为Web开发中控制器的角色,通过实现servlet接口,重写doGet\doPost方法,两必不可少的参数便是HttpServletRequest 和HttpServletResponce。所以使用HttpServletRequest接受request请求参数,并非Spring MVC所特有的方式。
- @RequestMapping("/getName.do")
- public String toPerson(HttpServletRequest request){
- String result = request.getParameter("name");
- System.out.println(result);
- return "index";
- }
String studentName=request.getParameter("name");
测试时,浏览器通过访问 URL:http://localhost:8091/springMVC/getName.do?Name=max1209 传入name=max1209参数。
2、直接定义参数名
控制器接收界面参数,还可直接指定参数名称
1)单个参数
- @RequestMapping("/getName.do")
- public String getName(String name){
- System.out.println(name);
- return "/index";
- }
测试时,浏览器通过访问 URL:http://localhost:8091/springMVC/getName.do?name=max1209 传入name=max1209参数。
2)多个参数
- @RequestMapping("/getName.do")
- public String getName(String name, Integer age, String address, Date birthday){
- System.out.println(name + " "+ age + " "+ address + " " +birthday);
- return "/index";
- }
测试时,浏览器通过访问 URL:http://localhost:8091/springMVC/getName.do?name=max1209&age=30&address=London 传入多个参数。
注意
1)要求前台传入的参数和controller方法中参数名必须相同,才可成功获取该参数值。
2)参数类型,如果前台出入String类型,后台方法参数为Integer,传入“123”数字字符串,SpringMVC可自动转换成
3)时间类型参数需要指定时间格式
3、通过实体整合
当界面参数过多时,以2中指定参数名的形式进行接收未免过于繁琐。可以将参数整合成一个实体进行接收。例如:定义一个Person实体接受person的name、age、sex等参数值。
- @RequestMapping("/getName.do")
- public String getName(Person person){
- System.out.println(person);
- return "index";
- }
测试时,浏览器通过访问 URL:http://localhost:8091/springMVC/getName.do?name=max1209&age=30&address=London 传入多个参数。
使用实体接收参数需要注意:
1、URL传递
2、参数列表,如果有两个实体,person 和user ,俩都有name 和age 属性,不管哪个实体,只要传入的参数名能和实体中的set方法匹配,就能改该实体赋值。也就是说,如果url就传入name 、age参数,而person和User实体恰好也都有这两个参数,那么两个实体都能注入name、age参数值
4、数组类型参数接收
这个适用于页面例如有多个checkbox时,名字都一样,传入多个checkbox值,则Controller中就需要使用数组接收参数。
- @RequestMapping("/getName.do")
- public String getName(String[] name){
- for(String result : name){
- System.out.println(result);
- }
- return "index";
- }
测试时,浏览器通过访问 URL:http://localhost:8091/springMVC/getName.do?name=max1209&name=li&name=zzz传入数组形式参数。
二、Controller如何把业务数据返回View显示
1、通过ModelAndView 返回
将数据封装成一个实体,通过ModelAndView返回界面。实际就是把person对象放到map ,通过ModelAndView 封装到responce对象中去了,所以前台直接通过map key值,获取属性即可。
- @RequestMapping("/getName.do")
- public ModelAndView getName() throws Exception{
- Person person = new Person();
- person.setName("james");
- person.setAge(28);
- person.setAddress("maami");
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- Date date = format.parse("1985-04-22");
- person.setBirthday(date);
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("p", person);
- return new ModelAndView("index", map);
- }
2、通过Map
在方法中加入map参数,ModelAndView视图管理器会自动把这个map参数装配到request中,方法通过返回String照样可以把person实体返回界面。
- @RequestMapping("/getName.do")
- public String getName(Map<String, Object> map) throws Exception{
- Person person = new Person();
- person.setName("james");
- person.setAge(28);
- person.setAddress("maami");
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- Date date = format.parse("1985-04-22");
- person.setBirthday(date);
- map.put("p", person);
- return "index";
- }
3、直接使用Model对象
最常用也最方便的就是直接通过Model对象返回
- @RequestMapping("/getName.do")
- public String getName(Model model) throws Exception{
- Person person = new Person();
- person.setName("james");
- person.setAge(28);
- person.setAddress("maami");
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- Date date = format.parse("1985-04-22");
- person.setBirthday(date);
- //把参数值放到request类里面去
- model.addAttribute("p", person);
- return "index";
- }
这三种方式均可由前台通过JSTL+EL表达式获取addAttribute中key-value获取person实体数据
- <span style="font-family:Comic Sans MS;"> <body>
- <h1>${p.name}</h1>
- <h1>${p.age}</h1>
- <h1>${p.sex}}</h1>
- <h1>${p.address}</h1>
- </body></span>
相关推荐
在Spring MVC中,表单标签库提供了一种便捷的方式来处理用户输入,它简化了HTML表单与后端控制器之间的交互。本篇文章将深入探讨Spring MVC中的表单标签库,以及如何在实际项目中使用它们来创建动态、交互式的表单。...
Spring MVC还支持数据绑定,自动将请求参数绑定到Java对象,这极大地简化了表单提交的处理。对于验证,Spring MVC提供了BindingResult和Validator接口,用于校验模型数据的正确性。 另外,Spring MVC与Spring框架的...
【标题】"maven与spring MVC"涉及到的是Java Web开发中的两个关键组件——Maven和Spring MVC,它们在构建和管理复杂项目时起着至关重要的作用。Maven是一个项目管理和综合工具,它通过提供一个标准化的构建过程和...
10. **Conversion and Validation**: Spring MVC提供了数据转换和验证功能,如使用`@RequestParam`、`@PathVariable`注解自动转换参数,以及使用`@Valid`和`BindingResult`进行表单验证。 11. **Tiles or Layouts**...
Spring MVC支持自动的数据绑定,可以将请求参数直接绑定到Controller方法的参数上,也可以将表单数据绑定到Java对象。此外,@Valid用于验证模型数据,配合Validator接口实现自定义校验规则。 7. **异常处理** ...
通过Ajax,jQuery可以与后台Spring MVC控制器进行无刷新的数据交互,提升用户体验。 **Twitter Bootstrap 的引入** Twitter Bootstrap 是一个流行的前端开发框架,提供了响应式布局、预定义的CSS样式、JavaScript...
Spring MVC和Ajax是Web开发中的两个重要技术,它们在构建动态、交互性强的网页应用时起着关键作用。Spring MVC是Spring框架的一部分,提供了一种模型-视图-控制器(MVC)架构来组织和处理HTTP请求,而Ajax...
在Spring MVC中,开发者可以方便地处理HTTP请求,进行数据绑定,以及与服务层交互。以下是关于Spring MVC的一些关键知识点: 1. **DispatcherServlet**: Spring MVC 的核心组件是DispatcherServlet,它作为前端控制...
1. **Spring MVC基本概念**:首先,了解Spring MVC的基本架构,包括DispatcherServlet、Controller、Model、View和ViewResolver等组件的角色和交互方式。 2. **配置Spring MVC**:学习如何通过XML或Java配置来设置...
1. **Spring MVC**:Spring MVC是Model-View-Controller模式的实现,它负责处理HTTP请求,将数据传递给模型层处理,再由控制器将结果返回给视图展示。在本项目中,你需要理解DispatcherServlet的作用,Controller的...
这些请求通常带有特定的URL和参数,对应Spring MVC中的Controller方法。 在Controller中,我们需要定义一个可被Ajax调用的方法,通常使用`@RequestMapping`注解来指定URL映射,并可能使用`@RequestParam`或`@...
《基于Spring、Spring MVC、MyBatis的Java客户关系管理系统详解》 在现代企业运营中,客户关系管理(CRM)系统扮演着至关重要的角色,它帮助企业有效地管理与客户的交互,提高销售效率,优化客户服务,从而增强企业...
整合jQuery与Spring MVC,可以实现高效、互动的Web应用,尤其是在处理复杂的数据展示和交互场景时。通过jqGrid的例子,我们可以看到这种整合的优势,即简化前端数据展示的复杂度,同时利用Spring MVC的强大后端处理...
5. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL提供了一系列标签库,简化了JSP页面中的业务逻辑,可以与Spring MVC配合使用,减少Java代码的编写。 6. **JSP和Servlet API**:Spring MVC依赖于...
这个场景通常涉及到前端的JavaScript或jQuery库(如jQuery File Upload)与后端的Spring MVC控制器之间的交互,以及可能的多线程处理来跟踪文件上传的进度。接下来,我们将深入探讨如何在Spring MVC中实现这一功能。...
4. **实现DAO和Service**:创建DAO接口和实现,用于与数据库交互。在Service层,定义处理业务逻辑的方法,如登录验证。使用Spring的@Autowired注解进行依赖注入,将DAO注入到Service中。 5. **创建Controller**:...
数据绑定是 Spring MVC 的一大特色,它可以自动将请求参数与控制器方法的参数进行匹配。比如,表单提交的数据可以自动绑定到对象的属性上,这极大地简化了数据处理。同时,`@Valid` 注解可以用于数据验证,Spring ...