还在弄springmvc的事,又遇到了 @RequestParam 和 @PathVarable的的区别

前者是用来自动注入request中的参数的,如果参数转换出错的话整个请求会报错,所以得指定默认值才行, 而后者是和@requestMapping配合实现路径参数的

还有就是重定向的问题: 默认的InnerResourceResolver 是生成jstlview的,它就可以处理重定向,我们通常action中返回“viewpath”, 只需这样返回“redirect:url” 即可,同理可以使用"forward:action"

但是要是想返回json视图的话就不行了,spring mvc

中可以通过@ResponseBody注解来将返回值直接解析为json然后写到response中,不过需要用到 jackson-mapping-asl

如果想文件上传的话就需要自己定义视图了如

  1.   <bean id="multipartResolver"  
  2.         class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
  3.         <!-- one of the properties available; the maximum file size in bytes -->  
  4.         <property name="maxUploadSize" value="100000" />  
  5.     </bean> 

需要依赖两个jar包: apache.commons.fileupload 和apache.commons.io

这样就可以自动注入参数了

  1. @RequestMapping(value = "/form", method = RequestMethod.POST)  
  2. public String handleFormUpload(@RequestParam("name") String name,  
  3. @RequestParam("file") MultipartFile file) {  
  4. if (!file.isEmpty()) {  
  5. byte[] bytes = file.getBytes();  
  6. // 去理上传写文件代码  
  7.   
  8. }  
多文件上传的话就这样

  1.    @RequestMapping(value = "/multipartFileUpload",method = RequestMethod.POST)  
  2.          public String upload2(  
  3.             MultipartHttpServletRequest request ,  
  4.             @RequestParam("name") String name    // 页面上的控件值  
  5.             ) throws Exception {  
  6.           List<MultipartFile> files = request.getFiles("file");  
  7.           forint i=0; i<files.size() ;i++){  
  8.                if(! files.get(i).isEmpty()) {  
  9.                    logger.info("上传文件:"+files.get(i).getOriginalFilename());  
  10.                   this.copyFile(files.get(i).getInputStream(), files.get(i).getOriginalFilename());  
  11.                }  
  12.           }  
  13.           logger.info("success");  
  14.           return "fileUpload/success";  
  15.          } 
还很方便的吧,有时间将springmvc的源码跟一遍,至少把它的基本特性都得熟悉了