黑马程序员springmvc教程第二天:包装类型pojo参数绑定和集合类型绑定
- 格式:docx
- 大小:141.85 KB
- 文档页数:4
SpringMVC数据绑定-2在系列(4)中我们介绍了如何用@RequestParam来绑定数据,下面我们来看一下其它几个数据绑定注解的使用方法。
1.@PathVariable 用来绑定URL模板变量值,2.@CookieValue 用来绑定Cookie中的数据。
下面我们用获取Cookie中的sessionId做测试:在DataBindController添加cookiebind action,复制代码//@CookieValue Test@RequestMapping(value="/cookiebind", method = {RequestMethod.GET})public String cookieBind(HttpServletRequest request, Model model, @CookieValue(value="JSESSIONID", defaultValue="") String jsessionId){model.addAttribute("jsessionId", jsessionId);return "cookiebindresult";}复制代码在views文件夹中添加一个cookiebindresult.jsp视图复制代码<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>${jsessionId}</body></html>复制代码可以看到已经获取到了sessionId。
JavaBean中包含四种类型的属性,它们分别是简单属性(simple property)、索引属性(indexed property)、绑定属性(bound property)和约束属性(constrained property),首先对前两种属性进行介绍。
1、简单属性简单属性是非数组类型的属性,它的修改器必须接受一个参数,参数类型由属性的特性决定,可以是任意类型。
而简单属性的访问器仅仅是用于返回属性的值,它不接受任何参数,但它要返回一个值,返回值的类型必须与修改器所接收的参数类型一致。
public class Book {private double price;publicString getPrice() {return price;}public voidsetPrice(double price) {this.price= price;}}2、索引属性索引属性是数组类型的属性,JavaBean中需要对索引索性提供两对setter和getter方法,一对用于设置和获取数组本身,另一对用于设置和获取数组中的元素。
接下来就通过一个JavaBean来演示索引属性的定义,代码如例程所示。
class Person {// 索引属性hobbiesprivateString[] hobbies;// 设置和获取属性本身publicString[] getHobbies() {returnhobbies;}publicvoid setHobbies(String[] hobbies) {this.hobbies= hobbies;}// 设置和获取属性中的元素publicString getHobbies(int i) {returnhobbies;}publicvoid setHobbies(int i, String hobby) {hobbies= hobby;}}在例程所示的JavaBean中,定义了一个索引属性hobbies,为了使外界能够方便的操作该属性,提供了一对重载的setHobbies()方法和一对重载的getHobbies()方法,其中setHobbies(String hobbies)方法用于设置数组属性hobboes本身,而setHobbies(int i,String hobby)方法用于设置数组属性中的元素。
springmvc 第一天springmvc的基础知识课程安排:第一天:springmvc的基础知识什么是springmvc?springmvc框架原理(掌握)前端控制器、处理器映射器、处理器适配器、视图解析器springmvc入门程序目的:对前端控制器、处理器映射器、处理器适配器、视图解析器学习非注解的处理器映射器、处理器适配器注解的处理器映射器、处理器适配器(掌握)springmvc和mybatis整合(掌握)springmvc注解开发:(掌握)常用的注解学习参数绑定(简单类型、pojo、集合类型(明天讲))自定义参数绑定(掌握)springmvc和struts2区别第二天:springmvc的高级应用参数绑定(集合类型)数据回显上传图片json数据交互RESTful支持拦截器1springmvc框架1.1什么是springmvcspringmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。
(struts2与Spring整合的时候需要借助单独的jar包)springmvc是一个基于mvc的web框架。
1.2 mvc 在b/s 系统 下的应用mvc 是一个设计模式,mvc 在b/s 系统 下的应用:C 控制器比如struts2中的filter controller 接口用户请求, 响应request 请求M 模型(model) pojo action service dao请求模型进行处理处理结果返回V 视图 view视图渲染将模型数据填充到request 域response 响应b/s 系统下模型无法将数据填充到视图1.3 springmvc 框架第一步:发起请求到前端控制器(DispatcherServlet)第二步:前端控制器请求HandlerMapping 查找 Handler 可以根据xml 配置、注解进行查找第三步:处理器映射器HandlerMapping 向前端控制器返回Handler 第四步:前端控制器调用处理器适配器去执行Handler 第五步:处理器适配器去执行Handler第六步:Handler执行完成给适配器返回ModelAndView第七步:处理器适配器向前端控制器返回ModelAndViewModelAndView是springmvc框架的一个底层对象,包括Model和view第八步:前端控制器请求视图解析器去进行视图解析根据逻辑视图名解析成真正的视图(jsp)第九步:视图解析器向前端控制器返回View第十步:前端控制器进行视图渲染视图渲染将模型数据(在ModelAndView对象中)填充到request域第十一步:前端控制器向用户响应结果组件:1、前端控制器DispatcherServlet(不需要程序员开发)作用接收请求,响应结果,相当于转发器,中央处理器。
springmvc第二天高级知识复习:springmvc框架:DispatcherServlet前端控制器:接收request,进行responseHandlerMapping处理器映射器:根据url查找Handler。
(可以通过xml配置方式,注解方式)HandlerAdapter处理器适配器:根据特定规则去执行Handler,编写Handler时需要按照HandlerAdapter的要求去编写。
Handler处理器(后端控制器):需要程序员去编写,常用注解开发方式。
Handler处理器执行后结果是ModelAndView,具体开发时Handler返回方法值类型包括:ModelAndView、String(逻辑视图名)、void(通过在Handler形参中添加request和response,类似原始servlet开发方式,注意:可以通过指定response响应的结果类型实现json数据输出)View resolver视图解析器:根据逻辑视图名生成真正的视图(在springmvc中使用View对象表示)View视图:jsp页面,仅是数据展示,没有业务逻辑。
注解开发:使用注解方式的处理器映射器和适配器:<!--注解映射器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl erMapping"/><!--注解适配器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl erAdapter"/>在实际开发,使用<mvc:annotation-driven>代替上边处理器映射器和适配器配置。
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框架还支持参数校验,这是一种安全措施,可以确保参数的正确性。
拦截器拦截定义定义拦截器,实现HandlerInterceptor接口。
接口中提供三个方法。
publicclass HandlerInterceptor1implements HandlerInterceptor { //进入 Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行@Overridepublicboolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {//return false表示拦截,不向下执行//return true表示放行returnfalse;}//进入Handler方法之后,返回modelAndView之前执行//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图@Overridepublicvoid postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception { }//执行Handler完成执行此方法//应用场景:统一异常处理,统一日志处理@Overridepublicvoid afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {}}拦截器配置针对HandlerMapping配置springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该拦截器。
◆Spring-mvc知识➢概念Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。
图1 Spring Web MVC核心架构图理解这张图之前我们得先知道以下的几个名词:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器(Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)步骤解析:核心架构的具体流程步骤如下:1、首先用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;2、DispatcherServlet——>HandlerMapping,HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;3、DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;4、HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);5、ModelAndView的逻辑视图名——> ViewResolver,ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;6、View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;7、返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。
简单类型
通过@RequestParam对简单类型的参数进行绑定。
如果不使用@RequestParam,要求request传入参数名称和controller方法的形参名称一致,方可绑定成功。
如果使用@RequestParam,不用限制request传入参数名称和controller方法的形参名称一致。
通过required属性指定参数是否必须要传入,如果设置为true,没有传入参数,报下边错误:
参考教案对其它简单类型绑定进行测试。
pojo绑定
页面中input的name和controller的pojo形参中的属性名称一致,将页面中数据绑定到pojo。
页面定义:
controller的pojo形参的定义:
自定义参数绑定实现日期类型绑定
对于controller形参中pojo对象,如果属性中有日期类型,需要自定义参数绑定。
将请求日期数据串传成日期类型,要转换的日期类型和pojo中日期属性的类型保持一致。
所以自定义参数绑定将日期串转成java.util.Date类型。
需要向处理器适配器中注入自定义的参数绑定组件。
自定义日期类型绑定
配置方式。
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)中做判断。
编程技术-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配置⽂件的三个常⽤配置详解 Spring MVC项⽬中通常会有⼆个配置⽂件,sprng-servlet.xml和applicationContext.xml⼆个配置⽂件,通常会出现以下⼏个配置 1. <context:annotation-config /> 它的作⽤是隐式地向 Spring 容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor、RequiredAnnotationBeanPostProcessor 这4个BeanPostProcessor。
其作⽤是如果你想在程序中使⽤注解,就必须先注册该注解对应的类,如下图所⽰:依赖的类注解CommonAnnotationBeanPostProcessor@Resource 、@PostConstruct、@PreDestroy PersistenceAnnotationBeanPostProcessor的Bean@PersistenceContextAutowiredAnnotationBeanPostProcessor Bean@AutowiredRequiredAnnotationBeanPostProcessor@Required 当然也可以⾃⼰进⾏注册:<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor "/><bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/> 2. <context:component-scan base-package="com.*" ><context:component-scan/> 配置项不但启⽤了对类包进⾏扫描以实施注释驱动 Bean 定义的功能,同时还启⽤了注释驱动⾃动注⼊的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使⽤<context:component-scan/> 后,就可以将 <context:annotation-config/> 移除了。
SpringBoot(或SpringMVC)的各种参数绑定⽅式总结后端开发中会遇到很多前后端参数传递的内容,⼯作时遇到各种各样的参数传递⽅式,觉得⽐较混乱,所以花了⼀点时间整理总结下来,以便后续开发中能够快速地找到合适的参数绑定⽅式。
本次主要分为三个模块,⼀个是基本模式,⼀个是json模式,⼀个是通过⾃定义的⼯具类处理参数绑定模式。
⼀、基本模式1、基本数据类型(以int为例)在controller中写⼀个int参数绑定的⽅法@GetMapping("/getInt")public BaseResponse getInt(int id){BaseResponse baseResponse = new BaseResponse();try{int param = id;baseResponse.setCode(BaseResponse.RESPONSE_SUCCESS_CODE);baseResponse.setMsg("获取参数成功");baseResponse.setData(param);}catch (Exception e){baseResponse.setCode(BaseResponse.RESPONSE_ERROR_CODE);baseResponse.setMsg("获取参数失败");}finally {return baseResponse;}}总结:1)⽤基本类型进⾏参数绑定时,就必须传⼊key值,且value值必须是声明的基本类型,如果页⾯提交的数据为null或“”的话会出现数据转换异常,因此最好使⽤包装类型参数2)前端的参数名和controller的参数名保持⼀致时就能完成数据绑定,不⼀致可以使⽤@RequestParam2、包装类型参数绑定(推荐使⽤)在controller中写多个包装类型参数绑定的⽅法@GetMapping("/getUser")public BaseResponse getUser(String name,Integer age){BaseResponse baseResponse = new BaseResponse();try{String paramName = name;Integer paramAge = age;Map<String,Object> result = new HashMap<>();result.put("name:",paramName);result.put("age:",paramAge);baseResponse.setCode(BaseResponse.RESPONSE_SUCCESS_CODE);baseResponse.setMsg("获取参数成功");baseResponse.setData(result);}catch (Exception e){baseResponse.setCode(BaseResponse.RESPONSE_ERROR_CODE);baseResponse.setMsg("获取参数失败");}finally {return baseResponse;}}总结:1)包装类型绑定参数时和基本数据类型⼀样,传的key值要和⾥⾯绑定的参数名⼀致 2)包装类型绑定参数时参数的值可以不传为null,也可以为空3、⾃定义对象类型参数绑定⾃定义实体类在controller中设置User类型参数总结:1)只要将对象的属性名和前端的input的参数名⼀致即可4、⾃定义复合对象类型参数绑定增加另⼀级对象的实体类在controller层代码和上⾯⼀样总结:1)⾃定义复合对象类型和⾃定义对象类型是⼀样的⽤法2)⾃定义复合对象类型前端input的参数名要使⽤“属性名(对象类型的属性).属性名"来命名5、List参数绑定List需要绑定在对象上,⽽不能直接写在Controller⽅法的参数中实体类定义List类型参数controller使⽤定义了List类型属性的类型的参数总结:1)list不可以直接写在controller的⽅法参数中,需要绑定在类中2)前端的表单提交需要指定list的下标,命名规则为“controller参数名[i].属性名”,有点和⾃定义复合对象类型的命名规则6、Map参数绑定Map也需要绑定在对象上,⽽不能直接写在Controller⽅法的参数中Map实体类在这⾥我只能通过json格式传送,没有找到合适的办法,后续找到再更新总结:1)Map不可以直接写在controller的⽅法参数中,需要绑定在类中2)在这⾥使⽤了@RequestBody,但是基本⽅式应该也有⽅法传递Map类型的参数的,后续Map类型的⽤途更⼴泛7、@RequestParam注解解析@RequestParam注解的作⽤有参数限制、设置参数默认值、⾃定义参数名称1).参数限制(可⽤required=false关闭)2)设置参数默认值3)⾃定义参数名称总结:1)@RequestParam注解设置更改参数名称、设置参数限制以及设置参数默认值,可根据不同场景使⽤ 2)@RequestParam可以多个使⽤8、数组类型参数绑定1)基本数组类型接收参数总结:很简单,直接⽤数组类型接收即可2)List类型接收参数总结:1)不可以缺少@RequestParam注解,否则会报错⼆、Json模式参数绑定由于前后端分离以及前端的多样性,通常我们使⽤json数据格式进⾏参数/数据传递,说到json格式,就得先说⼀下@RequestBody,这个是使⽤Json模式进⾏参数绑定必不可少的⼀环1、@RequestBody注解解析1)@RequestBody注解的作⽤将json格式的数据转为java对象2)@RequestBody常⽤其来处理application/json类型3)@RequestBody接收的是⼀个json格式的字符串2、json模式直接绑定⾃定义对象类型总结:1)直接json字符串转换成javaBean,但是前端传的⼀定是json格式的数据 2)参数名必须和实体类定义的属性名⼀直才可以正确获取参数3、json模式直接绑定⾃定义复合对象类型总结:1)两者都需要参数名和实体类定义的属性名⼀致2)直接获取的⽅式,层级的参数名需要⽤.指定;@RequestBody形式参数json格式需要⽤嵌套的形式4、json模式绑定数组类型(⼀般⽤于批量操作)controller使⽤@RequestBody+List接收数组(推荐)总结:1)@RequestBody获取List数组类型参数使⽤⽐较⼴泛2)后续可以将list中的内容转化为String类型,以","分割5、json模式绑定多个对象(参数类型相同)1)使⽤List<E>获取2)使⽤Map<String,Object>接收三、Json解析1、关于json1)json可以分json字符串和json对象(JsonObject),使⽤@RequestParam可以接收JsonObject的参数,但是使⽤@RequestBody只能接收json字符串2)json可以理解为键值对,除了以上通过pojo/List接收,通常也可以⽤Map<String,Object> map进⾏接收(常⽤),但是要⽤@RequestBody注解3)在上传Json对象,也可以绑定pojo,但是不要使⽤@RequestParam注解2、json解析1)JSONObject的常⽤⽅法a.put(String key, Object value):设置(增加)键值对,key相同的话保留后⾯的值b.Object get(String key)::根据key值获取JSONObject对象中对应的value值,返回类型是Objectc..int size():获取JSONObject对象中键值对的数量d.containsKey(Object key):判断是否有需要的key值e.boolean containsValue(Object value):判断是否有需要的value值f.JSONObject getJSONObject(String key):如果JSONObjct对象中的value是⼀个JSONObject对象,即根据key获取对应的JSONObject对象;g.JSONArray getJSONArray(String key) :如果JSONObject对象中的value是⼀个JSONObject数组,既根据key获取对应的JSONObject数组;h.Object remove(Object key):根据key清除某⼀个键值对。
springmvc - day01 - 课堂笔记springmvc 入门课程回顾:1、 mybatis的输入映射和输出映射? 输入映射(传递的参数类型)--- parameterType1、基本类型2、 pojo(包装pojo)3、集合? 输出映射(返回的结果类型)--- resultType(一一对应)、resultMap(可以将不一致的列名映射到指定属性上;高级映射(一对一、一对多)) 1、基本类型2、pojo 3、集合2、 mybatis的动态sql? 概念:通过mybatis提供的标签将符合条件的sql语句拼接到一起组成一个完整的sql语句。
? if、where? foreach:list:单个list、对象包装list? sql片段:好处:将公共的sql提取,提高sql的重用性 3、 mybatis的高级映射 ? resultMap1、一对一管理关系:association:property javaType2、一对多关联关系:collection:property ofType4、 mybatis与spring的整合? 目的:将mybatis交给spring管理1、加载外部资源文件2、数据源管理3、管理SQLSessionFactory4、批量代理对象的管理5、 mybatis的逆向工程? 实现原理:通过模板技术:freemarker、velocity ? 学会调用生成的方法(crud) hibernate和mybatis区别: 1、 sql的编写2、维护性(hibernate:传统项目;mybatis:互联网、电商)3、 hibernate:全自动化的orm框架;mybatis不完全的orm框架。
4、 mybatis:对数据库无关性要求更高;#{}、${}mybatis:输入、输出、sql ---- orm课程计划:1、 springmvc介绍和框架原理2、编写入门程序3、 ssm整合(springmvc-sprign-mybatis)4、 springmvc的参数绑定5、 struts2和springmvc的区别1 springmvc介绍和框架原理1.1 介绍springmvc:它是一个表现层框架(web层框架:获取数据,将数据处理完成后响应给用户)。
【黑马程序员】关于spring的面试和笔试题(一)1. 什么是spring?Spring 是个java企业级应用的开源开发框架。
Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。
Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。
2. 使用Spring框架的好处是什么?轻量:Spring 是轻量的,基本的版本大约2MB控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开容器:Spring 包含并管理应用中对象的生命周期和配置MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate orJDO抛出的)转化为一致的unchecked 异常3. Spring由哪些模块组成?以下是Spring 框架的基本模块:Core moduleBean moduleContext moduleExpression Language moduleJDBC moduleORM moduleOXM moduleJava Messaging Service(JMS)moduleTransaction moduleWeb moduleWeb-Servlet moduleWeb-Struts moduleWeb-Portlet module4. 核心容器(应用上下文) 模块这是基本的Spring模块,提供spring 框架的基础功能,BeanFactory 是任何以spring为基础的应用的核心。
详解SpringBootWeb项⽬之参数绑定⼀、@RequestParam这个注解⽤来绑定单个请求数据,既可以是url中的参数,也可以是表单提交的参数和上传的⽂件它有三个属性,value⽤于设置参数名,defaultValue⽤于对参数设置默认值,required为true时,如果参数为空,会报错好,下⾯展⽰具体例⼦:⾸先是vm:<h1>param1:${param1}</h1><h1>param2:${param2}</h1>好吧,就为了展⽰两个参数第⼀种情况:@RequestMapping(value = "/hello1.htm")public String hello1(ModelMap modelMap,Integer param1, int param2) {modelMap.addAttribute("param1", param1);modelMap.addAttribute("param2", param2);return "hello";}这⾥前⾯的参数时包装型,后⾯的参数时原始类型直接⽤url请求:结果:但是:如果不传param2: 直接就报错了因为⽆法将null转换为原始类型所以:建议所有的参数都⽤包装类型,别⽤原始类型第⼆种情况:仍然是上⾯的那个controller,地址改为就是让param2=1,param1=2,想试验下,参数绑定是和顺序有关,还是只和参数名称有关,结果:所以,springMvc参数绑定只和参数名字有关系第三种情况:如果页⾯上表单⾥的参数和代码⾥的参数名不⼀样怎么办,这时候就可以⽤注解了:@RequestMapping(value = "/hello1.htm")public String hello1(ModelMap modelMap, @RequestParam(value = "paramTest") Integer param1, Integer param2) {modelMap.addAttribute("param1", param1);modelMap.addAttribute("param2", param2);return "hello";}在param1前⾯加上了注解,这时候第⼀个参数只接受paramTest名字的参数,param1此时⽆效了。
包装类型pojo参数绑定
需求
商品查询controller方法中实现商品查询条件传入。
实现方法
第一种方法:在形参中添加HttpServletRequest request参数,通过request接收查询条件参数。
第二种方法:在形参中让包装类型的pojo接收查询条件参数。
分析:
页面传参数的特点:复杂,多样性。
条件包括:用户账号、商品编号、订单信息。
如果将用户账号、商品编号、订单信息等放在简单pojo(属性是简单类型)中,pojo类属性比较多,比较乱。
建议使用包装类型的pojo,pojo中属性是pojo。
页面参数和controller方法形参定义
页面参数:
商品名称:<input name="" />
注意:itemsCustom和包装pojo中的属性一致即可。
controller方法形参:
public ModelAndView queryItems(HttpServletRequest
request,ItemsQueryVo itemsQueryVo) throws Exception
集合类型绑定
数组绑定
需求
商品批量删除,用户在页面选择多个商品,批量删除。
表现层实现
关键:将页面选择(多选)的商品id,传到controller方法的形参,方法形参使用数组接收页面请求的多个商品id。
controller方法定义:
页面定义:
list绑定
需求
通常在需要批量提交数据时,将提交的数据绑定到list<pojo>中,比如:成绩录入(录入多门课成绩,批量提交),
本例子需求:批量商品修改,在页面输入多个商品信息,将多个商品信息提交到controller方法中。
表现层实现
controller方法定义:
1、进入批量商品修改页面(页面样式参考商品列表实现)
2、批量修改商品提交
使用List接收页面提交的批量数据,通过包装pojo接收,在包装pojo中定义list<pojo>属性
页面定义:
map绑定
也通过在包装pojo中定义map类型属性。
在包装类中定义Map对象,并添加get/set方法,action使用包装对象接收。
包装类中定义Map对象如下:
Publicclass QueryVo {
private Map<String, Object>itemInfo = new HashMap<String, Object>(); //get/set方法..
}
页面定义如下:
<tr>
<td>学生信息:</td>
<td>
姓名:<input type="text"name="itemInfo['name']"/>
年龄:<input type="text"name="itemInfo['price']"/>
.. .. ..
</td>
</tr>
Contrller方法定义如下:
public String useraddsubmit(Model model,QueryVoqueryVo)throws Exception{ System.out.println(queryVo.getStudentinfo());
}。