jsp与FCKeditor配置使用说明
2016-05-10 20:34
645 查看
前言:
FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多WEB项目和大型网站均采用了FCKeditor。
本文讲解JSP与fckeditor的配合使用,以使文本和图片可以一起存入数据库并读取(比如QQ空间,论坛等)。
使用步骤:
第一步:准备好以下jar包(如图)
FCKeditor jar包下载请点击此处
第二步:接下来我们要做两件事情,一件事情就是要把FCKEditor控件放到web项目中,这个控件是用于网页的,所以其代码是使用JavaScript脚本编写的,需要和web网页一起被下载的浏览器上才能执行;第二件事情就是这个网页上的控件因为支持图片的上传与下载,所以在上传与下载的时候需要服务端的支持,那么我们我的java服务端如何支持这个控件的工作呢?FCKEditor自身提供了相关的java工具,就是我们下载的第二个文件。因此我们要做的第二件事情就是在服务端配置java工具,使得FCKEditor控件在处理上传图片时能够正确工作。
接下来我们就开始对配置FCKEditor控件进行两项工作:
解压缩FCKeditor_2.6.5.zip,在其中我们能找到一个文件夹叫fckeditor,那么将这个文件夹整个复制到你的web应用的根目录下,即WebRoot下;
解压缩fckeditor-java-2.4.1-bin.zip,将这样几个jar文件复制到web应用的WEB-INF/lib目录中(commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,java-core-2.4.1.jar,slf4j-api-1.5.2.jar,slf4j-simple-1.5.2.jar),其中最后一个文件在这个zip包中可能不存在,那么你可以下载一个文件叫fckeditor-java-2.4.1-bin.zip,在这个war文件中的lib中存在上述的5个jar文件,其实在war中也包含了FCKEditor控件的内容,也就是说如果你只是下载了war也可以了。
classpath目录中创建一个名叫为fckeditor.properties的文件(即src包下面),文件中放置一行内容为:
第三步:配置web.xml
在web.xml中添加一个Servlet的配置,配置内容如下:
第四步:添加显示页面(JSP页面)
1.在需要使用这个控件的jsp文件的开头添加标签库的引入语句:
2.添加显示主页面,至此已经完成。但可能存在部分问题,后面演示。
3.获取控件中输入的内容方法:(根据自己需求而定)
(1)导入相关的方法,注意src下的路径问题:
(2)利用javascript获得数据,当然先在body中有调用方法的动作
注意:请求时传到action中小心乱码,我使用了encodeURIComponent(fckContent);
(3)在浏览器中输入JSP页面地址,就显示出来了
但是当点击上传图片时,问题出现了…………
一直是等待……并且控制台有问题了……
严重:Servlet.service() for servlet Connector threw exception
java.lang.IndexOutOfBoundsException: Index: 0,Size: 0
(4)解决方法:
原因分析:如果FCKeditor单纯地在jsp页面上显示,不会存在这样的问题。但是如果FCKeditor与Struts2整合,就会出现这样的问题。造成此问题的原因就是Struts2的拦截器。在web.xml配置文件中,可以清楚的看到:
在FCKeditor的配置中,FCKeditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,FCKeditor的部分servlet配置如下:
现在就很明了了,struts拦截所有以“/”开头的URL,FCKeditor的servlet拦截所有以“/fckeditor/editor/filemanager/connectors/”开头的URL,当你使用FCKeditor上传图片的时候,URL中包含有“/”(指网站根目录),优先被struts的拦截器拦截,这样上传图片的URL请求自然就不会转发到FCKeditor的servlet,所以我们上传图片也就不成功。
解决方法:(如果你的struts核心包中没有StrutsPrepareAndExecuteFilter,也可以继承FilterDispatcher类)
我自己定义了一个过滤器FCKFilter.java,让它继承Struts2的过滤器StrutsPrepareAndExecuteFilter,完整代码如下:
然后再在web.xml中更改过滤配置,只用修改filter中的class属性即可,其中为你上面那个FCKFilter 类的全名,如下:
至此功能已经完成。上面的代码是重写了Struts2的过滤器StrutsPrepareAndExecuteFilter中的doFilter方法,执行的原理为:
获得完整的http url地址,然后判断url地址中是否包含有FCKeditor的servlet拦截规则“/fckeditor/editor/filemanager/connectors/”,若包含,struts就不拦截该url请求,而是直接转发,交由FCKeditor的servlet来处理;若不包含,则拦截该url请求,由struts来处理。
FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多WEB项目和大型网站均采用了FCKeditor。
本文讲解JSP与fckeditor的配合使用,以使文本和图片可以一起存入数据库并读取(比如QQ空间,论坛等)。
使用步骤:
第一步:准备好以下jar包(如图)
FCKeditor jar包下载请点击此处
第二步:接下来我们要做两件事情,一件事情就是要把FCKEditor控件放到web项目中,这个控件是用于网页的,所以其代码是使用JavaScript脚本编写的,需要和web网页一起被下载的浏览器上才能执行;第二件事情就是这个网页上的控件因为支持图片的上传与下载,所以在上传与下载的时候需要服务端的支持,那么我们我的java服务端如何支持这个控件的工作呢?FCKEditor自身提供了相关的java工具,就是我们下载的第二个文件。因此我们要做的第二件事情就是在服务端配置java工具,使得FCKEditor控件在处理上传图片时能够正确工作。
接下来我们就开始对配置FCKEditor控件进行两项工作:
解压缩FCKeditor_2.6.5.zip,在其中我们能找到一个文件夹叫fckeditor,那么将这个文件夹整个复制到你的web应用的根目录下,即WebRoot下;
解压缩fckeditor-java-2.4.1-bin.zip,将这样几个jar文件复制到web应用的WEB-INF/lib目录中(commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,java-core-2.4.1.jar,slf4j-api-1.5.2.jar,slf4j-simple-1.5.2.jar),其中最后一个文件在这个zip包中可能不存在,那么你可以下载一个文件叫fckeditor-java-2.4.1-bin.zip,在这个war文件中的lib中存在上述的5个jar文件,其实在war中也包含了FCKEditor控件的内容,也就是说如果你只是下载了war也可以了。
classpath目录中创建一个名叫为fckeditor.properties的文件(即src包下面),文件中放置一行内容为:
connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl;
第三步:配置web.xml
在web.xml中添加一个Servlet的配置,配置内容如下:
<servlet> <servlet> <servlet-name>Connector</servlet-name> <servlet-class>net.fckeditor.connector.ConnectorServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Connector</servlet-name> <url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern> </servlet-mapping>
第四步:添加显示页面(JSP页面)
1.在需要使用这个控件的jsp文件的开头添加标签库的引入语句:
<%@ taglib uri="http://java.fckeditor.net" prefix="FCK" %>
2.添加显示主页面,至此已经完成。但可能存在部分问题,后面演示。
<FCK:editor instanceName="content" basePath="/fckeditor" > </FCK:editor>
3.获取控件中输入的内容方法:(根据自己需求而定)
(1)导入相关的方法,注意src下的路径问题:
<script type="text/javascript" src="fckeditor/editor/fckeditor.js"></script>
(2)利用javascript获得数据,当然先在body中有调用方法的动作
<input type="button" value="点击" onclick="getContent();"/>
<script type="text/javascript" language="javascript"> function getContent(){ var oEditor = FCKeditorAPI.GetInstance("content"); var fckContent = oEditor.GetXHTML(true); window.location.href="saveIntroduce.action?fckContent="+encodeURIComponent(fckContent); } </script>
注意:请求时传到action中小心乱码,我使用了encodeURIComponent(fckContent);
(3)在浏览器中输入JSP页面地址,就显示出来了
但是当点击上传图片时,问题出现了…………
一直是等待……并且控制台有问题了……
严重:Servlet.service() for servlet Connector threw exception
java.lang.IndexOutOfBoundsException: Index: 0,Size: 0
(4)解决方法:
原因分析:如果FCKeditor单纯地在jsp页面上显示,不会存在这样的问题。但是如果FCKeditor与Struts2整合,就会出现这样的问题。造成此问题的原因就是Struts2的拦截器。在web.xml配置文件中,可以清楚的看到:
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
在FCKeditor的配置中,FCKeditor是使用servlet来实现的,它也是通过拦截URL的机制进行工作的,FCKeditor的部分servlet配置如下:
<servlet-mapping> <servlet-name>Connector</servlet-name> <url-pattern> /fckeditor/editor/filemanager/connectors/* </url-pattern> </servlet-mapping>
现在就很明了了,struts拦截所有以“/”开头的URL,FCKeditor的servlet拦截所有以“/fckeditor/editor/filemanager/connectors/”开头的URL,当你使用FCKeditor上传图片的时候,URL中包含有“/”(指网站根目录),优先被struts的拦截器拦截,这样上传图片的URL请求自然就不会转发到FCKeditor的servlet,所以我们上传图片也就不成功。
解决方法:(如果你的struts核心包中没有StrutsPrepareAndExecuteFilter,也可以继承FilterDispatcher类)
我自己定义了一个过滤器FCKFilter.java,让它继承Struts2的过滤器StrutsPrepareAndExecuteFilter,完整代码如下:
package com.olympus.sapg.smtinnovation.util.method; 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.ng.filter.StrutsPrepareAndExecuteFilter; public class FCKFilter extends StrutsPrepareAndExecuteFilter { public void doFilter(ServletRequest req,ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; String URI = request.getRequestURI(); String[] uriArray = URI.split("/fckeditor/editor/filemanager/connectors/"); int arrayLen = uriArray.length; if (arrayLen >= 2) { chain.doFilter(req, res); }else { super.doFilter(req, res, chain); } } }
然后再在web.xml中更改过滤配置,只用修改filter中的class属性即可,其中为你上面那个FCKFilter 类的全名,如下:
<filter> <filter-name>struts2</filter-name> <filter-class>com.hime.hos.manager.action.FCKFilter</filter-class> </filter>
至此功能已经完成。上面的代码是重写了Struts2的过滤器StrutsPrepareAndExecuteFilter中的doFilter方法,执行的原理为:
获得完整的http url地址,然后判断url地址中是否包含有FCKeditor的servlet拦截规则“/fckeditor/editor/filemanager/connectors/”,若包含,struts就不拦截该url请求,而是直接转发,交由FCKeditor的servlet来处理;若不包含,则拦截该url请求,由struts来处理。
相关文章推荐
- 一步一步跟我学易语言之第二个易程序菜单设计
- FCK编辑器(FCKEditor)添加新按钮和功能的修改方法
- ecshop后台编辑器替换成ueditor编辑器
- jquery可定制的在线UEditor编辑器
- 10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
- PHP网页 Ewebeditor 编辑器嵌入方法
- kindSoft在线网页编辑器简单的配置参数介绍
- dedecms5.5 最新版ckeditor编辑器整合教程
- javascript 在线文本编辑器实现代码
- 在线编辑器中换行与内容自动提取
- 网页上的Javascript编辑器和代码格式化
- 基于jquery实现可定制的web在线富文本编辑器附源码下载
- 浅析Yii2集成富文本编辑器redactor实例教程
- ArtEditor富文本编辑器增加表单提交功能
- 推荐5款跨平台的PHP编辑器
- 超漂亮的Bootstrap 富文本编辑器summernote
- 5款适合PHP使用的HTML编辑器推荐
- JS模仿编辑器实时改变文本框宽度和高度大小的方法
- Kindeditor在线文本编辑器如何过滤HTML
- 9个非常棒的Android代码编辑器 移动开发者的最爱