程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> struts2整合CKEditor和CKFinder實現上傳

struts2整合CKEditor和CKFinder實現上傳

編輯:關於JSP

實現與Struts2的整合,整合的過程確實easy.不過實現之後,圖片上傳不上去,上傳之後顯示“文件不存在”,然後在網上找了一些資料,經過總結最終實現了這個功能。此問題的原因就是struts2的攔截器,在web.xml中,可以清楚的看到: [html]   <filter-mapping>           <filter-name>struts2</filter-name>           <url-pattern>/*</url-pattern>    </filter-mapping>     上面的配置,struts2會攔截所有以"/"開頭的URL. 在CKEditor的配置中,CKEditor是使用servlet來實現的,它也是通過攔截URL的機制進行工作的,CKeditor的部分servlet配置如下: [html]   <servlet-mapping>       <servlet-name>ConnectorServlet</servlet-name>       <url-pattern>/ckfinder/core/connector/java/connector.java</url-pattern>   </servlet-mapping>   現在就很明了了,struts2攔截器會攔截所有以"/"開頭的URL,CKEd的servlet攔截器攔截所有以" /ckfinder/core/connector/java/connector.java"開頭的URL.當時CKEditor上傳圖片的時 候,URL中包含有"/"(指網站根目錄),優先被struts2的攔截器攔截,這樣上傳的URL請求就不會轉發到CKEditor的servlet中, 所有上傳圖片也就不會成功. 問題所在找到了,那這個問題就好解決了,最簡單的辦法是將struts2的攔截器"/*"改成"#.action"或者"*.do",可以這樣改: [html]   <filter-mapping>           <filter-name>struts2</filter-name>           <url-pattern>*.action</url-pattern>       </filter-mapping>   第二個辦法是: 自己來定義一個CKeditor的過濾器,讓它來繼承Struts2的過濾器FilterDispatcher,其完整代碼是 [java]   package cn.edu.csu.software.filters;   import java.io.IOException;       import javax.servlet.FilterChain;    import javax.servlet.ServletException;    import javax.servlet.ServletRequest;    import javax.servlet.ServletResponse;    import javax.servlet.http.HttpServletRequest;    import org.apache.struts2.dispatcher.FilterDispatcher;      @SuppressWarnings("deprecation")   public class FCKFilter extends FilterDispatcher {        public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain) throws IOException, ServletException {                  HttpServletRequest request = (HttpServletRequest) req;                 String URI = request.getRequestURI();                String[] uriArray = URI.split("/ckfinder/core/connector/java/*/");                int arrayLen = uriArray.length;                if (arrayLen >= 2) {                    chain.doFilter(req, res);                 }else {                    super.doFilter(req, res, chain);                  }            }         }        上面的方法重寫了struts2的過濾器FilterDispatcher中的doFilter方法,執行原理為:獲得完整的http url的地址,然後判斷URL地址中是否包含CKEditor的servlet攔截規則"/ckfinder/core/connector/java /*/",若包含,struts2就不攔截該URL請求,而直接轉發,交友CKEditor的servlet來處理;若不包含,ze攔截器攔截該URL請 求,由struts2來處理 自定義的過濾器寫完之後,要在web.xml中更改struts2的攔截器類,不能再使用struts2的默認攔截器類 FilterDispatcher 。但是請放心,自定義的過濾器FCKFilter繼承了 FilterDispatcher 裡的所有的方法,因此項目依然照常運行。www.2cto.com <!-- struts2配置文件 --> [html]  <filter>           <filter-name>struts2</filter-name>           <!--              <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>          -->           <filter-class>cn.itcast.utils.FCKFilter</filter-class>   </filter>   <filter-mapping>           <filter-name>struts2</filter-name>           <url-pattern>/*</url-pattern>   </filter-mapping>  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved