性能网站建设,网站建设设计策划,什么是网站的二级目录,长沙专业企业建站联系人目录 前言
一、SpringMVC的数据响应
1.1 SpringMVC的数据响应方式
1.1.1页面跳转 直接返回字符串
1.1.2通过ModelAndView对象返回
1.2 回写数据
1.2.1直接返回字符串
1.2.2返回对象或集合
二、SpringMVC获得请求数据
2.1 获得请求参数
2.2 获得基本类型…目录 前言
一、SpringMVC的数据响应
1.1 SpringMVC的数据响应方式
1.1.1页面跳转 直接返回字符串
1.1.2通过ModelAndView对象返回
1.2 回写数据
1.2.1直接返回字符串
1.2.2返回对象或集合
二、SpringMVC获得请求数据
2.1 获得请求参数
2.2 获得基本类型参数
2.3 获得POJO类型参数
2.4 获得数组类型参数
2.5 获得集合类型参数
2.6 请求数据乱码问题
2.7 参数绑定注解requestParam
2.8 获得Restful风格的参数
2.9 自定义类型转换器
2.10 获得Servlet相关API
2.11 获得请求头
2.12 文件上传
2.13 单文件上传步骤
2.15 多文件上传实现 前言
数据准备
链接: https://pan.baidu.com/s/17ztrNlfgu3NP_u2-5d9g3w 提取码: v05b
一、SpringMVC的数据响应
1.1 SpringMVC的数据响应方式
1.1.1页面跳转 直接返回字符串
在文件中新建一个文件夹将success.jsp 页面放进去2.在sring-mvc.xml文件中添加 !-- 配置资源视图解析器--
bean idviewResolve classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value/jsp//property namesuffix value.jsp/
/bean 此处添加的配置含义是
当页面放在jsp文件夹后tomcat服务器中资源success.jsp页面与默认的index.jsp不在同一个目录下因此在访问的真实路径中需要添加为/jsp/success.jsp
但是这太麻烦了而在。。。我也不记得了的父类源码中提供了一种在xml中配置真实访问路径的方法也就是上面这个配置文件因此在UserController文件中只需要配置访问的路径名字就可以不需要再写success.jsp 1.1.2通过ModelAndView对象返回 success.jsp /user/quick2 使用注入实现 1.2 回写数据
1.2.1直接返回字符串
Web基础阶段客户端访问服务器端如果想直接回写字符串作为响应体返回的话只需要使用 response.getWriter().print(“hello world”) 即可Controller中想直接回写字符串方法如下
1 通过SpringMVC框架注入的response对象使用response.getWriter().print(“hello world”) 回写数 据此时不需要视图跳转业务方法返回值为void。 Controller
RequestMapping(/user)
public class UserController {Date now new Date();String strDateFormat yyyy-MM-dd HH:mm:ss;LocalDateTime localDateTime now.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();String result localDateTime.format(DateTimeFormatter.ofPattern(strDateFormat));RequestMapping(value/quick6)public void invoke6(HttpServletResponse response) throws IOException {response.setCharacterEncoding(GBK);response.getWriter().write(现在时间是result);}此处异常先抛出后面会详细更更新
但此处仍不满足需求解耦合所以
2 将需要回写的字符串直接返回但此时需要通过ResponseBody注解告知SpringMVC框架方法 返回的字符串不是跳转是直接在http响应体中返回。
Controller
RequestMapping(/user)
public class UserController {Date now new Date();String strDateFormat yyyy-MM-dd HH:mm:ss;LocalDateTime localDateTime now.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();String result localDateTime.format(DateTimeFormatter.ofPattern(strDateFormat));ResponseBody //此处不进行页面跳转进行回写数据RequestMapping(value/quick7)public String invoke7(){return result;}
返回json格式
pom.xml文件导入json包dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.13.1/version
/dependency
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.13.1/version
/dependency
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.13.1/version
/dependency 模拟加入一个对象在当前文件下加入目录domain user ResponseBody //此处不进行页面跳转进行回写数据RequestMapping(value/quick8)public String invoke8() throws JsonProcessingException, UnsupportedEncodingException {user user new user();user.setName(lisi);user.setAge(25);ObjectMapper objectMapper new ObjectMapper();String string objectMapper.writeValueAsString(user);return string;}
1.2.2返回对象或集合
通过SpringMVC对对象或集合进行json字符串的转换并回写为处理器适配器配置消息转换参数 指定使用jackson进行对象或集合的转换因此需要在spring-mvc.xml中进行如下配置: !--配置处理器映射器--bean classorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapterproperty namemessageConverters listbean classorg.springframework.http.converter.json.MappingJackson2HttpMessageConverter/bean /list/property/bean有个简便的方法
在方法上添加ResponseBody就可以返回json格式的字符串但是这样配置比较麻烦配置的代码比较多 因此我们可以使用mvc的注解驱动代替上述配置。 mvc:annotation-driven/ 头部注意引入
xmlns:mvchttp://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
在 SpringMVC 的各个组件中处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。 使用mvc:annotation-driven自动加载 RequestMappingHandlerMapping(处理映射器)和 RequestMappingHandlerAdapter( 处 理 适 配 器 )可用在Spring-xml.xml配置文件中使用 mvc:annotation-driven替代注解处理器和适配器的配置。 同时使用mvc:annotation-driven默认底层就会集成jackson进行对象或集合的json格式字符串的转换。
二、SpringMVC获得请求数据
2.1 获得请求参数
客户端请求参数的格式是:namevaluenamevalue... ...
基本类型参数
POJO类型参数 类似于javabean
数组类型参数
集合类型参数
2.2 获得基本类型参数
Controller中的业务方法的参数名称要与请求参数的name一致参数值会自动映射匹配。
例如
链接http://localhost:8080/user/quick9?usernamezhangsanage18
Controller ResponseBody //此处不进行页面跳转进行回写数据RequestMapping(value/quick9)public void invoke9(String username,String age){System.out.println(username);System.out.println(age);} 2.3 获得POJO类型参数 链接http://localhost:8080/user/quick9/namezhangsanage18 ResponseBody //此处不进行页面跳转进行回写数据RequestMapping(value/quick10)public void invoke10(user user){System.out.println(user.getName());System.out.println(user.getAge());}
2.4 获得数组类型参数
ResponseBody //此处不进行页面跳转进行回写数据RequestMapping(value/quick11)public void invoke11(String[] strs){System.out.println(Arrays.asList(strs));}
Arrays.asList(strs) 将数组转换为list输出时可以看到结果
2.5 获得集合类型参数
获得集合参数时要将集合参数包装到一个POJO中才可以。
首先创在一个集合集合中封装user对象 添加一个前端页面提交数据因为存入list集合中时可以存在多个user对象因此此处的写法使用角标的方式判断是第几个user对象 此处引、入集合后直接打印
链接/jsp/form.jsp
结果
当使用ajax提交时可以指定contentType为json形式那么在方法参数位置使用RequestBody可以 直接接收集合数据而无需使用POJO进行包装。
此处解释ajax 异步和同步客户端和服务器端相互通信的基础上 * 客户端必须等待服务器端的响应。在等待的期间客户端不能做其他操作。 * 客户端不需要等待服务器端的响应。在服务器处理请求的过程中客户端可以进行其他的操作。 Ajax 是一种在无需重新加载整个网页的情况下能够更新部分网页的技术。 [1] 通过在后台与服务器进行少量数据交换Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下对网页的某部分进行更新。 传统的网页不使用 Ajax如果需要更新内容必须重载整个网页页面。 提升用户的体验 创建一个新的页面 在 UserController中添加一个方法 此时运行时会发生报错原因是找不到js的引入文件报错如下 因此需要在spring-mvc.xml文件中添加一行代码 原因是SpringMVC的前端控制器 DispatcherServlet的url-pattern配置的是/,代表对所有的资源都进行过滤操作我们可以通过以下两种 方式指定放行静态资源: • 在spring-mvc.xml配置文件中指定放行的资源 mvc:resources mapping/js/** location/js// • 使用mvc:default-servlet-handler/标签 当mvc找不到映射方法时原来的操作是停止加上这句话的意思是如果映射不到则交由tomcat处理 此时运行得到的结果是 如果此时您的代码还是报错找不到jquery.js文件但是代码逻辑没有问题上面的代码带有一个bug当做小练习很有可能是版本导致的问题
2.6 请求数据乱码问题
当post请求时数据会出现乱码可以设置一个过滤器来进行编码的过滤。
在web.xml文件中添加 !-- 配置编码--filterfilter-nameCharacterEncoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameCharacterEncoding/filter-nameurl-pattern/*/url-pattern/filter-mapping 2.7 参数绑定注解requestParam
注解RequestParam还有如下参数可以使用: value:与请求参数名称 :解决请求参数与映射参数不一致 required:此在指定的请求参数是否必须包括默认是true提交时如果没有此参数则报错
defaultValue:当没有指定请求参数时则使用指定的默认值赋值
RequestMapping(/quick14)
ResponseBody
public void quickMethod14(RequestParam(valuename,required false,defaultValue hahha) String username) throws IOException {
System.out.println(username); } 2.8 获得Restful风格的参数
Restful是一种软件架构风格、设计风格而不是标准只是提供了一组设计原则和约束条件。主要用于客户端和服务 器交互类的软件基于这个风格设计的软件可以更简洁更有层次更易于实现缓存机制等。
Restful风格的请求是使用“url请求方式”表示一次请求目的的HTTP 协议里面四个表示操作方式的动词如下: GET:用于获取资源 POST:用于新建资源 PUT:用于更新资源
DELETE:用于删除资源
例如: /user/1 GET: 得到id1的 user
/user/1 DELETE: 删除 id 1 的 user
/user/1 PUT: 更新id1的user
/user POST: 新增 user
链接http://localhost:8080/user/quick19/zhangsan 2.9 自定义类型转换器
• SpringMVC 默认已经提供了一些常用的类型转换器例如客户端提交的字符串转换成int型进行参数设置。 • 但是不是所有的数据类型都提供了转换器没有提供的就需要自定义转换器例如:日期类型的数据就需要自定义转换器。
自定义类型转换器的开发步骤: 1 定义转换器类实现Converter接口 2 在配置文件中声明转换器 3 在annotation-driven中引用转换器
public class DateConverter implements ConverterString, Date {Overridepublic Date convert(String s) {SimpleDateFormat format new SimpleDateFormat(yyyy-MM-dd);Date date null;try {date format.parse(s);} catch (ParseException e) {e.printStackTrace();}return date;}
} spring-mvc.xml mvc:annotation-driven conversion-serviceconverterService/!-- mvc:default-servlet-handler/--bean idconverterService classorg.springframework.context.support.ConversionServiceFactoryBeanproperty nameconverterslistbean classcom.student.test.Converter.DateConverter//list/property/bean 在配置文件中添加 mvc:annotation-driven conversion-serviceconverterService/ 测试链接http://localhost:8080/user/quick14?date2012-12-31
2.10 获得Servlet相关API
SpringMVC支持使用原始ServletAPI对象作为控制器方法的参数进行注入常用的对象如下:
HttpServletRequest HttpServletResponse HttpSession
前面有哦
2.11 获得请求头
1. 使用RequestHeader可以获得请求头信息相当于web阶段学习的request.getHeader(name) RequestHeader注解的属性如下: value:请求头的名称 required:是否必须携带此请求头 2. CookieValue
使用CookieValue可以获得指定Cookie的值 CookieValue注解的属性如下: value:指定cookie的名称 required:是否必须携带此cookie
2.12 文件上传
1. 文件上传客户端三要素
表单项type“file” 表单的提交方式是post 表单的enctype属性是多部分表单形式及enctype“multipart/form-data”
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
body
form action${pageContext.request.contentType}/user/quick19 methodpost enctypemultipart/form-data名称input namename typetext文件input nameuploadFile typefile/form/body
/html2.13 单文件上传步骤
1 导入fileupload和io坐标 dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.2.2/version/dependencydependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion2.4/version
/dependency 2 配置文件上传解析器
spring-mvc.xml bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver!--上传文件总大小--property namemaxUploadSize value5242800/ !--上传单个文件的大小--property namemaxUploadSizePerFile value5242800/!--上传文件的编码类型--property namedefaultEncoding valueUTF-8//bean3 编写文件上传代码 ResponseBodyRequestMapping(value/quick19)public void invoke19(String name, MultipartFile uploadFile){System.out.println(name);System.out.println(uploadFile);}
//获得文件名称
String originalFilename uploadFile.getOriginalFilename(); //保存文件
uploadFile.transferTo(new File(C:\\upload\\originalFilename));
4.前端 2.15 多文件上传实现
多文件上传只需要将页面修改为多个文件上传项将方法参数MultipartFile类型修改为MultipartFile[]即可 ResponseBodyRequestMapping(value/quick19)public void invoke19(String name, MultipartFile uploadFile,MultipartFile uploadFile1,MultipartFile uploadFile2){System.out.println(name);System.out.println(uploadFile);} 如果获取数组 看到这里了点个赞呗~~~~