个人摄影网站源码,黑彩网站建设,thinkphp 网站模版,哪个网站能在家做兼职文章目录 参数绑定默认支持的参数类型参数绑定使用要求简单类型RequestParam注解 绑定POJO类型绑定集合或者数组类型 参数绑定示例JSP代码Controller代码PO代码 自定义日期参数绑定Converter代码Converter配置 文件类型参数绑定加入依赖包上传页面配置Multipart解析器Controlle… 文章目录 参数绑定默认支持的参数类型参数绑定使用要求简单类型RequestParam注解 绑定POJO类型绑定集合或者数组类型 参数绑定示例JSP代码Controller代码PO代码 自定义日期参数绑定Converter代码Converter配置 文件类型参数绑定加入依赖包上传页面配置Multipart解析器Controller类代码 参数绑定
什么是参数绑定 就是将请求参数串中的value值获取到之后再进行类型转换然后将转换后的值赋值给Controller 类中方法的形参这个过程就是参数绑定。 总结参数绑定需要两步 –类型转换请求中的String类型值—Controller各种数据类型的方法形参 –赋值操作将转换之后的值赋值给Controller方法形参 请求参数格式 默认是key/value格式比如 http://XXXXX?id1type301 请求参数值的数据类型 都是String类型的各种值 请求参数值要绑定的目标类型 Controller类中的方法参数比如简单类型、POJO类型、集合类型等 SpringMVC内置的参数解析组件 默认内置了24种参数解析组件ArgumentResolver 默认支持的参数类型
Controller方法形参中可以随时添加如下类型的参数Servlet API支持处理适配器会自动识别并进行赋值
HttpServletRequest 通过 request 对象获取请求信息 HttpServletResponse 通过 response 处理响应信息 HttpSession 通过 session 对象得到 session 中存放的对象 InputStream、OutputStreamReader、WriterModel/ModelMap ModelMap 继承自 LinkedHashMap Model是一个接口它们的底层实现都是同一个类 BindingAwareModelMap 作用就是向页面传递数据相当于 Request 的作用如下 model.addAttribute(msg, “测试springmvc”);参数绑定使用要求
简单类型
直接绑定 http请求参数的【key】和controller方法的【形参名称】一致 注解绑定 请求参数的【key】和controller方法的【形参名称】不一致时需要使用【RequestParam】注解才能将请求参数绑定成功。 RequestParam注解
value 参数名字即入参的请求参数名字如value“itemid”表示请求的参数中的名字为itemid的参数的值将传入 required 是否必须默认是true表示请求中一定要有相应的参数否则将报 TTP Status 400 - Required Integer parameter ‘XXXX’ is not present defaultValue 默认值表示如果请求中没有同名参数时的默认值 绑定POJO类型 要求表单中【参数名称】和Controller方法中的【POJO形参的属性名称】保持一致。 绑定集合或者数组类型
简单类型数组 通过HTTP请求批量传递简单类型数据的情况Controller方法中可以用String[]或者pojo的String[]属性接收两种方式任选其一但是不能使用List集合接收。 POJO类型集合或者数组 批量传递的请求参数最终要使用List来接收那么这个List必须放在另一个POJO类中。 参数绑定示例
JSP代码 % page languagejava contentTypetext/html; charsetUTF-8
pageEncodingUTF-8%
!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
http://www.w3.org/TR/html4/loose.dtd
html
head
meta http-equivContent-Type contenttext/html; charsetUTF-8
title参数绑定演示demo/title
/head
body
!-- request请求的内容类型主要分为K/V类型、Multipart类型、JSON类型 --
!-- 将request请求参数绑定到简单类型基本类型和String类型方法参数 --
!-- 直接绑定 --
a href${pageContext.request.contextPath}/user/findUserById?
id1namebingbing查询用户1/a
!-- RequestParam注解绑定 --
a href${pageContext.request.contextPath}/user/findUserById2?uid1查询用
户2/a
!-- 将request请求参数绑定到POJO类型(简单POJO和包装POJO的)方法参数 --
form action${pageContext.request.contextPath}/user/saveUser
methodpost
用户名称input typetext nameusernamebr /
用户性别input typetext namesexbr /
所属省份input typetext nameaddress.provinceNamebr /
所属城市input typetext nameaddress.cityNamebr /
input typesubmit value保存
/form
!-- 将request请求参数绑定到[元素是简单类型的集合或数组]参数 --
!-- 使用数组接收 --
a href${pageContext.request.contextPath}/user/findUserByIds?
id1id2id3根据ID批量删除用户/a
!-- 使用List接收错误示例 --
a href${pageContext.request.contextPath}/user/findUserByIds2?
id1id2id3根据ID批量删除用户/a
!-- 使用Bean的List属性接收 --
a href${pageContext.request.contextPath}/user/findUserByIds3?
uid1uid2uid3根据ID批量删除用户/a
!-- 将request请求参数绑定到[元素是POJO类型的List集合或Map集合]参数 --
form action${pageContext.request.contextPath}/user/updateUser
methodpost
用户名称input typetext nameusernamebr /
用户性别input typetext namesexbr /
!-- itemList[集合下标]集合下标必须从0开始 --
!-- 辅助理解先将name属性封装到一个Item对象中再将该Item对象放入itemList集合的
指定下标处 --
购买商品1名称input typetext nameitemList[0].namebr /
购买商品1价格input typetext nameitemList[0].pricebr /
购买商品2名称input typetext nameitemList[1].namebr /
购买商品2价格input typetext nameitemList[1].pricebr /
!-- itemMap[item3]其中的item3、item4就是Map集合的key --
!-- 辅助理解先将name属性封装到一个Item对象中再将该Item对象作为value放入
itemMap集合的指定key处 --
购买商品3名称input typetext nameitemMap[item3].namebr /
购买商品3价格input typetext nameitemMap[item3].pricebr /
购买商品4名称input typetext nameitemMap[item4].namebr /
购买商品4价格input typetext nameitemMap[item4].pricebr /
input typesubmit value保存
/form
!-- 将request请求参数绑定到Date类型方法参数 --
!-- 请求参数是【年月日】 格式 --
a href${pageContext.request.contextPath}/user/deleteUser?birthday2018-
01-01根据日期删除用户(String)/a
!-- 请求参数是【年月日 时分秒】 格式 --
a href${pageContext.request.contextPath}/user/deleteUser2?birthday2018-
01-01 12:10:33根据日期删除用户(Date)/a
!-- 文件类型参数绑定 --
form action${pageContext.request.contextPath}/fileupload methodpost
enctypemultipart/form-data
图片input typefile nameuploadFile /br /
input typesubmit value上传 /
/form
/body
/html
Controller代码 /**
* 用来学习参数绑定
*
*/
RequestMapping(user)
Controller
public class UserController {
RequestMapping(findUserById)
public String findUserById(Integer id,Model model,HttpServletRequest
request) {
model.addAttribute(msg, 直接参数绑定接收到的参数id);
model.addAttribute(msg, 通过Request getParameter参数接收到的参
数request.getParameter(id));
return success;
}
// RequestParam可以理解为request.getParameter(参数key)
RequestMapping(findUserById2)
public String findUserById2(RequestParam(uid) Integer id,Model model) {
model.addAttribute(msg, 接收到的参数id);
return success;
}
RequestMapping(saveUser)
public String saveUser(User user,Model model) {
model.addAttribute(msg, 接收到的参数user.toString());
return success;
}
RequestMapping(deleteUser)
public String deleteUser(String birthday,Model model) {
model.addAttribute(msg, 接收到的参数birthday);
return success;
}
RequestMapping(deleteUser2)
public String deleteUser2(Date birthday,Model model) {
model.addAttribute(msg, 接收到的参数birthday);
return success;
}
RequestMapping(findUserByIds)
public String findUserByIds(Integer[] id,Model model) {
model.addAttribute(msg, 接收到的参数id);
return success;
}
RequestMapping(findUserByIds2)
public String findUserByIds2(ListInteger id,Model model) {
model.addAttribute(msg, 接收到的参数id);
return success;
}
RequestMapping(findUserByIds3)
public String findUserByIds3(User user,Model model) {
model.addAttribute(msg, 接收到的参数user.getUid());
return success;
}
RequestMapping(updateUser)
public String updateUser(User user,Model model) {
model.addAttribute(msg, 接收到的参数user.getUid());
return success;
}
}
PO代码 public class User {
private int id;
private String username;
private Date birthday;
private String sex;
// 演示包装POJO参数绑定
private Address address;
// 演示批量简单类型参数接收
private ListInteger uid new ArrayList();
// 将request请求参数绑定到[元素是POJO类型的List集合]参数
private ListItem itemList new ArrayList();
// 将request请求参数绑定到[元素是POJO类型的Map集合]参数
private MapString, Item itemMap new HashMap();
//setter/getter方法
}
自定义日期参数绑定 对于springmvc无法解析的参数绑定类型比如[年月日时分秒格式的日期]绑定到Date类型会报错此时需 要自定义[参数转换器]进行参数绑定。 Converter代码 public class DateConverter implements ConverterString, Date {
Override
public Date convert(String source) {
SimpleDateFormat simpleDateFormat new SimpleDateFormat(yyyy-MM-dd);
try {
return simpleDateFormat.parse(source);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
Converter配置 !-- 加载注解驱动 --
mvc:annotation-driven conversion-serviceconversionService/
!-- 转换器配置 --
bean idconversionService
classorg.springframework.format.support.FormattingConversionServiceFactoryBeanproperty nameconverters
set
bean classcom.ssm.controller.converter.DateConverter/
/set
/property
/bean
文件类型参数绑定
SpringMVC 文件上传的实现是由 commons-fileupload 这个第三方jar包实现的。
加入依赖包 dependency
groupIdcommons-fileupload/groupId
artifactIdcommons-fileupload/artifactId
version1.3.1/version
/dependency
上传页面 JSP中的form表单需要指定enctype”multipart/form-data” 配置Multipart解析器
在 springmvc.xml 中配置 multipart 类型解析器
!-- multipart类型解析器文件上传 --
bean idmultipartResolver
classorg.springframework.web.multipart.commons.CommonsMultipartResolver
!-- 上传文件的最大尺寸 5M--
property namemaxUploadSize value5242880/
/beanController类代码 RequestMapping(fileupload)
public String findUserById(MultipartFile uploadFile) throws Exception {
// 编写文件上传逻辑mvc模式和三层结构模式
// 三层模式表现层controller、action、业务层service、biz、持久层dao、
mapper
// MVC模式主要就是来解决表现层的问题的原始的表现层是使用Servlet编写即编写业务逻
辑又编写视图展示
if (uploadFile ! null) {
System.out.println(uploadFile.getOriginalFilename());
// 原始图片名称
String originalFilename uploadFile.getOriginalFilename();
// 如果没有图片名称则上传不成功
if (originalFilename ! null originalFilename.length() 0) {
// 存放图片的物理路径
String picPath E:\\;
// 获取上传文件的扩展名
String extName
originalFilename.substring(originalFilename.lastIndexOf(.));
// 新文件的名称
String newFileName UUID.randomUUID() extName;
// 新的文件
File newFile new File(picPath newFileName);
// 把上传的文件保存成一个新的文件
uploadFile.transferTo(newFile);
// 同时需要把新的文件名更新到数据库中
}
}
return 文件上传成功;
}