SpringMvc
[TOC]
高级参数绑定
批量删除(数组)
从请求中接受参数,多个id
<input type="checkbox" name="ids" value="${item.id}"/>
可以在QuertVo定义一个
int[] ids
;这样在页面的<input type="checkbox">
中的name是ids,然后再controller中接受参数用QueryVo即可
批量修改(List集合)
- QueryuVo中需要封装
List<Items> itemList;
- 页面上input框的name属性 :
vo中的集合属性名称+[集合索引]+.泛型中对应的属性名称
用来使controller中的方法,接收返回的List\。 <input type="text" value="${item.name }" name="itemList[${status.index }].name">
@RequestMapping
写在方法上:标记url到请求方法的映射,其实就是通过浏览器中的url找到对应的controller方法
写在类上:窄化请求映射,其实就是为了防止你起的url跟你同事的起的url相同,请求错乱的情况在类上加了一层目录,访问的时候要在地址上加上这个参数
- ,这样在访问的时候就需要在前面加一个
item
,localhost:8080/SpringMvc01/item/list.action
- ,这样在访问的时候就需要在前面加一个
限制请求的类型:get post,参数中加注解
请求转发:浏览器中的url不发生改变,request域中的数据能带入转发后的方法中
重定向:浏览器中的url发生改变,request域中的数据不能带入重定向后的方法中
String
- 返回一个普通的页面: 就认为是页面地址
请求转发
- 在SpringMvc中请求转发可以让controller方法返回值为String类型,那么返回的字符串以
forword:
开头的为请求转发,当然路劲也是url 路劲
|
|
重定向
- 在SpringMvc中请求转发可以让controller方法返回值为String类型,那么返回的字符串以`redirect:’的为重定向
|
|
model
model可以把数据带到重定向后的方法,因为model底层是request域而且对其做了扩展
model.addAttribute("itemList", list);
- 不管是转发还是重定向都能把model中的值带到抵达的方法中
- 还有一种情况就是同时有model跟request向域中set值的时候,不管谁在前面,在转发的时候会把model里面的值在放入与里边一遍。所以在取出来的时候的值是model.addAttribute里边的值。
ModelAndView.addObject("itemList", list);
如果想用这个类就必须返回值为ModelAndView类型的,同样也是存到了model中。
相对路径和绝对路径
- springMvc中请求转发和重定向,后面的url路径以斜杠/开头为绝对路径,
- 不以斜杠/开头的为相对路径
- 相对路径: 相对路径是相对于当前路径
- 最多只限于当前类下的url路径进行跳转使用
- 绝对路径: 从项目名后开始算
- 一般在从一个controller方法中一条转到另一个controller方法中使用
- 但是所有路径都可以写成绝对路径, 是无敌的
void
- 当返回值为void的时候,只能借助原生的request,response 这样就不走SpringMvc的视图解析了,相当于破坏了SpringMvc的体系结构,所以不推荐使用
|
|
- 但是在ajax发送请求的时候,需要回掉函数返回数据的时候,可以使用这种原生的方法。
SpringMvc中的异常处理
- 异常分类:
- 运行时异常:
- 自定义异常:
自定义异常:
- 新建一个自定义异常的类继承
Exception
,里面有一个Message
属性,实现get,set
|
|
- 在自定义一个处理异常的类
CustomGlobalExceptionReslover
继承HandlerExceptionResolver
,重写里面的方法
|
|
然后再SpringMvc的配置文件中配置一下,把自定义异常的处理类交给Spring即可
<bean class="com.zc.exception.CustomGlobalExceptionReslover" />
测试
|
|
图片上传
springMvc中对图片上传有接口的支持, 但是没有实现,所以需要第三方实现.
- 用的是
FileUpload
,先导包,然后配置文件配置一下
|
|
然后在form标签上设置
enctype="multipart/form-data"
- 文件上传项
<input type="file" name="pictureFile"/>
- 文件上传项
然后再controller中的参数中增加一个
MultipartFile pictureFile
用来接收文件上传项
|
|
tomcat中有配置的图片服务器
- 双击tomcat,打开底下第二个视图
- 点击
Add External Web Module...
- 上面就是服务器存放图片的地址,把图片放入这个路径下,通过下面那个自定义的地址就能访问到
- 例如:设置底下的路劲为
pic
则可以在服务器中访问,上面路劲下的图片http://localhost:8080/pic/aaa.jpg
json数据交互
让SpringMvc自动将接受的json格式字符串转换成java对象,将pojo对象转换成json串返回给页面
- SpingMvc中对json的支持有接口但是无实现,所以需要第三方的实现,杰克逊的jar包,在企业中SpringMvc.xml配置注解驱动,那么这样的SpringMvc就跟杰克逊的jar包完美集成不用任何配置
@RequestBody
作用: 将接收到的json格式字符串自动转换成pojo对象, 要求json的key必须等于pojo中对应的属性名称@ResponseBody
作用: 将返回的pojo对象自动转换成json格式字符串返回- 如果想返回一个json的话,可以把想要转的实体返回,返回值也是他的类型只要加一个注解就行
@ResponseBody
|
|
RESTful支持
- 就是url的一个命名规范,要求url中只能是名词,没有动词,但是由于国内开发人员英文水平不太好,所以不严格要求, 但是要求url中没有问号传参
- 例如:
http://blog.csdn.net/beat_the_world/article/details/45621673
- 例如:
添加DispatcherServlet的rest配置
- 当web.xml中配置
url-partten为斜杠/
的时候会拦截静态资源不放行 可以在
SpringMvc.xml
放行dispathcerServlet
中被拦截的静态资源- location:配置页面引用时放行的路径
- mapping:放心的静态资源的位置
例如:这样
<mvc:resources location="/js/" mapping="/js/**"/>
配置之后就能访问到引入的js了
URL 模板模式映射
路劲:
${pageContext.request.contextPath }/toEdit/${item.id}
@RequestMapping(value="/toEdit/{id}")
:{×××}占位符,请求的URL可以是“/viewItems/1”或“/viewItems/2”,通过在方法中使用@PathVariable获取{×××}中的×××变量。@PathVariable
用于将请求URL中的模板变量映射到功能处理方法的参数上。
|
|
- 当然也可以有多个参数:
${pageContext.request.contextPath }/toEdit/${item.id}/${item.name}
- 这样在接收的时候,后面跟两个占位符即可
|
|
拦截器
作用: 拦截请求
- 先创建一个拦截器的类
interceptor
实现HandlerInterceptor
,重写里面的三那个方法
|
|
- 然后再配置文件配置一下
|
|
- 然后每次请求中执行顺序:
preCompletion
,postCompletion
,afterCompletion
- 多个拦截器执行顺序:
- 多个拦截器的执行顺序
preCompletion
等于springMvc.xml
中配置拦截器的顺序 postCompletion
,afterCompletion
与springMvc.xml
中配置拦截器的顺序相反
- 多个拦截器的执行顺序