二、SpringMvc 进阶
来源:互联网 发布:mac地址 冲突 编辑:程序博客网 时间:2024/06/07 22:06
1、参数绑定
- 在controller方法 形参中 添加HttpServletRequest request参数,通过request接收查询条件参数。
- 在形参中让包装类型的pojo接收查询条件参数。
1.1、pojo属性绑定
- 页面参数
<input name="itemsEx.name" />注意:itemsEx和包装pojo中的属性一致即可。
- controller方法形参
public ModelAndView queryItems(HttpServletRequest request, ItemsQueryVo itemsQueryVo)throws Exception
public class ItemsQueryVo {//商品信息private Items items;//原始生成的商品po进行扩展private ItemsEx itemsEx;
1.2、集合类型绑定
1.2.1、数组绑定
- 页面参数
<c:forEach items="${itemsList }" var="item"><tr><td><input type="checkbox" name="items_id" value="${item.id}"/></td><td>${item.name }</td><td>${item.price }</td><td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td><td>${item.detail }</td><td><a href="${pageContext.request.contextPath }/items/editItems.action?id=${item.id}">修改</a></td></tr></c:forEach>
- controller方法接收页面参数
@RequestMapping("/deleteItems")public String deleteItems(Integer[] items_id) throws Exception {.....}
1.2.2、list绑定
- 页面参数
<c:forEach items="${itemsList }" var="item" varStatus="status"><tr><td><input name="itemsList[${status.index }].name" value="${item.name }"/></td><td><input name="itemsList[${status.index }].price" value="${item.price }"/></td><td><input name="itemsList[${status.index }].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/>"/></td><td><input name="itemsList[${status.index }].detail" value="${item.detail }"/></td></tr></c:forEach>
- controller方法接收页面参数
public ModelAndView editItemsQuery(HttpServletRequest request,ItemsQueryVo itemsQueryVo) throws Exception {
- ItemsQueryVo定义
public class ItemsQueryVo {//商品信息private Items items;//原始生成的商品po进行扩展private ItemsEx itemsEx;//批量商品信息private List<ItemsEx> itemsList;
1.2.3、map绑定
- 页面参数
<td>姓名:<inputtype="text"name="itemInfo['name']"/>年龄:<inputtype="text"name="itemInfo['price']"/>.. .. ..</td>
- controller接收参数
public String useradd (Model model,QueryVo queryVo)throws Exception{ }
- QueryVo 定义
Public class QueryVo {private Map<String, Object> itemInfo = new HashMap<String, Object>(); //get/set方法..}
2、数据回显
pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)
使用@ModelAttribute指定pojo回显到页面在request中的key
使用@ModelAttribute指定pojo回显到页面在request中的key
使用最简单方法使用model,可以不用@ModelAttribute
model.addAttribute("id", id);
3、文件上传
3.1、配置SpringMVc.xml
<!-- 文件上传 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="utf-8"></property> <property name="maxUploadSize" value="10485760000"></property><!-- 最大上传文件大小 --> <property name="maxInMemorySize" value="10960"></property></bean>
3.2、jar包
commons-fileupload-1.2.2.jarcommons-io-2.4.jar
3.3、页面代码
<body><form action="${pageContext.request.contextPath }/congxing/ssm/user/upload.action" method="post" enctype="multipart/form-data"> <input type="file" name="pic" /></br><input type="submit" value="上传"></form></body>
3.4、controller
@RequestMapping("upload")public ModelAndView upload(MultipartFile pic) throws Exception{ String originalFilename = pic.getOriginalFilename();//上传图片if(pic!=null && originalFilename!=null && originalFilename.length()>0){ //存储图片的物理路径String pic_path = "F:\\upload\\"; //新的图片名称String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));//新图片File newFile = new File(pic_path+newFileName); //将内存中的数据写入磁盘pic.transferTo(newFile); }ModelAndView mv = new ModelAndView(); mv.setViewName("upload"); return mv;}
另一种
@RequestMapping("upload")public ModelAndView upload(@RequestParam("pic") CommonsMultipartFile pic) throws Exception{ String originalFilename = pic.getOriginalFilename();//上传图片if(pic!=null && originalFilename!=null && originalFilename.length()>0){ //存储图片的物理路径String pic_path = "F:\\upload\\"; //新的图片名称String newFileName = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));//新图片File newFile = new File(pic_path+newFileName); //将内存中的数据写入磁盘pic.transferTo(newFile); }ModelAndView mv = new ModelAndView(); mv.setViewName("upload"); return mv;}
4、json数据交互
4.1、常见用法
1、请求json、输出json,要求请求的是json串,所以在前端页面中需要将请求的内容转成json,不太方便。
4.2、jar包
springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用jackson进行json转换)
下载地址:http://download.csdn.net/detail/hxskmx/8833313
4.3、配置json转换器
在注解适配器中加入messageConverters
<!--注解适配器 --><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"><list><span style="white-space:pre"></span><bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean></list></property></bean>如果使用<mvc:annotation-driven /> 则不用定义上边的内容。
4.4、json交互测试
4.4.1、请求json串,返回json串
- 页面
//请求json,输出是jsonfunction requestJson(){ $.ajax({type:'post',url:'${pageContext.request.contextPath }/requestJson.action',contentType:'application/json;charset=utf-8',//数据格式是json串data:'{"username":"mx","address":"广州"}',success:function(data){//返回json结果alert(data.username);} }); }
- controller
@RequestMapping("/requestJson")public @ResponseBody User requestJson(@RequestBody User user){System.out.println(user);return user;}
4.4.2、 请求Key/Value数据,返回Json串
- 页面
//请求key/value,输出是jsonfunction responseJson(){$.ajax({type:'post',url:'${pageContext.request.contextPath }/responseJson.action',//请求是key/value这里不需要指定contentType,因为默认就 是key/value类型//contentType:'application/json;charset=utf-8',//数据格式是json串data:'username=mx&address=广州',success:function(data){//返回json结果alert(data.username);}});}
- controller
<span style="font-weight: normal;"><span style="font-size:12px;">@RequestMapping("/responseJson")public @ResponseBody User responseJson(User user){System.out.println(user);return user;}</span></span>
4、拦截器
4.1、拦截器定义
<span style="font-weight: normal;">//定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。public class HandlerInterceptor1 implements HandlerInterceptor {//进入 Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {//return false表示拦截,不向下执行//return true表示放行return false;}//进入Handler方法之后,返回modelAndView之前执行//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}//执行Handler完成执行此方法//应用场景:统一异常处理,统一日志处理@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {}}</span>
4.2、拦截器配置
4.2.1、针对HandlerMapping配置
springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该 拦截器。
<beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><property name="interceptors"><list><ref bean="handlerInterceptor1"/><ref bean="handlerInterceptor2"/></list></property></bean><bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/><bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>
4.2.2、类似全局的拦截器
springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中
<!--拦截器 --><mvc:interceptors><!--多个拦截器,顺序执行 --><!-- 登陆认证拦截器 --><mvc:interceptor><mvc:mapping path="/**"/><bean class="cn.congxing.ssm.interceptor.LoginInterceptor"></bean></mvc:interceptor><mvc:interceptor><!-- /**表示所有url包括子url路径 --><mvc:mapping path="/**"/><bean class="cn.congxing.ssm.interceptor.HandlerInterceptor1"></bean></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><bean class="cn.congxing.ssm.interceptor.HandlerInterceptor2"></bean></mvc:interceptor></mvc:interceptors>
4、拦截器
4.1、拦截器定义
<span style="font-weight: normal;">//定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。public class HandlerInterceptor1 implements HandlerInterceptor {//进入 Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {//return false表示拦截,不向下执行//return true表示放行return false;}//进入Handler方法之后,返回modelAndView之前执行//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {}//执行Handler完成执行此方法//应用场景:统一异常处理,统一日志处理@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {}}</span>
4.2.1、针对HandlerMapping配置
<beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><property name="interceptors"><list><ref bean="handlerInterceptor1"/><ref bean="handlerInterceptor2"/></list></property></bean><bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/><bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>
<!--拦截器 --><mvc:interceptors><!--多个拦截器,顺序执行 --><!-- 登陆认证拦截器 --><mvc:interceptor><mvc:mapping path="/**"/><bean class="cn.congxing.ssm.interceptor.LoginInterceptor"></bean></mvc:interceptor><mvc:interceptor><!-- /**表示所有url包括子url路径 --><mvc:mapping path="/**"/><bean class="cn.congxing.ssm.interceptor.HandlerInterceptor1"></bean></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><bean class="cn.congxing.ssm.interceptor.HandlerInterceptor2"></bean></mvc:interceptor></mvc:interceptors>
0 0
- 二、SpringMvc 进阶
- SpringMVC进阶(二)
- SpringMVC进阶(二)——handlerMapping
- springmvc的进阶
- SpringMVC进阶(一)
- SpringMVC进阶(三)
- SpringMVC进阶(四)
- springMVC二
- springMVC(二)
- SpringMvc(二)
- SpringMVC使用进阶-文件上传
- SpringMVC使用进阶-文件上传
- SpringMvc(二)配置SpringMvc
- 多线程进阶代码二
- volatile-进阶之二
- JVM进阶系列二
- javascript进阶(二)
- python--进阶二--图形界面
- 轮盘抽奖代码
- [DM814x笔记]DDR相关配置
- Google Java编程风格指南
- OpenLayers跨域请求WFS服务在Tomcat环境下的实现cgi
- 安卓SDK之YUV-Image
- 二、SpringMvc 进阶
- Stepping in as the new leader
- JQ DOM节点篇
- Linux系统高级编程系列教程
- 《威胁建模:设计和交付更安全的软件》
- Ubuntu1404 :aclocal-1.14' is missing on your system
- 天声人語 20150623
- Spring实现自动任务调度-------------task
- iOS(使用pch文件导入头文件方法)