我正在使用tomcat6在春季mvc中工作。我尝试上传文件,并且能够使用tomcat8进行战争部署。
但是在将相同的战争与tomcat6部署一起使用时,出现以下错误。
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'userId' is not present
我完整的代码如下,
在pom中添加了jar
<!-- Apache Commons Upload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<!-- Apache Commons Upload -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
添加了要在ApplicationContext.xml中上传的bean
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10000000" />
</bean>
返回userId的控制器
public class UploadDocController extends AbstractController {
@Resource
private UserService userService;
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
Long userId = userService.getLoggedInUser(request).getId();
ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadmain);
modelAndView.addObject("userId", userId);
return modelAndView;
}
}
JSP:
<form method="POST" enctype="multipart/form-data" action="upload.htm">
File to upload:
<input type="file" name="file"><br />
<input type="hidden" name="userId" value="${userId}"><br /> <br />
<input type="submit" value="Upload">
</form>
FileUploadController.java
@Controller
public class FileUploadController {
@Resource
private CollectionsRepository collectionsRepository;
@RequestMapping(value="/upload", method=RequestMethod.GET)
public @ResponseBody String provideUploadInfo() {
return "You can upload a file by posting to this same URL.";
}
@RequestMapping(value="/upload.htm", method=RequestMethod.POST)
public ModelAndView handleFileUpload(@RequestParam(value ="userId") String userId,
@RequestParam(value ="file") MultipartFile file){
System.out.println("userId--------"+userId);
if (!file.isEmpty()) {
try {
String filePath = "/home/ubuntu/analyzer/LOS/";
byte[] bytes = file.getBytes();
File newFile = new File(filePath+""+file.getOriginalFilename());
BufferedOutputStream stream =
new BufferedOutputStream(new FileOutputStream(newFile));
stream.write(bytes);
stream.close();
List<BankStatementError> errorList = new ArrayList<BankStatementError>();
Excelsheetreader esr = new Excelsheetreader();
List<String> listaddSN = esr.GetCalculation(Long.parseLong(userId), filePath+""+file.getOriginalFilename());
newFile.delete();
for (int i = 0; i < listaddSN.size(); i++) {
String bank = listaddSN.get(i);
BankStatementError error = collectionsRepository.getErrorByBank(bank);
errorList.add(error);
}
ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadsuccess);
modelAndView.addObject("errorList", errorList);
return modelAndView;
} catch (Exception e) {
ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadexecption);
return modelAndView;
}
} else {
ModelAndView modelAndView = new ModelAndView(UploadDocView.uploadempty);
return modelAndView;
}
}
}
我得到的错误是
org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'userId' is not present
使用tomcat6还有其他方法吗?希望有人会提出建议。
提前致谢..
屏幕截图..
最佳答案
调用jsp文件时,响应未附加参数。
看到-
<input type="hidden" name="userId" value="${userId}"><br /> <br />
在这里,您尝试访问userId的值,但是所寻找的参数可能不可用。
因此可能在响应中添加参数将消除错误。
关于java - 文件上传在Spring MVC和Tomcat6中不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31957823/