可以,但不能用上传控件了,本身ajax就可以用xml和servlet交互的,但说不定会有乱码

解决方案 »

  1.   

    楼主试试这个
    sample.html<form name="upfile_form" action="UploadServlet" method="POST" enctype="multipart/form-data">
     <p>input file title:
       <input type="text" name="file_title" />
      </p>
      <p>select less than 200K file:
       <input type="file" name="upload_file" id="upload_file" onchange="checkFileSize(this);" />
      </p>
      <p>
       <input type="submit" value="submit" />
      </p>
      <iframe name="check_file_frame" style="display:none;"></iframe>
    </form>
    web.xml<servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.test.servlet.UploadServlet</servlet-class>
    </servlet><servlet-mapping>
        <servlet-name>UploadServlet</servlet-name>
        <url-pattern>/UploadServlet</url-pattern>
    </servlet-mapping>servletpublic class UploadServlet extends HttpServlet
    {public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
       request.setCharacterEncoding("UTF-8");
       DiskFileItemFactory factory=new DiskFileItemFactory();
       String path=request.getRealPath("/upload");
       factory.setRepository(new File(path));
       factory.setSizeThreshold(1024*1024);
     
       ServletFileUpload upload=new ServletFileUpload(factory);
       try{
        List<FileItem> list=upload.parseRequest(request);
      
        for(FileItem item:list)
        {
         if(item.isFormField())
         {
          String name=item.getFieldName();
          String value=item.getString("UTF-8");
          request.setAttribute(name, value);
         }
         else
         {
          String name=item.getFieldName();
          String value=item.getName();
          int start=value.lastIndexOf("\\");
          String fileName=value.substring(start+1);
          request.setAttribute(name, fileName);
        
          item.write(new File(path,fileName));
          /*OutputStream os=new FileOutputStream(new File(path,fileName));
        
          InputStream is=item.getInputStream();
        
          byte []buffer=new byte[400];
          int length=0;
        
          while((length=is.read(buffer))>0)
          {
           os.write(buffer,0,length);
          }
          os.close();
          is.close();*/
        
         }
        }
       }
       catch (Exception e) {
        e.printStackTrace();
       }
       request.getRequestDispatcher("/result.jsp").forward(request, response);
    }}
    注意:需要添加commons-fileupload.jar commons-io.jarcheck_file.js var fileForm = new Object();
    function checkFileSize(fileObj) {
      if(fileObj.value != "") {
        var form = document.forms['upfile_form'];    //把form的原始数据缓存起来
        fileForm.f = form;
        fileForm.a = form.getAttribute("action");  //form.action 为一个静态的对象,所以这里要使用getAttribute方法取值
        fileForm.t = form.target;    //请求服务器端
        form.target = "check_file_frame";
        //form.action = "./ajax.php?act=upload";
        form.action = "UploadServlet";
        //form.submit(); 其实上面的action已经会执行submit操作,这步可有可无
      }
      return false;
    }function ajax_callback(result) {
      //还原form属性
      fileForm.f.target = fileForm.t;
      fileForm.f.setAttribute("action", fileForm.a);  //处理结果
      switch(result) {
        case 0:
          alert("文件超过了200K或者没有选择文件,请重新上传!");
          //todo somthing
        default :
          alert("合法");
          //do somthing,如果你想使用这种方法实现真正的上传的话,那么在成功后把返回的文件路经存储在一个 input[hidden]里是个不错的办法
      }
      return ;
    }
      

  2.   

    这是正常的用页面form向servlet传上传文件的方法,并实现了上传文件功能,servlet方法在这我就不写了,
    但这种方法上传完后,页面直接跳转到servlet了(什么也没显示),我现在要做的是上传完文件后,保持当前页面不变,帮采用ajax异步提交的方法,但没有找到好用的方法。<form name="accidentForm" action="uploadServlet" method="post" enctype="multipart/form-data">
                                                <table>
                                                    <tr>
                                                        <td>
                                                            <span id="fileLabel"><input type="file" name="file" id="file"></span>
                                                        </td>
                                                        <td>
                                                            <input type="submit" value="上传" class="button2" 
                                                        </td>
                                                    </tr>
                                                </table>
      

  3.   

    Epiphone,你这个方法和我列出的那个差不多吧
      

  4.   

    好像ajax不可以这样做吧,至少我还没有找到这种解决办法,
    不过我倒是做过不刷新上传,就是把你的上传处理form放到一个隐藏的iframe中,或者采用弹出窗处理,
    如果上传后还要显示相关的信息,则可以采用ajax取相关值在页面显示。
      

  5.   

    可以的  使用jquery的ajax就可以实现,以前处理过这方面的东西.....其他的ajax我就不知道怎么处理了
      

  6.   

    烦请楼主略微讲讲AJAX,怎么用啊,难倒就是传说中的XMLhttrequest对象?我还没有工作经验,上次去面试一家,竟然让我现场搭建SSH框架,做注册登录,还要用ajax,我直接把jar包加进去了,几个xml文件写好就直接走人啦天天看到大家都在说ajax,我完全不知道怎么用一定要学一个框架??jQuery?Extjs?Dojo?都听说过不知道怎么用,楼主稍微讲讲比如说让你去做我上次那个面试题,你会怎么做呢,2个小时内,做这些东西,要用AJAX
      

  7.   

    可以。
    前台使用AJAX上传:jQuery + jQuery的上传插件如ajaxupload.js
    ajaxupload demo: http://valums.com/files/2009/ajax-upload/demo-jquery.htm
    这个例子里的后台是php,你把php部分改成servlet就可以了。
    Servlet代码:跟一般的文件上传代码完全一样。1. 前端网页代码: upload.html,jquery.js和ajaxupload.js可以到网上搜索下载。
    <html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        <title>Upload Demo</title>    <style type="text/css"></style>    <script src="js/jquery.js"></script>
        <script src="js/ajaxupload.js"></script>
        <script type="text/javascript">
        $(function() {
            // 创建AJAX方式上传文件
            var $uploadBtn = $("#uploadBtn");
            new AjaxUpload($uploadBtn, {
         action: 'upload.action', // servlet地址,在web.xml的url-pattern里配置
         name: 'uploadfile',
         onSubmit: function(file, ext){
         $("#info").html("start upload file...");
         },
         onComplete: function(file, response){
             $("#info").html(response);
         }
         });
        });
        </script>
    </head><body>
        <div id="info">Choose file to upload</div>
        <input type="button" width="200px" id="uploadBtn" value="Upload Demo">
    </body>
    </html>
    2. 后台Servlet代码:简单的打印出接收到的文件。最好是上传一个普通的文本文件,然后查看接收到的数据格式与其他的servlet上传文件接收到的内容是否一致:安全是一样的内容。
        @Override
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
            int len = -1;
            byte[] buf = new byte[4048];
            ServletInputStream in = request.getInputStream();        while ((len = in.readLine(buf, 0, buf.length)) != -1) {
                System.out.println(new String(buf, 0, len - 1));
            }
        }
      

  8.   

    ajax是不能传输文件流的,可以用隐藏的iframe模拟实现你要的效果,例子网上挺多的。
    也可以用Jquery或者ext插件,封装好的~~
      

  9.   

    mynameissunli:
        Ajax不是一个技术,它实际上是几种技术,每种技术都有其独特的用处。具体包括什么你可以百度一下,百度介绍的肯定比我说的详细。
        你说的面试题:SSH不用ajax就能做一个登录,但面试是强调用ajax,我认为可以搭建好SSH后,在页面部分采用ajax异步提交的方式来向action传递登录名和密码,之后验证、返回。
        我也是个菜鸟,这只是我的想法,请下面高人来给你个更好答案吧!
      

  10.   

    注册登录那页面验证用户名需要用ajax
    至于提交注册我还真不晓得用ajax有啥的好处
      

  11.   

    注意时可以用AJAX做个重名提示,如:此账号已经存在!
      

  12.   

    用户可以在任意页面进行注册,注册成功后提示,然后直接登录,并更新当前页面用户登录状态,但不刷新当前页面。实现这个功能你就知道ajax有多重要了。
      

  13.   


    function upload(files){
                createRequest();
                var url = "/ship/upload";
                request.open("post", url, false);
                request.setRequestHeader('Content-type','multipart/form-data');
                request.onreadystatechange = processResponse;
                request.send(---------);
            }这个send括号里可以传递一个文件对象或文件流吗?
      

  14.   

    搜“json Fileupload组件”用起来简单得很服务端用Apache的common包即可,自己写也可以
      

  15.   


    我知道ajax要实现的功能啊,知道它的重要性,不知道怎么用,最简单的那个对象用过。然后论坛上天天看到人家说要用ajax,ajax就有这么容易使用么?大家用ajax是用什么技术?难不成说,我要使用ajax,就一定要去学习一个ajax的框架?我还有好多东西都没学呢,SSH都才刚开始~一直都在打基础,现在有点心急了
      

  16.   


    其实ajax所用到的大部分技术都是原有老技术的组合,除了XMLhttrequest算是web开发的新技术。如果没有web开发基础,建议先学学html、JavaScript、Css、DOM这些基础的知识,然后再看一下ajax方面的介绍,就什么都清楚了。有一本书叫《ajax基础教程》,写得不错,可以看看,如果你有web开发基础,也许这本书你还没看完,就会说:他妈的,这哪儿叫基础,明明就叫精通嘛。
      

  17.   

    算了,我用无刷新跳转的方法实现这个功能,仍然非常感谢大家。结了
    简单说下方法吧:
    <iframe name="hiddenFrame" id="hiddenFrame" style="display:none"></iframe>
    <form name="accidentForm" action="" method="post" enctype="multipart/form-data" target="hiddenFrame">form增加一个target的属性指向那个隐藏的iframe即可。