二、SpringMvc 进阶

1、参数绑定

  • 在controller方法 形参中 添加HttpServletRequest request参数,通过request接收查询条件参数。
  • 在形参中让包装类型的pojo接收查询条件参数。

1.1、pojo属性绑定

  • 页面参数
     
注意: 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、数组绑定

  • 页面参数

	
	
	${item.name }
	${item.price }
	
	${item.detail }
	
	修改


  • controller方法接收页面参数
	@RequestMapping("/deleteItems")
	public String deleteItems(Integer[] items_id) throws Exception {
		.....
	}

1.2.2、list绑定

  • 页面参数

	

	
	
	"/>
	





  • controller方法接收页面参数
	public ModelAndView editItemsQuery(HttpServletRequest request,
			ItemsQueryVo itemsQueryVo) throws Exception {

  • ItemsQueryVo定义
public class ItemsQueryVo {
	
	//商品信息
	private Items items;
	
	//原始生成的商品po进行扩展
	private ItemsEx itemsEx;
	
	//批量商品信息
	private List itemsList;

1.2.3、map绑定

  • 页面参数

姓名:
年龄:
.. .. ..

  • controller接收参数
public String useradd (Model model,QueryVo queryVo)throws Exception{
	 
}
  • QueryVo 定义
Public class QueryVo {
	private Map itemInfo = new HashMap();
  //get/set方法..
}

2、数据回显

pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写)
使用@ModelAttribute指定pojo回显到页面在request中的key

使用最简单方法使用model,可以不用@ModelAttribute
model.addAttribute("id", id);


3、文件上传

3.1、配置SpringMVc.xml 


	
	
		
  		
  		
	



3.2、jar包

commons-fileupload-1.2.2.jar

commons-io-2.4.jar

3.3、页面代码





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,不太方便。 

2、请求key/value、输出json。此方法比较常用

4.2、jar包

springmvc中使用jackson的包进行json转换(@requestBody和@responseBody使用jackson进行json转换)

下载地址:http://download.csdn.net/detail/hxskmx/8833313

4.3、配置json转换器

在注解适配器中加入messageConverters


	
		
		
			
		
		
	
如果使用 则不用定义上边的内容。

4.4、json交互测试

4.4.1、请求json串,返回json串

  • 页面
//请求json,输出是json
function 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,输出是json
function 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

	@RequestMapping("/responseJson")
	public @ResponseBody User responseJson(User user){
		System.out.println(user);
		return user;
	}

4、拦截器

4.1、拦截器定义


//定义拦截器,实现HandlerInterceptor接口。接口中提供三个方法。

public class HandlerInterceptor1 implements HandlerInterceptor {

	
	//进入 Handler方法之前执行
	//用于身份认证、身份授权
	//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		
		//return false表示拦截,不向下执行
		//return true表示放行
		return false;
	}

	//进入Handler方法之后,返回modelAndView之前执行
	//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图
	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		
		
	}

	//执行Handler完成执行此方法
	//应用场景:统一异常处理,统一日志处理
	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		
		
	}

}

4.2、拦截器配置

4.2.1、针对HandlerMapping配置

springmvc拦截器针对HandlerMapping进行拦截设置,如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该 拦截器。

	
		
			
			
		
	

	
	



4.2.2、类似全局的拦截器

springmvc配置类似全局的拦截器,springmvc框架将配置的类似全局的拦截器注入到每个HandlerMapping中

	
	

	
	
	
		
		
	
	
		
		
		
	
	
		
		
	

 




你可能感兴趣的:(springMVC,SpringMvc)