这个JSP上传SERVLET,我想把它的上传目录改到其他地方,如下,最后几行,应该是就改最后几行吧      String tmpPath = "d:\\my web\tmpdir";
      String savePath = "d:\\my web\updir";我把它改到这里,可是会报错,说“\”是不可用的符号。请高手指教import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.DefaultFileItemFactory;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;/**
* Servlet implementation class for Servlet: UploadServlet
*
*/
public class UploadServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
    /**
 * 
 */
private static final long serialVersionUID = 1L;
File tmpDir = null;//初始化上传文件的临时存放目录
    File saveDir = null;//初始化上传文件后的保存目录
  public UploadServlet() {
    super();
  }       protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request,response);
  }     
  
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try{
        if(ServletFileUpload.isMultipartContent(request)){
          DiskFileItemFactory dff = new DiskFileItemFactory();//创建该对象
          dff.setRepository(tmpDir);//指定上传文件的临时目录
          dff.setSizeThreshold(1024000);//指定在内存中缓存数据大小,单位为byte
          ServletFileUpload sfu = new ServletFileUpload(dff);//创建该对象
          sfu.setFileSizeMax(5000000);//指定单个上传文件的最大尺寸
          sfu.setSizeMax(10000000);//指定一次上传多个文件的总尺寸
          FileItemIterator fii = sfu.getItemIterator(request);//解析request 请求,并返回FileItemIterator集合
          while(fii.hasNext()){
            FileItemStream fis = fii.next();//从集合中获得一个文件流
            if(!fis.isFormField() && fis.getName().length()>0){//过滤掉表单中非文件域
                String fileName = fis.getName().substring(fis.getName().lastIndexOf("\\"));//获得上传文件的文件名
                BufferedInputStream in = new BufferedInputStream(fis.openStream());//获得文件输入流
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+fileName)));//获得文件输出流
                Streams.copy(in, out, true);//开始把文件写到你指定的上传文件夹
            }
          }
          response.getWriter().println("File upload successfully!!!");//终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗
        }
    }catch(Exception e){
        e.printStackTrace();
    }
  }             public void init() throws ServletException {
    /* 对上传文件夹和临时文件夹进行初始化
    *
    */
    super.init();
      String tmpPath = "d:\\my web\tmpdir";
      String savePath = "d:\\my web\updir";
    tmpDir = new File(tmpPath);
    saveDir = new File(savePath);
    if(!tmpDir.isDirectory())
        tmpDir.mkdir();
    if(!saveDir.isDirectory())
        saveDir.mkdir();    
  }   
}

解决方案 »

  1.   

    String tmpPath = "d:\\my web\\tmpdir"; 
          String savePath = "d:\\my web\\updir"; 都要用 "//" 啊 要么就用  "/"
      

  2.   

    d:\\my web\\tmpdir
    或者d:/my web/tmpdir
      

  3.   

    需要转义d:\\my web\\tmpdir"; 
      

  4.   

    如果是 "\"  要连续写两个 例如"\\"
    如果是"/"  就一个就行了
    例如:
     D:\\images\\upload.jpg

    D:/images/upload.jpg 
    是一样的
      

  5.   

    我改成\\是不报错了,可是tomcat 出问题了,
    严重: Servlet /WebRoot threw load() exception
    javax.servlet.UnavailableException: Initializing application data source org.apache.struts.action.DATA_SOURCE
    at org.apache.struts.action.ActionServlet.initModuleDataSources(ActionServlet.java:1091)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:472)
    at javax.servlet.GenericServlet.init(GenericServlet.java:212)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1161)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:981)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4058)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4364)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
    at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:924)
    at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:887)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1147)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:516)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
    这是什么情况,请高手指教
      

  6.   

    好像是说struct-config.xml里面的datasource不正确,看看连接的URL对不,IP对不!
    或者jdbc驱动jar包的路径是不是对的