SpringMVC 常用注解 及 其用法 (下)

-----处理json问题,前端接受、发送json数据,或者控制器接收、发送json数据


需要包jackson-jr-all-2.4.3.jar;jackson-annotations-2.6.0.jar;jackson-core-2.6.0.jar;jackson-databind-2.6.0.jar
spring4如下配置
  
      
          
              
          
      
  
  
      
          
            application/json;charset=UTF-8  
            text/html;charset=UTF-8  
            text/json;charset=UTF-8      
          
      
  

@ResponseBody 处理json时使用,用于将数据转换成json格式返回前端


@RequestBody 用于接受前端ajax发出的json数据


控制器内的方法通过map发送数据给前端,也可返回具体对象 等
eg.
@RequestMapping(value="/ajaxString.action")
	public @ResponseBody void loginUI(String name) throws Exception{
		
		System.out.println(name);	//也可通过request.getParameter("name");接收
	}
	@RequestMapping(value="/ajaxObject.action")
	public @ResponseBody Map loginUI1(@RequestBody User user) throws Exception{
		System.out.println(user.getName());
		Map map = new HashMap<>();
		map.put("msg", "asd");
		map.put("user", user);
		return map;
	}


//若是返回具体对象,则怎么写
/*	@RequestMapping(value="/ajaxObject.action")
	public @ResponseBody User loginUI1(@RequestBody User user) throws Exception{
		System.out.println(user.getName());
		user.setPassword("asdasdasdasda");
		return user;
	}*/

前端页面


ajax2




----文件的上传下载上传,使用的是MultipartFile这个类来实现
1.导包commons-fileupload 和 commons.io
2.配置文件

	
3.前端 (注意enctype的值要写成multipart/form-data)
4.控制器
@RequestMapping(value="/upload.action")
	public String upload(HttpServletRequest request,@RequestParam("file") MultipartFile file) throws Exception{
		System.out.println(file.getName());		//表单按钮的name
		System.out.println(file.getOriginalFilename());		//上传的文件的名字
		if(!file.isEmpty())
		{
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
			//获取目录
			String path = request.getServletContext().getRealPath("/upload/");
			//为上传的文件命名
			String fileName = file.getOriginalFilename();
			String realFileName = sdf.format(new Date()) + fileName.substring(fileName.lastIndexOf("."));




			file.transferTo(new File(path + File.separator + realFileName));	//将上传的文件保存到一个目录中
		}
		return "/success.jsp";
	}

限制文件上传大小可以在配置文件设置
限制文件类型只能在控制器中获取文件名的后缀去判断


文件下载
1.前端页面
下载
2.控制器
	@RequestMapping(value="/download.action")
	public ResponseEntity download(HttpServletRequest request,
					@RequestParam("filename") String filename) throws Exception{
		//获取下载路径
		String filePath = request.getServletContext().getRealPath("/upload/");
		File file = new File(filePath + File.separator + filename);
		
		//http头
		HttpHeaders headers = new HttpHeaders(); 

		//下载显示的文件名,不然下载时浏览器识别不了中文
       		String downloadFielName = new String(filename.getBytes("UTF-8"),"ISO8859-1");

		//设置相应报头,通知浏览器以attachment(下载方式)打开图片
        	headers.setContentDispositionFormData("attachment", downloadFielName); 

        	//application/octet-stream : 二进制流数据(最常见的文件下载)。
        	headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        	return new ResponseEntity(FileUtils.readFileToByteArray(file),headers,HttpStatus.CREATED);
	}


-----路径跳转 、数据共享问题
springmvc 中
在返回值String方法的 return里写,return "forward:另一个action的路径"属于请求转发
return "redirect:另一个action的路径" 属于url重定向,重定向无法共享request域参数,但是return "redirect:另一个action的路径?参数名=参数值",这样也可以共享,或者放在session中


在控制器类 方法里的参数列表中,可以通过声明 HttpServletRequest request, HttpServletResopnse response, HttpServletSession session 来调用 这些 传统api中的方法处理


-----

处理编码问题
处理编码问题需要在web.xml里设置编码过滤器只解决post方式

		CharacterEncodingFilter
		org.springframework.web.filter.CharacterEncodingFilter
		
			encoding
			UTF-8
		
	
	
		CharacterEncodingFilter
		/*
	

注意要写在前面,不然可能会出现先经过spring处理而导致编码设置失效



-----其他的
加载静态资源,如图片,css,js之类的

mapping:映射
location:本地资源路径,注意必须是webapp根目录下的路径。
两个*,它表示映射resources/下所有的URL,包括子路径(即接多个/)


当有spring和springmvc注解时,为了不发生注解读取失效,需要加入下面这句,表示不读取下面的注解,放给其他文件读取
比如在spring配置文件中加入下面语句,表示不读取springmvc的注解,让springmvc配置文件去读取(即在springmvc配置文件中需要配置注解扫描)


你可能感兴趣的:(springmvc)