空指针异常不明白错在哪里~~~
提示错误在红色代码那行,但是各个对象不是空的。请高手指点一二,万分感激!!!源码:package cn.rdt.famework.frame.biz.core.servlet.cwd;import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;import cn.rdt.famework.biz.process.chenweid.RenamePolicyCos;
import cn.rdt.famework.frame.config.FrameConstant;
import cn.rdt.famework.frame.core.DBHelper;
import cn.rdt.famework.frame.core.DFIHelper;
import com.oreilly.servlet.MultipartRequest;public class SPSC extends HttpServlet { /**
 * Constructor of the object.
 */
public SPSC() {
super();
}

private static final String SEQ_SPBH = "seq_spbh";    //视频表 序列

/**
 * 日志对象
 */
private Log logger = LogFactory.getLog(getClass()); /**
 * Destruction of the servlet. <br>
 */
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} /**
 * The doGet method of the servlet. <br>
 *
 * This method is called when a form has its tag value method equals to get.
 * 
 * @param request the request send by the client to the server
 * @param response the response send by the server to the client
 * @throws ServletException if an error occurred
 * @throws IOException if an error occurred
 */
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doPost(request,response);
} /**
 * The doPost method of the servlet. <br>
 *
 * This method is called when a form has its tag value method equals to post.
 * 
 * @param request the request send by the client to the server
 * @param response the response send by the server to the client
 * @throws ServletException if an error occurred
 * @throws IOException if an error occurred
 */
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.info("开始上传文件... ...");

//默认允许上传文件的大小 500M
int maxFilesize = 10 * 500 * 1024 * 1024;
//设置编码方式
String encoding = "GBK";
//成功或失败的消息
String message = "";
// 实例化数据库专家类
DBHelper dbHelper = new DBHelper();

//获取配置参数   允许上传文件的大小
String fileSize = getServletConfig().getInitParameter("size");
if(fileSize != null && !"".equals(fileSize)) {
maxFilesize = Integer.parseInt(fileSize) * 1024 * 1024;
} //获取配置参数    允许上传文件的类型
List fileTypeList = null;
String fileType = getServletConfig().getInitParameter("type");
if(fileType != null && !"".equals(fileType)) {
fileTypeList = Arrays.asList(fileType.split(","));
} // 默认的文件上传后保存路径
String saveDir = getServletContext().getRealPath("userFiles/videoFile");

System.out.println(saveDir+"-----------------------------");
//声明业务变量
MultipartRequest multi = null;
File file = null;

try {
RenamePolicyCos cospolicy = new RenamePolicyCos();
multi = new MultipartRequest(request,saveDir,maxFilesize,encoding,cospolicy);
System.out.println(saveDir+"=================================================");
//获取上传文件的文件名
String fileName = multi.getFilesystemName("file");
System.out.println(fileName+"========================================到了这AAA!");
//获取上传文件
file = multi.getFile("file");
//允许上传的文件类型
String okFix = RenamePolicyCos.getFiletype(fileName);
System.out.println(okFix+"==============----========================================");
//如果上传文件不允许在被允许的列表中
if(fileTypeList != null && !fileTypeList.contains(okFix)) {
message = "上传的类型不被支持!";
file.delete();
logger.info("文件上次失败:" + message);
request.getRequestDispatcher("jsp/sbts.jsp").forward(request, response);
}
System.out.println("1========================================到了这!");
//生成序列
int spbh = new DFIHelper(dbHelper,FrameConstant.DATABASE_PRODUCT_NAME,SEQ_SPBH).nextIntValue();
//获取表单数据
String spbt = multi.getParameter("SPBT");
String fbdw = multi.getParameter("FBDW");
String spbs = multi.getParameter("SPBS");
String spms = multi.getParameter("SPMS");
//生成系统日期
String rq = "select to_char(Sysdate,'yyyy-MM-dd') sj from dual";
Map xtrq = (Map)dbHelper.queryForMap(rq);
rq = xtrq.get("sj").toString();
System.out.println("2===========================================到了这!");
//SQL语句
String sql = "insert into spkx_sp(spbh,spbt,splj,fbdw,fbrq,spbs,spms)" +
  "values("+spbh+",'"+spbt+"','"+fileName+"','"+fbdw+"',to_date('"+rq+"','yyyy-MM-dd'),default,'"+spms+"')";
System.out.println("3========================================到了这!"+sql);
//传值
        request.setAttribute("spbt", spbt);
        request.setAttribute("splj", fileName);
        request.setAttribute("fbdw", fbdw);
        request.setAttribute("fbrq", rq);
        request.setAttribute("spbs", spbs);
        request.setAttribute("spms", spms);
        request.setAttribute("message", message);
        
        // 执行SQL
dbHelper.execute(sql);
message = "视频上传成功!";
System.out.println("4===========================================到了这就不用说啦  OK 啦!");
} catch(Exception e) {
message = "请检查上传文件是否合法,";
logger.info("文件上次失败!" + message + e);
request.getRequestDispatcher("jsp/sbts.jsp").forward(request, response);
e.printStackTrace();

request.getRequestDispatcher("jsp/spkx/spmx.jsp").forward(request, response);
} /**
 * Initialization of the servlet. <br>
 *
 * @throws ServletException if an error occurs
 */
public void init() throws ServletException {
// Put your code here
}}
异常信息:[20:25 09/09 DEBUG cn.rdt.famework.frame.jdbc.datasource.DataSourceUtils] - Fetching JDBC Connection from DataSource
[20:25 09/09 DEBUG cn.rdt.famework.frame.jdbc.datasource.DataSourceUtils] - Returning JDBC Connection to DataSource
[20:25 09/09 INFO  cn.rdt.famework.frame.biz.core.servlet.cwd.SPSC] - 开始上传文件... ...
D:\bea\user_projects\domains\mydomain\applications\gmfj\userFiles\videoFile-----------------------------
[20:25 09/09 INFO  cn.rdt.famework.frame.biz.core.servlet.cwd.SPSC] - 文件上次失败!请检查上传文件是否合法,java.lang.NullPointerException
java.lang.NullPointerException
        at com.oreilly.servlet.multipart.FilePart.writeTo(FilePart.java:164)
        at com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:266)
        at cn.rdt.famework.frame.biz.core.servlet.cwd.SPSC.doPost(SPSC.java:111)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
        at cn.rdt.famework.frame.biz.core.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:53)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7053)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
        at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
        at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
<2010-9-9 下午08时25分44秒 CST> <Error> <HTTP> <BEA-101020> <[ServletContext(id=5415651,name=gmfj,context-path=/gmfj)] Servlet failed with Exception
java.lang.IllegalStateException: Cannot forward a response that is already committed
        at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:125)
        at cn.rdt.famework.frame.biz.core.servlet.cwd.SPSC.doPost(SPSC.java:164)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
        at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1077)
        at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:465)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
        at cn.rdt.famework.frame.biz.core.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:53)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:7053)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
        at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3902)
        at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2773)
        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224)
        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183)
>

解决方案 »

  1.   

    at cn.rdt.famework.frame.biz.core.servlet.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:53)
    你这个地方CharacterEncoding为空吧
      

  2.   

    post 111行。如果是你红色的部分,你好好看看你的MultipartRequest的构造函数是如何进行初始化的。
      

  3.   

     应该是这两行里面有问题吧
    RenamePolicyCos cospolicy = new RenamePolicyCos();
     multi = new MultipartRequest(request,saveDir,maxFilesize,encoding,cospolicy);
    紧接着它们的那条输出语句都没有
      

  4.   

    这个是错误是由于response多次提交或者是由于有页面显示后仍然含请求转向产生的,就是说程序在return之前就已经执行了跳转或者执行过response,之后遇到return的话,程序想再次执行跳转,也就是重定向,这时功能也许会实现了,但是控制台会报错,所以控制好跳转是很重要的,我现在的解决办法还是加return null,还没找到更好的解决办法,return null就不能转到另外的页面
    我贴的别人的
      

  5.   

    大哥,我的全是 request 啊····
      

  6.   

    还是请注意查看一下你的转发过程是否正确,不是说你看到request就是一个使用request。在你上传过程转发中有没有返回值在检查一下吧,或者换一种实现方法,因为有时候这个转发一直都有错误存在。
      

  7.   

    可问题是 还没有执行到转发的那一步, 创建MultipartRequest对象那行 就已经出现空指针异常啦 
      

  8.   

    multi = new MultipartRequest(request,saveDir,maxFilesize,encoding,cospolicy);
    你把 cospolicy 输出 看是不是NULL 
      

  9.   


    稍做修改,现在是 
    //获取上传文件的文件名
                String fileName = multi.getFilesystemName("file");
                System.out.println(fileName+"========================================到了这AAA!");
    fileName 是 NULL 了 不知道这个方法是获取哪里的 “file”
      

  10.   


    String fileName = multi.getFilesystemName();
    String fileName = multi.getFilesystemName("fileName");
      System.out.println(fileName+"========================……因为我没有使用这个cos上传所以不知道这个对不对。