目录,更新ing,学习Java的点滴记录
目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录
SpringMvc知识
第一篇---->SpringMvc初识|MVC|三层架构 第二篇---->IoC容器上下文和映射请求上下文 第三篇---->熟悉基本开发流程 第四篇---->接收各类请求参数的方式 第五篇---->获取请求中的Request,Session,Cookie等对象属性 第六篇---->拦截器开发 第七篇---->视图和视图解析器 第八篇---->数据校验 第九篇---->文件上传方式 第十篇---->数据转换和数据格式化
1 请求参数绑定的各种方式
使用控制器接收参数往往是SpringMvc开发业务逻辑的第一步,第三篇里面仅仅演示了比较简单的参数传递的方式,但是实际开发中情况却很多,比如RESTful风格传参,传递Json格式等等,为了应对不同形式的参数传递,SpringMvc根据不同情况提供了多种传参方式提供一个基础搭建环境,后面的操作基于此:链接:https://pan.baidu.com/s/16Yzto0TVxY3GZDlV6qaNpA 提取码:cn2q这里是基于一个表单来模拟请求参数的传递和获取,SpringMvc提供了诸多的注解来解析参数,目的在于把控制器从复杂的Servlet API中剥离,这样就可以在非Web容器环境中重用控制器的,也方便测试人员对其进行有效测试。
1.1 接收普通请求参数
1.1.1 接收基本类型或者String类型
条件:请求传递的参数名称和控制器中处理方法中的形参保持一致(严格区分大小写),此时无需任何注解也可以获取参数.在user.jsp设置请求路径 在ParamsController中创建处理方法 启动测试 点击提交按钮后,可以看到控制台中输出了我们在表单中填入的信息,能实现这个效果的前提就是处理器中处理方法的形参名必须和传递的请求参数一致,如果不一致时获取不到的,这样的方式允许参数为空.这种方式用在参数比较少的情况下还是挺好用的,但是如果参数太多,就显得力不从心了
1.1.2 接收POJO类型
在参数很多的情况下,比如新增一个用户可能有非常多的字段,这时候我们可以采用使用POJO来管理这些参数.在不需要任何注解的情况下,SpringMvc也有映射POJO的能力提供的代码中已经有了一个User类,同时user.jsp中表单的对应属性也是对应于该User类的,现在修改部分代码,再次测试修改user.jsp中请求路径 定义接收POJO类的处理方法 启动测试 从结果来看,显然通过POJO也会获取到对应的参数,注意的是,POJO的属性也要和请求参数名称保持一致.即使没有任何注解,也能够有效的传递参数.
1.1.3 接收集合类型
要求:集合类型的请求参数必须在POJO中.在表单中请求参数名称要和POJO中集合属性名称相同;给List集合中元素赋值时要使用下标;给Map集合中元素赋值时,使用键值对.修改User实体类 修改user.jsp 新增处理请求的方法 启动测试 上面这种方式就是展示了传递集合类型请求参数的方式,主要是要注意不同集合类型的赋值方式,有的是用下标,有的是使用键值对
1.2 使用@RequestParam注解获取参数
很多情况下,前端的参数命名规则和后台的不一样,比如前端的用户名称为uname,后端接收参数名为username的话,这时候就需要转换了.SpringMvc提供了@RequestParam注解就可以很好解决这个问题修改User.jsp,让传递的请求参数与处理方法中形参名称不同 定义新的处理器方法 启动测试 看一下@RequestParam的源码 从源码中可以看到,它默认的value值是"",并且要求添加该注解的参数不能为空,否则就会抛出异常.如果允许请求参数为空,可以将required设置为false
1.3 使用URL传递参数
1.3.1 REST
REST:即 Representational State Transfer。(资源)表现层状态转化。是目前 最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息。它 可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。 可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的 URI 。要 获取这个资源,访问它的URI就可以,因此URI 即为每一个资源的独一无二的识 别符。表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层(Representation)。比如,文本可以用 txt 格式表现,也可以用 HTML 格 式、XML 格式、JSON 格式表现,甚至可以采用二进制格式。状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一 次交互过程。HTTP协议,是一个无状态协议,即所有的状态都保存在服务器 端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生“ 状态转化”(State Transfer)。而这种转化是建立在表现层之上的,所以就是 “ 表现层状态转化”。具体说,就是 HTTP 协议里面,四个表示操作方式的动 词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET 用来获 取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。
1.3.2 @PathVariable注解
带占位符的URL是Spring3.0新增的功能,该功能在SpringMvc向REST目标挺进发展过程中具有里程碑的意义.通过 @PathVariable 可以将 URL 中占位符参数绑定到控 制器处理方法的形参中:URL 中的 {xxx} 占位符可以通过 @PathVariable(“xxx”) 绑定到操作方法的形参中。 @PathVariabl源码—只含有一个value属性,也就意味着传递的请求参数可以为空
1.3.3 示例—演示get,post,put,delete请求
需要使用到@RequestMapping和@PathVariable两个注解协同完成由于默认情况下form表单只支持get和post请求,而delete,put请求并不支持,在Spring3.0后添加了HiddenHTTPMethodFilter过滤器,可以支持get,post,put,delete请求.如何发送put请求和delete请求呢? 1) 需要发送post请求 2) 在发送post请求时携带一个name="_method"的隐藏域,值为DELETE或PUT即可修改web.xml,配置过滤器 修改User类,仅保留id,name,age(方便演示) 修改user.jsp,实现向控制器发送4种请求 在控制器中新增处理方法 启动测试 总结: {id}表示处理器需要接收一个由URL组成的参数,且参数名称为id,那么在方法中的@PathVariable(“id”)表示将获取这个在@RequestMapping中定义名称为id的参数,这样就可以在方法内获取这个参数了.