Servlet3.0上传文件时遇到的几个问题

首先,之前写过一个试验程序,上传文件到指定的一个目录,那一次写得比较轻松,没有遇到什么问题,但是这次写遇到了不少的麻烦,麻烦倒不是出在编码,而是Tomcat的几个小问题,费了很长时间,为了不让其他人也想我在这上浪费无用的时间,还是写下来比较好。

1.这是网页上的错误提示

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception
	YHQ.Filter.CharactorFilter.doFilter(CharactorFilter.java:33)

root cause

java.lang.AbstractMethodError: org.apache.catalina.connector.RequestFacade.getPart(Ljava/lang/String;)Ljavax/servlet/http/Part;
	YHQ.Servlet.UploadServlet.doPost(UploadServlet.java:46)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
	YHQ.Filter.CharactorFilter.doFilter(CharactorFilter.java:33)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.35 logs.


控制台提示为

java.lang.AbstractMethodError: org.apache.catalina.connector.RequestFacade.getPart(Ljava/lang/String;)Ljavax/servlet/http/Part;
at YHQ.Servlet.UploadServlet.doPost(UploadServlet.java:46)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at YHQ.Filter.CharactorFilter.doFilter(CharactorFilter.java:33)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)
at java.lang.Thread.run(Thread.java:662)




先说一下,网页上的提示,异常来自Filter过滤器,,但是引起的原因是这一段代码(即46行)

part=req.getPart("file");


这一句话,本身并没有错误,至今我也不知道怎么错了,但是我觉得,是servlet版本的可能性比较大,控制台的错误提示第一句
java.lang.AbstractMethodError: org.apache.catalina.connector.RequestFacade.getPart(Ljava/lang/String;)Ljavax/servlet/http/Part;
Request Facade他是tomcat的API,所以你可能在serveltAPI,和jdk中搜不到,这是他的介绍
http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/org/apache/catalina/connector/RequestFacade.html,
这个类继承自httpRequest,,所以在Filter中会出现错误,因为doFilter中,有一参数是HttpRequest类型。所以抛出异常
至于他怎么就变成RequestFacade我就不知道了。
我在 Tomcat6.0和jdk中,将servlet-api 3.0能添加到的位置,我都添加了,还是不能解决,最后,我决定,重新下载一个Tomcat7.0,因为我听说,6.0貌似不符合s ervlet3.0规范,有冲突,重新配置完,解决问题,至于原因,不详。

总结:只要确认自己的编码没有问题,而是别人的组件或框架的问题,该重新配置重新配置。

你可能感兴趣的:(bug解决)