Exception java.lang.NoSuchMethodError
Je suis en train de télécharger des fichiers pdf dans le serveur. Et je;m en utilisant le bloc de code suivant dans le contrôleur:
@RequestMapping(value = /submit, method = RequestMethod.POST)
public String upload(UploadItem uploadItem, BindingResult result, HttpServletRequest request, HttpSession session) {
//some code here
String name = request.getServletContext().getRealPath("/pdf/" + filename);
File dest = new File(name);
try {
file.transferTo(dest);
}catch(Exception e){
System.err.println(e);
}
return "redirect:/details";
Je fais cela dans le but de stocker les fichiers pdf dans le fichier pdf. Dans mon localhost fonctionne bien mais quand je suis à l'exécution de ce sur le serveur, je suis prenant l'exception suivante:
exception
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletContext()Ljavax/servlet/ServletContext;
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:839)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletContext()Ljavax/servlet/ServletContext;
frontend.controller.EsteemRatingsController.handleFormUpload(EsteemRatingsController.java:113)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
Si je supprime les lignes ci-dessus dans la classe du contrôleur est de travail(ofcource sans télécharger le pdf). Quelqu'un peut-il m'aider?
Ce conteneur web utilisez-vous? On dirait que vous êtes en cours d'exécution sur quelque chose de vieux.
Apache tomcat 6
Apache tomcat 6
OriginalL'auteur Nick Robertson | 2012-06-19
Vous devez vous connecter pour publier un commentaire.
Que la méthode
request.getServletContext()
a été introduit dans le servlet 3.0. Assurez-vous que votre conteneur/bibliothèque de support de cette version.edit: tomcat 6 seulement ont servlet 2.5, voir http://tomcat.apache.org/whichversion.html
il peut être autocâblés: ServletContext et Spring MVC
Peut-printemps injecter
ServletContext
pour vous? N'ai pas essayé, mais je pense que ça peut.Je vous remercie beaucoup pour vous réponses et de votre temps. J'ai vu sur internet qu'il peut, mais je suis très nouveau dans tout cela, et je ne peux pas comprendre.Pouvez-vous m'aider?
juste ajouter ServletContext à votre signature de la méthode:
public String upload(UploadItem uploadItem, BindingResult result, HttpServletRequest request, HttpSession session, ServletContext ctx) {
et le printemps devrait faire de la magie pour vous.Merci encore, mais il y a un problème.Le ServletContext est une inerface et donc, j'ai une erreur qui dit "ne Peut pas instancier la classe d'haricot [javax.servlet.ServletContext]: classe Spécifiée est une interface"
OriginalL'auteur J-16 SDiZ