西三环路网站建设,软文自助发稿平台oem,湖北建设厅,优化制造业布局文章目录 SpringMVC 获得请求数据获得请求参数获得基本类型参数获得POJO类型参数获得数组类型参数获得集合类型参数请求数据乱码问题参数绑定注解requestParam获得Restful风格的参数获得Restful风格的参数自定义类型转换器获得Servlet相关API获得请求头RequestHeaderCookieValu… 文章目录 SpringMVC 获得请求数据获得请求参数获得基本类型参数获得POJO类型参数获得数组类型参数获得集合类型参数请求数据乱码问题参数绑定注解requestParam获得Restful风格的参数获得Restful风格的参数自定义类型转换器获得Servlet相关API获得请求头RequestHeaderCookieValue 文件上传文件上传客户端三要素文件上传原理 单文件上传步骤 SpringMVC 获得请求数据
获得请求参数
客户端请求参数的格式是namevaluenamevalue… … 服务器端要获得请求的参数有时还需要进行数据的封装SpringMVC可以接收如下类型的参数 基本类型参数 POJO类型参数 数组类型参数 集合类型参数
获得基本类型参数
Controller中的业务方法的参数名称要与请求参数的name一致参数值会自动映射匹配。
http://localhost:8080/itheima_springmvc1/quick9?usernamezhangsanage12RequestMapping(/quick9)ResponseBodypublic void quickMethod9(String username,int age) throws IOException {System.out.println(username);System.out.println(age);}获得POJO类型参数
Controller中的业务方法的POJO参数的属性名与请求参数的name一致参数值会自动映射匹配。
http://localhost:8080/itheima_springmvc1/quick9?usernamezhangsanage1public class User {private String username;private int age;getter/setter…}RequestMapping(/quick10)ResponseBodypublic void quickMethod10(User user) throws IOException {System.out.println(user);}获得数组类型参数
Controller中的业务方法数组名称与请求参数的name一致参数值会自动映射匹配。
http://localhost:8080/itheima_springmvc1/quick11?strs111strs222strs333RequestMapping(/quick11)ResponseBodypublic void quickMethod11(String[] strs) throws IOException {System.out.println(Arrays.asList(strs));}
获得集合类型参数
获得集合参数时要将集合参数包装到一个POJO中才可以。
form action${pageContext.request.contextPath}/quick12 methodpostinput typetext nameuserList[0].usernamebrinput typetext nameuserList[0].agebrinput typetext nameuserList[1].usernamebrinput typetext nameuserList[1].agebrinput typesubmit value提交br/formRequestMapping(/quick12)ResponseBodypublic void quickMethod12(Vo vo) throws IOException {System.out.println(vo.getUserList());}当使用ajax提交时可以指定contentType为json形式那么在方法参数位置使用RequestBody可以直接接收集合数据而无需使用POJO进行包装。
script//模拟数据
var userList new Array();userList.push({username: zhangsan,age: 20});userList.push({username: lisi,age: 20});$.ajax({type: POST,url: /itheima_springmvc1/quick13,data: JSON.stringify(userList),contentType : application/json;charsetutf-8});/script当使用ajax提交时可以指定contentType为json形式那么在方法参数位置使用RequestBody可以直接接收集合数据而无需使用POJO进行包装。
RequestMapping(/quick13)ResponseBodypublic void quickMethod13(RequestBody ListUser userList) throws
IOException {System.out.println(userList);}注意通过谷歌开发者工具抓包发现没有加载到jquery文件原因是SpringMVC的前端控制器 DispatcherServlet的url-pattern配置的是/,代表对所有的资源都进行过滤操作我们可以通过以下两种 方式指定放行静态资源 • 在spring-mvc.xml配置文件中指定放行的资源 mvc:resources mapping“/js/**” location“/js/”/ • 使用mvc:default-servlet-handler/标签
请求数据乱码问题
当post请求时数据会出现乱码我们可以设置一个过滤器来进行编码的过滤。
filterfilter-nameCharacterEncodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameCharacterEncodingFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping参数绑定注解requestParam
当请求的参数名称与Controller的业务方法参数名称不一致时就需要通过RequestParam注解显示的绑定.
form action${pageContext.request.contextPath}/quick14 methodpostinput typetext namenamebrinput typesubmit value提交br/formRequestMapping(/quick14)ResponseBodypublic void quickMethod14(RequestParam(name) String username) throws
IOException {System.out.println(username);}
注解RequestParam还有如下参数可以使用 value与请求参数名称 required此在指定的请求参数是否必须包括默认是true提交时如果没有此参数则报错 defaultValue当没有指定请求参数时则使用指定的默认值赋值
获得Restful风格的参数
Restful是一种软件架构风格、设计风格而不是标准只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件基于这个风格设计的软件可以更简洁更有层次更易于实现缓存机制等。
Restful风格的请求是使用“url请求方式”表示一次请求目的的HTTP 协议里面四个表示操作方式的动词如下 GET用于获取资源 POST用于新建资源 PUT用于更新资源 DELETE用于删除资源
例如 /user/1 GET 得到id 1 的 user /user/1 DELETE 删除 id 1 的user /user/1 PUT 更新id 1 的user /user POST 新增user
获得Restful风格的参数
上述url地址/user/1中的1就是要获得的请求参数在SpringMVC中可以使用占位符进行参数绑定。地址/user/1可以写成/user/{id}占位符{id}对应的就是1的值。在业务方法中我们可以使用PathVariable注解进行占位符的匹配获取工作。
http://localhost:8080/itheima_springmvc1/quick19/zhangsanRequestMapping(/quick19/{name})ResponseBodypublic void quickMethod19(PathVariable(value name,required true) String name){System.out.println(name);}自定义类型转换器
• SpringMVC默认已经提供了一些常用的类型转换器例如客户端提交的字符串转换成int型进行参数设置。 • 但是不是所有的数据类型都提供了转换器没有提供的就需要自定义转换器例如日期类型的数据就需要自定义转换器。
自定义类型转换器的开发步骤 ① 定义转换器类实现Converter接口 ② 在配置文件中声明转换器 ③ 在annotation-driven中引用转换器
①定义转换器类实现Converter接口
public class DateConverter implements ConverterString,Date{Overridepublic Date convert(String source) {SimpleDateFormat format new SimpleDateFormat(yyyy-MM-dd);try {Date date format.parse(source);return date;} catch (ParseException e) {e.printStackTrace();}return null;}}②在配置文件中声明转换器
bean idconverterService
classorg.springframework.context.support.ConversionServiceFactoryBeanproperty nameconverterslistbean classcom.itheima.converter.DateConverter//list/property/bean③在中引用转换器
mvc:annotation-driven conversion-serviceconverterService/获得Servlet相关API
SpringMVC支持使用原始ServletAPI对象作为控制器方法的参数进行注入常用的对象如下 HttpServletRequest HttpServletResponse HttpSession
RequestMapping(/quick16)
ResponseBody
public void quickMethod16(HttpServletRequest request,HttpServletResponse
response,
HttpSession session){
System.out.println(request);
System.out.println(response);
System.out.println(session);
}获得请求头
RequestHeader
使用RequestHeader可以获得请求头信息相当于web阶段学习的request.getHeader(name) RequestHeader注解的属性如下 value请求头的名称 required是否必须携带此请求头
RequestMapping(/quick17)ResponseBodypublic void quickMethod17(RequestHeader(value User-Agent,required false) String headerValue){System.out.println(headerValue);}CookieValue
使用CookieValue可以获得指定Cookie的值 CookieValue注解的属性如下 value指定cookie的名称 required是否必须携带此cookie RequestMapping(/quick18)ResponseBodypublic void quickMethod18( CookieValue(value JSESSIONID,required false) String jsessionid){System.out.println(jsessionid);}文件上传
文件上传客户端三要素
表单项type“file” 表单的提交方式是post 表单的enctype属性是多部分表单形式及enctype“multipart/form-data” form action${pageContext.request.contextPath}/quick20 methodpost
enctypemultipart/form-data
名称input typetext namenamebr
文件input typefile namefilebr
input typesubmit value提交br/form文件上传原理
当form表单修改为多部分表单时request.getParameter()将失效。 enctype“application/x-www-form-urlencoded”时form表单的正文内容格式是keyvaluekeyvaluekeyvalue 当form表单的enctype取值为Mutilpart/form-data时请求正文内容就变成多部分形式
单文件上传步骤
① 导入fileupload和io坐标 ② 配置文件上传解析器 ③ 编写文件上传代码
①导入fileupload和io坐标 dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.3.3/version/dependencydependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion2.11.0/version/dependency②配置文件上传解析器
bean idmultipartResolver
classorg.springframework.web.multipart.commons.CommonsMultipartResolver!--上传文件总大小--property namemaxUploadSize value5242800/!--上传单个文件的大小--property namemaxUploadSizePerFile value5242800/!--上传文件的编码类型--property namedefaultEncoding valueUTF-8//bean③编写文件上传代码
RequestMapping(/quick20)ResponseBodypublic void quickMethod20(String name,MultipartFile uploadFile) throws
IOException {//获得文件名称
String originalFilename uploadFile.getOriginalFilename();//保存文件
uploadFile.transferTo(new File(C:\\upload\\originalFilename));}多文件上传只需要将页面修改为多个文件上传项将方法参数MultipartFile类型修改为MultipartFile[]即可
h1多文件上传测试/h1form action${pageContext.request.contextPath}/quick21 methodpost
enctypemultipart/form-data
名称input typetext namenamebr
文件1input typefile nameuploadFilesbr
文件2input typefile nameuploadFilesbr
文件3input typefile nameuploadFilesbrinput typesubmit value提交br/formRequestMapping(/quick21)ResponseBodypublic void quickMethod21(String name,MultipartFile[] uploadFiles) throws
IOException {for (MultipartFile uploadFile : uploadFiles){String originalFilename uploadFile.getOriginalFilename();uploadFile.transferTo(new File(C:\\upload\\originalFilename));}}