天天看點

Struts2.1.8 中整合DWR3.0 實作檔案上傳

Struts2.3.1 中整合DWR3.0 實作檔案上傳  

步驟1:導入     dwr*.jar ,  

        struts2-dwr-plugin-2.3.1.jar

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

<servlet>
     <servlet-name>dwr-invoker</servlet-name>
     <servlet-class>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-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
  </servlet-mapping>
           

  注意需要修改原來配置好的 struts2 原<url-pattern>/*</url-pattern> 為<url-pattern>*.do</url-pattern> 表示struts2隻負責處理 .do  結尾的請求

  步驟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調用
   java類就是一個普通的java類
   <param name="class" value="org.fd.dwr.DWRDemo"></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>

步驟5:

    使用

    DWRService.sayHello(參數    , 如果有傳回,回調方法 )

代碼如下:html代碼

<script type='text/javascript' src='/dwr/engine.js'></script>
 <script type='text/javascript' src='/dwr/util.js'></script>
 <script type='text/javascript' src='/dwr/interface/DWRService.js'></script>
 <script language="JavaScript">
           

 //dwr檔案上傳

var up = function(){
   var headf = dwr.util.getValue("headfile");
   DWRService.headUp(headf,  function(flag){
    if(flag){
     alert("成功");
    }else{
     alert("不成功");
    }
   });
 }
 
</script>
</head>
<body>
   <img  src="images/angel.jpg" id="headimage">
   <input type="file" name="headfile" id="headfile">
   使用者名:<input type="text" name="name" id="name" οnblur="up()">
   <input type="button" value="上傳頭像" οnclick="up()"/>
</body>
</html>
           

dwr.xml 配置

<dwr>
 <allow>
  <create creator="new"  javascript="DWRService">
   <param name="class" value="org.fk.dwr.DWRDemo"></param>
  </create>
 </allow>
</dwr>
           

java代碼如下:

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 DWRDemo {
   public String sayHello(String name){
    System.out.println("歡迎您:"+name);
    return "歡迎您:"+name;
   }
   
   /**
    * dwr 檔案上傳
    * @param ft  FileTransfer 封裝類前台js送出的檔案資料
    * @return
    */
   public boolean headUp(FileTransfer ft){

    WebContext  wc = WebContextFactory.get();
    //獲得應用路徑
    String headImages = wc.getSession().getServletContext().getRealPath("/headImages");

    File file = new File(headImages);
    //如果檔案夾不存在,就建立
    if( !file.exists()){
     file.mkdirs();
    }
    try{
     //檔案上傳核心代碼使用 commons-io-2.0.1.jar完成
     FileUtils.copyInputStreamToFile(ft.getInputStream(), new File(headImages+File.separator+ft.getFilename()));
     return true;
     }catch(Exception e){
     e.printStackTrace();
    }
    return false;
   }
}