第5章 数据绑定和表单标签库-Spring MVC开发技术指南(微课版)-陈恒-清华大学出版社
- 格式:ppt
- 大小:506.00 KB
- 文档页数:36
SpringMVC数据绑定概述及原理详解数据绑定概述在执⾏程序时,Spring MVC根据客户端请求参数的不同,将请求消息中的信息以⼀定的⽅式转换并绑定到控制器类的⽅法参数中。
这种将请求消息数据与后台⽅法参数建⽴连接的过程就是 Spring MVC中的数据绑定。
在数据绑定过程中,Spring MVC框架会通过数据绑定组件(DataBinder)将请求参数串的内容进⾏类型转换,然后将转换后的值赋给控制器类中⽅法的形参,这样后台⽅法就可以正确绑定并获取客户端请求携带的参数。
具体的信息处理过程的步骤如下。
(1)Spring MVC将ServletRequest对象传递给 DataBinder。
(2)将处理⽅法的⼊参对象传递给 DataBinder。
(3) DataBinder调⽤ConversionService组件进⾏数据类型转换、数据格式化等⼯作,并将 ServletRequest对象中的消息填充到参数对象中。
(4)调⽤Validator组件对已经绑定了请求消息数据的参数对象进⾏数据合法性校验。
(5)校验完成后会⽣成数据绑定结果 BindingResult对象,Spring MVC会将BindingResult对象中的内容赋给处理⽅法的相应参数。
根据客户端请求参数类型和个数的不同,将 Spring Mvc中的数据绑定主要分为简单数据绑定和复杂数据绑定1.简单数据绑定绑定默认数据类型UserController.java:package com.ssm.controller;import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class UserController {@RequestMapping(value="/selectUser")public String selectUser(HttpServletRequest request) {String id=request.getParameter("id");System.out.println("id="+id);return "success";}}使⽤注解⽅式定义了⼀个控制器类,同时定义了⽅法的访问路径。
Spring MVC技术文档1.Spring MVC 框架介绍Spring 框架提供了构建Web 应用程序的全功能MVC 模块。
使用Spring 可插入的MVC 架构,可以选择是使用内置的Spring Web 框架还是Struts 这样的Web 框架。
通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和POI。
Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用JSP 技术。
Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
1)Spring MVC中的功能组件划分很细致,采用了面向方面的编程aop 技术更好的降低的程序的耦合度,也使得程序扩展起来非常方便、灵活。
2)Spring MVC性能非常优秀,能与Spring框架无缝集成,相比Struts2效率更快,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。
3)Spring MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。
4)Spring MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)1)以Controller为中心完成对系统流程的控制管理2)获取请求中提交的数据3)对传入参数进行验证4)根据请求调用相应业务逻辑完成数据处理5)将处理结果返回给视图6)国际化支持7)针对不同视图技术提供不同解析支持方案8)针对JSP视图技术提供标签库9)通过拦截器链实现面向方面编程完成系统级控制10)对文件上传、下载等常用功能的封装实现Spring MVC的方式主要有两种,一种是基于配置的方式来实现,另一种是基于注解的方式实现,重点主要为基于注解的方式来实现Spring MVC。
springmvc参数绑定原理Spring MVC参数绑定是一种将HTTP请求参数(通常是表单参数)绑定到控制器方法参数上的技术,它是SpringMVC框架的一个重要组成部分。
Spring MVC参数绑定分为两个步骤:参数解析和参数绑定。
首先,Spring MVC框架会将HTTP请求参数解析为一个个参数对象,这个过程叫做参数解析。
其次,Spring MVC框架会将这些参数对象绑定到控制器方法的参数上,这个过程叫做参数绑定。
在参数解析阶段,Spring MVC框架会根据客户端发送的请求类型(如GET或POST),将HTTP请求参数解析为一个个参数对象。
当请求类型为POST时,Spring MVC框架将通过HttpServletRequest.getParameterMap()方法获取参数列表,并根据参数名称(如username)创建一个参数对象,然后将其值(如tom)存储到这个参数对象中。
在参数绑定阶段,Spring MVC框架会根据控制器方法参数的类型(如String,int,Date等)将参数对象绑定到控制器方法的参数上。
比如,如果控制器方法的参数为String类型,那么Spring MVC框架会将参数对象的值(如tom)存储到这个参数上;如果控制器方法的参数为int类型,那么Spring MVC框架会将参数对象的值(如18)转换为int类型,然后存储到这个参数上。
此外,Spring MVC框架还支持参数校验,比如对参数的最大值、最小值、正则表达式等进行校验。
参数校验是一种安全措施,它可以确保参数的正确性,避免出现安全问题。
以上就是Spring MVC参数绑定的原理。
它允许我们将HTTP请求参数解析为参数对象,并将这些参数对象绑定到控制器方法参数上,这样就可以在控制器方法中对参数进行处理。
此外,Spring MVC框架还支持参数校验,这是一种安全措施,可以确保参数的正确性。
SpringMVC之表单标签库和校验注解Spring MVC 表单标签库Handler1 package com.wiggin.controller;23 import com.wiggin.entity.Student;4 import org.springframework.stereotype.Controller;5 import org.springframework.web.bind.annotation.GetMapping;6 import org.springframework.web.bind.annotation.RequestMapping;7 import org.springframework.web.servlet.ModelAndView;89 @Controller10 @RequestMapping("/tag")11 public class TagHandler {1213 @GetMapping("get")14 public ModelAndView get(){15 ModelAndView modelAndView = new ModelAndView("tag");16 Student student = new Student(1L,"张三",18);17 modelAndView.addObject("student",student);18 return modelAndView;1920 }21 }JSP1 <%--2 Created by IntelliJ IDEA.3 User: Administrator4 Date: 2020/8/55 Time: 19:176 To change this template use File | Settings | File Templates.7 --%>8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>9 <%@ page isELIgnored="false" %>10 <%@ taglib prefix="form" uri="/tags/form" %>11 <html>12 <head>13 <title>Title</title>14 </head>15 <body>16 <h1>学⽣信息</h1>17 <form:form modelAttribute="student">18 学⽣ID:<form:input path="id"/></br>19 学⽣姓名:<form:input path="name"/></br>20 学⽣年龄:<form:input path="age"/></br>21 <input type="submit" value="提交">22 </form:form>23 </body>24 </html>1.前缀与定义JSTL标签库相似,前缀可以⾃定义,通常定义为form<%@ taglib prefix="form" uri="/tags/form" %>2.将form表三与模型数据进⾏绑定,通过modelAttribute的值设置为模型数据对应的key值Handler:modelAndView.addObject("student",student);JSP:<form:form modelAttribute="student">3.form表单完成绑定后,将模型数据的值定义到各个标签中,通过设置path属性完成,与Handler属性名⼀致。
SpringMVC数据绑定⼆(List、Set和Map类型)1.List类型绑定//联系信息类⽤户类的⼦属性public class ContactInfo {private String phone;private String address;//getting and setting............}//⽤户类public class User {private String name;private Integer age;private ContactInfo contactInfo;//getting and setting............@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", contactInfo=" + contactInfo + "]";}}//List<User> 集合的包装类public class UserListForm {private List<User> users;public List<User> getUsers() {return users;}public void setUsers(List<User> users) {ers = users;}@Overridepublic String toString() {return "UserListForm [users=" + users + "]";}}//controller⽅法//http://127.0.0.1:8080/SpringMVC/list?users[0].name=Tom&users[0].age=20&users[1].name=Lucy&users[1].age=25&users[1].contactInfo.phone=10086@RequestMapping(value="list")@ResponseBodypublic String list(UserListForm userListForm) {return userListForm.toString();}结果显⽰:注意:若参数中users[20] 则⽣成的list对应的size为212.Set//Set<User> 集合的包装类public class UserSetForm {private Set<User> users;public UserSetForm() {//必须初始化,如若没有则报500错误Cannot get element with index 0 from Set of size 0 //getPropertyValue(AbstractNestablePropertyAccessor.java:661)中做判断。
springMVC框架学习指南V1.0SpringMVC 2.5& 3.0最大的特色就是URL自定义,Request参数自动绑定:来看一下基于注解的Controller 是如何定义做到这一点的,下面是使用注解的BbtForumController:清单 1. BbtForumController.javapackage com.baobaotao.web;import com.baobaotao.service.BbtForumService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import java.util.Collection;@Controller //<——①@RequestMapping("/forum.do")public class BbtForumController {@Autowiredprivate BbtForumService bbtForumService;@RequestMapping //<——②public String listAllBoard() {bbtForumService.getAllBoard();System.out.println("call listAllBoard method.");return "listBoard";}}从上面代码中,我们可以看出BbtForumController 和一般的类并没有区别,它没有实现任何特殊的接口,因而是一个地道的POJO。
springmvc教程Spring MVC是一种基于Java的Web应用开发框架,它是Spring框架的一部分,广泛应用于企业级的Java开发中。
相比于其他的Web框架,Spring MVC具有灵活性高、易于维护、测试和扩展等优势。
本篇文章将为大家介绍Spring MVC的基本概念、核心特性以及使用方法。
首先,我们需要了解Spring MVC的基本概念。
Spring MVC使用了经典的MVC(Model-View-Controller)设计模式,将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。
模型表示封装了业务数据的Java对象,视图负责显示用户界面,控制器起到了调度和协调的作用。
Spring MVC的核心特性包括:1. 基于注解的处理器映射:Spring MVC使用注解来标注处理请求的方法,简化了URL到处理器的映射配置。
2. 强大的数据绑定支持:Spring MVC提供了丰富的数据绑定功能,可以将请求参数绑定到方法参数、表单对象或者JavaBean中,并支持数据校验。
3. 灵活的视图解析:Spring MVC支持多种视图技术,包括JSP、Freemarker、Thymeleaf等,而且可以根据请求的内容类型动态选择视图。
4. 高效的请求处理流程:Spring MVC采用了前端控制器模式,将请求的处理流程交给统一的调度器(DispatcherServlet)来管理,通过HandlerMapping匹配处理器,然后由HandlerAdapter调用方法处理请求,最后由ViewResolver解析视图并返回给客户端。
5. 可扩展性强:Spring MVC提供了丰富的可扩展点,如拦截器、处理器适配器和视图解析器等,可以通过自定义实现来满足不同的需求。
接下来,我们将通过一个简单的例子来演示Spring MVC的使用方法。
首先,我们需要在Maven中添加相关依赖,如spring-webmvc、javax.servlet-api等。
编程技术-JavaWeb - 框架SpringMVC参数传递和数据绑定在SpringMVC中页面的值如何传递到Action, 页面的数据如何与Action之间绑定?一、参数传递1、页面向controller传值a、普通参数:表单提交,POST方法@RequestMapping(value="login",method=RequestMethod.POST)public String login(String username,String password){/** to do*/return "user";}表单,或URL ?username=xxxx 提交?username=成为url的一部分,没有参数会报错,要允许无参数时去掉@RequestParam("username")@RequestMapping("/test")public String testMethod(@RequestParam("username") Stringusername,Map<String,Object> context){context.put("message",username); //map的值存在request中,页面使用return "atest";}b、对象参数:页面提数user对象数据:@RequestMapping(value="/add",method= RequestMethod.POST)public String add(@ModelAttribute("user") User user){/** to do*/return "redirect:/user/users";}页面:<form action="add" method="POST"><input name="id"><br/><input name="name"><br/><input name="password"><br/><input name="nickname"><br/><input name="email"><br/><input type="submit" value="添加"></form>注意:页面input中id,name...直接对应contorller add方法参数user对象的属性字段,而不是像struts2中在页面用user.id, c、rest风格参数传递如:http://localhost:8080/springmvc/user/jack , 需要把jack作为参数传递,使用value = "/{name}" ,@PathVariable@RequestMapping(value = "/{name}", method = RequestMethod.GET)public String show(@PathVariable String name, Model model) {/** to do*/return "show";}2、contoller处理完后,保存值页面使用1)方法中加Map<String,Object>参数2)方法中加Model model参数(SpringMVC提倡的方法)@RequestMapping(value = "/users", method = RequestMethod.GET)public String list(Model model) {model.addAttribute("users", users);return "list";}3)contoller中使用session方法中加HttpSession即可二、数据绑定一、页数提交到Controller数据jsp:<form action="add.action" method="POST">NAME<input type="text" name="name"/><br/>PASS<input type="password" name="password"/><br/><input type="submit" value="ADD"/>直接对应User user中的属性,不用写, user.password实体类:User//实体类略Controller:@Controllerpublic class UserController {@RequestMapping(value="/add",method=RequestMethod.POST)public String add(@ModelAttribute("user") User user){// 页面user数据会收集过来to doreturn "ok";}}在方法中用@ModelAttribute("user") User user,不用在Controller中写User user二、Contoller到View数据1、访问ServletAPI方式在方法中加参数如HttpServletRequest requset , HttpSession session:@RequestMapping(value="/list",method=RequestMethod.GET)public String list(HttpServletRequest request){//request.setAttribute("ulist", o);return "list";}2、在方法中加Model model参数:@RequestMapping(value = "/users", method = RequestMethod.GET)public String list(Model model) {// List<User> us = userService.list();//model.addAttribute("users",us);Pager<User> pager = userService.find();model.addAttribute("pager",pager);return "user/list";}3、在方法加入Map<String,Object>参数,将值直接传递到视图@RequestMapping(value = "/hello", method = RequestMethod.GET)public String sayHi(Map<String,Object> map) {map.put("hi","hello world!");return "hello";}页面直接用EL表达式可以取值。
SpringMVC--数据绑定和表单标签库数据绑定是将⽤户输⼊绑定到领域模型的⼀种特性。
有了数据绑定,类型总是为String的HTTP请求参数,可⽤于填充不同类型的对象属性(或者说字段)。
数据绑定使得form bean(在前⾯⼏篇博客案例中的表单类ProductForm实例)变得多余的。
为了⾼效的使⽤数据绑定,还需要Spring的表单标签库。
本篇将重点介绍数据绑定和表单标签库,并提供范例,展⽰表单标签库中这些标签的⽤法。
⼀数据绑定概览基于HTTP的特性,所有HTTP请求参数的类型均为字符串String类型。
在博客中的annotated1应⽤中,我们使⽤表单提交产品的信息(name,description,price)。
为了获取正确的产品价格,Spring MVC⾸先创建⼀个ProductForm实例,⽤来接受表单中提交的字段信息(ProductForm类字段都是String类型,与表单元素对应),然后在⽅法中创建⼀个Product实例⽤于保存产品信息(其中商品价格price是BigDecimal)类型。
这⾥将annotated1应⽤中ProductController类中的saveProduct()⽅法的部分代码复制过来: @RequestMapping(value="/save-product")public String saveProduct(ProductForm productForm, Model model) {("saveProduct called");// no need to create and instantiate a ProductForm// create ProductProduct product = new Product();product.setName(productForm.getName());product.setDescription(productForm.getDescription());try {product.setPrice(new BigDecimal(productForm.getPrice()));} catch (NumberFormatException e) {}// add productmodel.addAttribute("product", product);return "ProductDetails";}之所以需要解析ProductForm中的price属性,是因为它是⼀个String,却需要⽤BigDecimal来填充Product的price。
SpringMVC基本操作SpringMVC:1.)SpringMVC和Spring的关系:软件开发的三层架构: web层【表⽰层、表现层】---->Service层---->Dao[DataBase Access Object]---->数据库!SpringMVC实际上是Spring的⼀个⼦模块,我们⽤SpringMVC来代替这个JavaWEB部分!MVC:也是⼀种设计模式:M:Model【模型】-->V[View]--->C[Controller]!Model⽤来封装数据的,View:⽤来显⽰数据 Controller:⽤于接收前端页⾯发送的请求,然后调⽤Service层处理,拿到处理结果,将该结果返回给前端页⾯!SpringMVC:相当于MVC架构中的C以及V!以前JavaEE-->现在J2EE2.)SpringMVC有什么优势?Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是⽬前最主流的 MVC 框架之⼀。
Spring3.0 后全⾯超越 Struts2,成为最优秀的 MVC 框架。
Spring MVC 通过⼀套 MVC 注解,让 POJO 成为处理请求的控制器,⽽⽆须实现任何接⼝。
⽀持 REST 风格的 URL 请求。
GET POST PUT DELTE采⽤了松散耦合可插拔组件结构,⽐其他 MVC 框架更具扩展性和灵活性.⽬前主流的开发软件,说⽩了,⼤家都在⽤!3.)SpingMVC是基于SpingMVC4.x4.)SpringMVC的HelloWorld快速⼊门!1.加⼊JAR包:–commons-logging-1.1.3.jar–spring-aop-4.0.0.RELEASE.jar–spring-beans-4.0.0.RELEASE.jar–spring-context-4.0.0.RELEASE.jar–spring-core-4.0.0.RELEASE.jar–spring-expression-4.0.0.RELEASE.jar–spring-web-4.0.0.RELEASE.jar–spring-webmvc-4.0.0.RELEASE.jar2.配置前端控制器【DispatcherServlet】<!-- The front controller of this Spring Web application, responsible for handling all application requests --><!--向服务器注册前端控制器! --><servlet><servlet-name>springDispatcherServlet</servlet-name><!--DispatcherServlet指的是SpringMVC的前端控制器!,给服务器使⽤,创建servlet对象! --><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 初始化参数contextConfigLocation⽤于指定SpringMVC配置⽂件的路径以及名称 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><!-- 数字0或者⼤于0的数字表⽰的是:在服务器启动的时候创建Servlet对象,⽽不是第⼀次访问的时候创建⼩于0的数字指的是:在第⼀次访问的时候创建Servlet对象.在数字⼤于O的情况下,数字越⼩,优先级越⾼!--><load-on-startup>1</load-on-startup></servlet><!-- Map all requests to the DispatcherServlet for handling --><!-- ⽤ servlet-mapping指定请求映射的路径--><servlet-mapping><servlet-name>springDispatcherServlet</servlet-name><!-- ⽤url-pattern指定拦截的请求路径! --><url-pattern>/</url-pattern></servlet-mapping>3.创建SpringMVC的配置⽂件并添加要扫描的包注意:1.创建SpringMVC配置⽂件的名字要和上⾯在web.xml⽂件中指定的名字⼀致!2.我们创建SpringMVC配置⽂件的时候使⽤的是Spring Bean Configuration File创建的,不是XML!<!-- 配置SpingMVC容器要扫描的包! --><context:component-scan base-package="com.neuedu.controller"></context:component-scan>4.在springMVC扫描的包下创建控制器类[Controller/Handler],注意要加⼊@Controller注解/*** 我们通过@RequestMapping做请求URL的映射!* @return*/@RequestMapping("/sayHello")public String sayHello(){return "/WEB-INF/views/success.jsp";}注意:在类的⽅法上我们使⽤的是@RequestMapping,然后在括号⾥指定请求url的请求路径!5.创建页⾯!注意:1.当我们不⽤init-param指定springMVC配置⽂件的路径好位置的时候,SpringMVC默认会去/WEB-INF/<servlet-name>-servlet.xml2.配置视图解析器<!--InternalResourceViewResolvers 是视图解析器,它会将逻辑视图转换成实际的物理视图,做⼀个转发操作!也就是说具体步骤:prefix + ⽅法的返回值 + suffix--><!-- /WEB-INF/views/success.jsp --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean>3.请求⼀个SpringMVC的流程!5.)使⽤ @RequestMapping 映射请求Spring MVC 使⽤ @RequestMapping 注解为控制器指定可以处理哪些 URL 请求在控制器的类定义及⽅法定义处都可标注@RequestMapping– 类定义处:提供初步的请求映射信息。
Spring MVC学习指南以下这个学习案例是我最近学习Spring MVC时跟从一本书上的示例,原文中的示例代码有一些小错误,不过我在调试的过程中已经给予了修正,如还有其它错误,还请各位批评指正。
对于现有较成熟的Model-View-Control(MVC)框架而言,其解决的主要问题无外乎下面几部分:1.将Web页面中的输入元素封装为一个(请求)数据对象。
2.根据请求的不同,调度相应的逻辑处理单元,并将(请求)数据对象作为参数传入。
3.逻辑处理单元完成运算后,返回一个结果数据对象。
4.将结果数据对象中的数据与预先设计的表现层相融合并展现给用户。
各个MVC 实现固然存在差异,但其中的关键流程大致如上。
结合一个实例,我们来看看这几个关键流程在Spring MVC框架中的处理手法。
下面的实例,实现了一个常见的用户登录逻辑,即用户通过用户名和密码登录,系统对用户名和密码进行检测,如果正确,则在页面上显示几条通知信息。
如果登录失败,则返回失败界面。
(示例中,表示层以JSP2.0实现。
)出于简洁考虑,这里的“用户名/密码”检测以及通知信息的生成均在代码中以硬编码实现。
首先来看登录界面:对应的index.html:<html><body><form method="POST" action="login.do"><p align="center">登录</p><br>用户名:<input type="text" name="username" ><br>密码:<input type="password" name="password" ><br><p><input type="submit" value="提交" name="B1"> <input type="reset" value="重置" name="B2"> </p></form></body></html>很简单的一个登录界面,其中包含了一个用以输入用户名密码的form,针对此form的提交将被发送到"login.do"MVC 关键流程的第一步,即收集页面输入参数,并转换为请求数据对象。
Spring MVC开发技术指南(微课版)
佚名
【期刊名称】《计算机教育》
【年(卷),期】2022()10
【摘要】ISBN:9787302555209作者:陈恒、楼偶俊、巩庆志、张立杰出版单位:清华大学出版社出版时间:2020年7月字数:555千字定价:69.5元内容简
介:Spring MVC是一款优秀的基于MVC思想的应用框架,它是Spring的一个子框架。
本书以大量的实例介绍了Spring MVC+MyBatis框架的基本思想、方法和技术,同时配备了相应的实践环节巩固Spring MVC应用开发的方法和技术,力图达到“做中学,学中做”。
【总页数】1页(P30-30)
【正文语种】中文
【中图分类】TP3
【相关文献】
1.微创硬化治疗技术指南 (2012版)
2.小学语文教学中如何用好微课资源——以北师大版《语文教师教学用书(一年级上册)》光盘中的微课为例
3.微课制作小技巧\r——以蒙版微课设计为例
4.Spring MVC开发技术指南(微课版)
5.Spring MVC 开发技术指南(微课版)
因版权原因,仅展示原文概要,查看原文内容请购买。