手记

DWR3.0实现异步上传文件

         Struts2.3.1 中整合DWR3.0 实现文件上传步骤1:导入 dwr*.jar ,

1.struts2-dwr-plugin-2.3.1.jar


步骤2:在web.xml中引入dwr的配置

<servlet>     <servlet-name>dwr</servlet-name>       <servletclass>          org.directwebremoting.servlet.DwrServlet       </servlet-class>    <init-param>        <param-name>debug</param-name>        <param-value>true</param-value>     </init-param></servlet><servlet-mapping>    <servlet-name>dwr</servlet-name>    <url-pattern>/dwr/*</url-pattern></servlet-mapping>


注意需要修改原来配置好的 struts2 原<url-pattern>/*</url-pattern> 为<url-pattern>*.action</url-pattern> 表示struts2只负责处理 .action结尾的请求

步骤3:在web.xml同级目录中定义一个dwr.xml 配置文件, (dwr.xml可以去dwr.jar包中获得)

dwr.xml配置如下:


<dwr>    <allow>    <!--creator="new":表示每一次dwr请求但是创建一个新的实例    javascript="DWRService"表示页面通过什么名字来对应调用你的java类提供服务 -->    <create creator="new" javascript="DWRService">    <!--指定为前台提供服务的java类   这里的DWRDemo类在页面使用的时候使用DWRService调用-->    <param         name="class"value="net.farxiang.dwr.DWRUpload">          </param>            </create>    </allow> </dwr>

步骤4:必须引入依赖的js文件一般有2个ajax 核心引擎

<script type="text/javascript" src="/dwr/engine.js"></script>

对应 在步骤3:中定义的 javascript="DWRService" 关联的java类

<script type="text/javascript" src="/dwr/interface/DWRService.js"></script>

可选引入依赖提供一些方便的工具方法的使用

<script type="text/javascript" src="/dwr/util.js"></script>

因为在xml里开启了debug模式,以上引入的js文件都可以在url里输入项目路径/dwr得到。

步骤5:使用DWRService.headUp(参数 , 如果有返回,回调方法 )代码如下:html代码

<script type="text/javascript">    var upload = function(){        var headf = dwr.util.getValue("headfile");          DWRService.headUp(headf,function(savePath){            var div = document.getElementById("div");            var img = document.createElement("img");            img. savePath;             img.id = "target";            div.appendChild(img);      });    };</srcipt><input type="file" name="headfile" id="headfile" onchange="upload();"> <div id="div"></div>

java代码如下:

package net.farxiang.dwr.DWRUpload;import java.io.File;import org.apache.commons.io.FileUtils;import org.directwebremoting.WebContext;import org.directwebremoting.WebContextFactory;import org.directwebremoting.io.FileTransfer;public class DWRUpload{           public String headUp(FileTransfer ft){            WebContext  wc = WebContextFactory.get();            //获得应用路径           String headImages = wc.getSession().getServletContext().getRealPath("/images");             File file = new File(headImages);             //如果文件夹不存在,就创建          if( !file.exists()){              file.mkdirs();           }             try{             //文件上传核心代码使用 commons-io-2.0.1.jar完成            String[] fileNameSplit = ft.getFilename().split("\\\\");            String fileName = fileNameSplit[fileNameSplit.length-1];       FileUtils.copyInputStreamToFile(ft.getInputStream(), new File(headImages+File.separator+fileName));             return headImages+File.separator+fileName;            }catch(Exception e){              e.printStackTrace();             }           return null;     }}


0人推荐
随时随地看视频
慕课网APP