struts2 整合 CKEditor和CKFinder 常遇问题解决
一、如果出现:HTTP Status 404 - /upobj/ckfinder/core/connector/java/connector.java 错误
a、检查 CKEditor和CKFinder 目录与web.xml 中配置是否一至。

我的项目中,ckeditor 和 ckfinder 目录是放在WebRoot 目录下的,因此在web.xml中需要这样配置:
请注意红色字体部分: /ckfinder/core/connector/java/connector.java
开始的 / 表示项目根路径,对于页面来讲,就是指:WebRoot 目录
/ckfinder 就是指 ckfinder 文件夹是放在WebRoot目录下的。
-
<!-- upload -->
-
<servlet>
-
<servlet-name>ConnectorServlet</servlet-name>
-
<servlet-class>com.ckfinder.connector.ConnectorServlet</servlet-class>
-
<init-param>
-
<param-name>XMLConfig</param-name>
-
<param-value>/WEB-INF/config.xml</param-value>
-
</init-param>
-
<init-param>
-
<param-name>debug</param-name>
-
<param-value>false</param-value>
-
</init-param >
-
<load-on-startup>1</load-on-startup>
-
</servlet >
-
<servlet-mapping>
-
<servlet-name>ConnectorServlet</servlet-name>
-
<url-pattern >/ckfinder/core/connector/java/connector.java</url-pattern>
-
</servlet-mapping>
-
<filter>
-
<filter-name>FileUploadFilter</filter-name>
-
<filter-class>com.ckfinder.connector.FileUploadFilter</filter-class>
-
<init-param>
-
<param-name>sessionCookieName</param-name>
-
<param-value>JSESSIONID</param-value>
-
</init-param>
-
<init-param>
-
<param-name>sessionParameterName</param-name>
-
<param-value>jsessionid</param-value>
-
</init-param>
-
</filter>
-
<filter-mapping>
-
<filter-name>FileUploadFilter</filter-name>
-
<url-pattern >/ckfinder/core/connector/java/connector.java</url-pattern>
-
</filter-mapping>
b、检查 ckeditor/config.js 文件。
红色部分路径需要与目录路径一至,
路径需以: /ckfinder 开头。
-
CKEDITOR.editorConfig = function (config) {
-
config.filebrowserBrowseUrl = '/ckfinder/ckfinder.html' ;
-
config.filebrowserImageBrowseUrl = '/ckfinder/ckfinder.html?type=Images' ;
-
config.filebrowserFlashBrowseUrl = '/ckfinder/ckfinder.html?type=Flash' ;
-
config.filebrowserUploadUrl = '/ckfinder/core/connector/java/connector.java?command=QuickUpload&type=Files' ;
-
config.filebrowserImageUploadUrl = '/ckfinder/core/connector/java/connector.java?command=QuickUpload&type=Images' ;
-
config.filebrowserFlashUploadUrl = '/ckfinder/core/connector/java/connector.java?command=QuickUpload&type=Flash' ;
-
config.filebrowserWindowWidth = '1000';
-
config.filebrowserWindowHeight = '700';
-
// 编辑器样式,有三种:'kama'(默认)、'office2003'、'v2'
-
config.skin = 'office2003';
-
// 背景颜色
-
config.uiColor = '#FFF';
-
// 工具栏(基础'Basic'、全能'Full'、自定义)plugins/toolbar/plugin.js
-
config.toolbar = 'Full';
-
config.height = 400;
-
config.resize_enabled = false;
-
config.autoUpdateElement = true;
-
config.language = "zh-cn" ;
-
};
二、如果与Struts2 整合后,出现上传没反应的情况
那是因为Struts 拦截了上传路径而产生的错误,可通过两种方式解决:
a、修改web.xml 中struts 配置
zasdasd
struts2
com.wng.interceptor.MyStrutsInterceptor
struts2
/*
s
struts2
com.wng.interceptor.MyStrutsInterceptor
struts2
/*
struts2
com.wng.interceptor.MyStrutsInterceptor
struts2
/*
struts2
org.apache.struts2.dispatcher.FilterDispatcher
struts2
/*
|
把rl-pattern>/* 改成 /*.action</url-pattern>
但是很不幸的是,有时候更改成/*.action 会报异常。因此,可以采用以下的方式。
a、自定义一个MyStrutsInterceptor的过滤器,让它来继承Struts2的过滤器FilterDispatcher,在拦截URI时进行判断。
-
package com.wng.interceptor;
-
-
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 MyStrutsInterceptor extends FilterDispatcher {
-
public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain) throws IOException, ServletException {
-
HttpServletRequest request = (HttpServletRequest) req;
-
String URI = request.getRequestURI();
-
System.out.println("URI is-------------" + URI);
-
String[] ckfarr = URI.split("/ckfinder/core/connector/java/*/");
-
int arrayLen = ckfarr.length;
-
if (arrayLen >= 2) {
-
chain.doFilter(req, res);
-
}else {
-
super.doFilter(req, res, chain);
-
}
-
}
-
}
原理: 自定义MyStrutsInterceptor类继承自FilterDispatcher,并重写了doFilter方法,对获取的URI地址进行判断,如包含:/ckfinder/core/connerctor/java/*/ 则直接转发出去而不拦载,若不包括,则交Struts 拦载处理。
接下来还需要修改web.xml 中struts2配置
struts2
org.apache.struts2.dispatcher.FilterDispatcher
struts2
/*
修改成:
struts2
com.wng.interceptor.MyStrutsInterceptor
struts2
/*
阅读(2272) | 评论(0) | 转发(0) |