`
liwenshui322
  • 浏览: 511873 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

kindEditor富文本编辑器(JSP版)

阅读更多

      今天终于把这个东东搞定了(主要是上传本地图片的问题,由于kindEditor本身只有PHP版本的,对于我这种java程序员看起来有点像天书)!附件有代码提供下载(内附使用说明书)

     我在网上找了一个JSP版本的 网址如下:http://wallimn.iteye.com/blog/327800(他测试的版本是2.4的,现在已经是3.3.1了。所以有点小问题,我稍微修改了一下)

     官方网站是:http://www.kindsoft.net/(到官方网站学学,蛮不错的)

     1.到官方网站下载kindEditor 网址如下:http://www.kindsoft.net/down.php 。

     2. 在Eclipse下建立一个Web项目,将下载下来的文件拷贝到 WebContent目录下。

     3. 在WebContent目录下建立一个HTML测试文件:kindEditorTest.html ,代码如下:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" charset="utf-8" src="kindEditor/kindeditor-3.3.1/kindeditor.js"></script>
<script type="text/javascript">
    KE.show({
        id : 'content_1' //TEXTAREA输入框的ID
    });
</script>
<title>Insert title here</title>
</head>
<body>
<form action="KindEditorAction.do" method="post">
<textarea id="content_1" name="content" cols="100" rows="8"></textarea>
<input type="submit" value="submit">
</form>

</body>
</html>

     说明:1.这里引入了一个外部JS文件,这就是kindEditor。注意路径,你的可能与我的不同!

              2.js代码里面有一句KE.show();KE是kindEditor里面的东西,里面的id指定哪个textarea标签来接收可视化编辑框的内容!下面有一个id为content_1的textarea标签

              3.form标签是我自己加的,为了测试后台能不能够得到数据,可以先去掉。

   4. 这个时候你请求这个页面的时候应该可以看到那个可视化编辑框了,现在唯一的问题就是还不能够上传本地图片,你可以试试!

   5. 查看kindEditor文件夹的plugins文件夹里面有一个image.html,打开这个文件。找到action="./../php/upload.php",看到了没有,就是这个东东,kindEditor默认实现的是PHP版本的本地图片上传,把upload.php修改成upload.jsp。并不是这样就完了,没这么简单,呵呵...

   6. 找到PHP文件夹,在下面建立一个upload.jsp文件,内容如下:

 

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@page  import = "java.net.URLDecoder" %>   
<%@ page  import = "java.util.*" %>   
<%@ page  import = "org.apache.commons.fileupload.*" %>  
 
<%   
String contextPath = request.getContextPath() ;   
String SavePath = request.getSession().getServletContext().getRealPath("/")+"image\\";   
String SaveUrl = contextPath+ "/image/" ;  
System.out.println("c--->"+contextPath+"----->"+SavePath+"---->"+SaveUrl);
String[] ExtArr =  new  String[]{ ".gif" , ".jpg" , ".png" , ".bmp" };   
int  MaxSize =  4000000 ;   
String Msg1 =  "上传文件大小超过限制。" ;   
String Msg2 =  "上传文件的扩展名不被允许。" ;    
String Msg3 =  "文件上传失败。" ;   
String Msg=Msg3;   
//java.io.File files=new java.io.File(".");       
//String FileName = (String)request.getAttribute("fileName");   
String FileWidth =  null ;   
String FileHeight =  null ;   
String FileBorder =  null ;   
String FileTitle =  null ;   
String FileTitle2 =  null ;   
String FileAlign =  null ;   
String FileHspace =  null ;   
String FileVspace =  null ;   
  
Date dt =  new  Date();   
Random random =  new  Random();   
random.nextInt();   
String FileNameAuto = String.format( "%X_%X" , new  Object[]{ new  Integer(( int )(dt.getTime())), new  Integer(random.nextInt())});   

System.out.println(FileNameAuto);
String FilePath =  null ;   
String FileUrl =  null ;   
DiskFileUpload fu =  new  DiskFileUpload();   
fu.setSizeMax(MaxSize); //   
fu.setSizeThreshold( 4096 );   
fu.setRepositoryPath( "c:/" );  
//ServletRequestContext src = new ServletRequestContext(request);      
List fileItems = fu.parseRequest(request); 
Iterator iter = fileItems.iterator();  
while  (iter.hasNext()) {   
    FileItem item = (FileItem) iter.next();   
    String fieldName = item.getFieldName(); 
     if  (!item.isFormField()) {   
        String name = item.getName();   
         long  size = item.getSize();   
         if ((name== null ||name.equals( "" )) && size== 0 )   
         continue ;   
         if (size>MaxSize) {   
            Msg=Msg1;   
             break ;   
        }   
         //namename = name.replace(':','_');   
         //namename = name.replace('\\','_');   
         int  pos = name.lastIndexOf( "." );   
        String ext = name.substring(pos);   
         boolean  b= false ;   
         for ( int  m= 0 ;m<ExtArr.length; m++){   
             if (ExtArr[m].equalsIgnoreCase(ext)){   
                b= true ;   
                 break ;   
            }   
        }   
         if  (b== false ){   
            Msg=Msg2;   
             break ;   
        }   
        FilePath = SavePath + FileNameAuto+ext;   
        System.out.println(FilePath+"  "+SavePath+"   "+FileNameAuto+"  "+ext);
        FileUrl = SaveUrl + FileNameAuto+ext;  
        java.io.File f=  new  java.io.File(FilePath);   
        item.write(f);   
    }   
     else {   
        String fieldValue = item.getString();   
         if ( "imgWidth" .equals(fieldName)){   
            FileWidth = fieldValue;   
        }   
         else   if ( "imgHeight" .equals(fieldName)){   
            FileHeight = fieldValue;   
        }   
         else   if ( "imgBorder" .equals(fieldName)){   
            FileBorder = fieldValue;   
        }   
         else   if ( "imgTitle" .equals(fieldName)){   
            FileTitle = fieldValue;   
        }   
         else   if ( "imgTitle2" .equals(fieldName)){   
             //FileTitle2 = URLDecoder.decode(fieldValue,"GB18030");   
            FileTitle2 = URLDecoder.decode(fieldValue, "UTF-8" );   
        }   
         else   if ( "imgAlign" .equals(fieldName)){   
            FileAlign = fieldValue;   
        }   
         else   if ( "imgHspace" .equals(fieldName)){   
            FileHspace = fieldValue;   
        }   
         else   if ( "imgVspace" .equals(fieldName)){   
            FileVspace = fieldValue;   
        }   
    }   
}   
if (FileUrl!= null ){   
    out.println(  "<html>" );   
    out.println(  "<head>" );   
    out.println(  "<title>error</title>" );   
    out.println(  "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">" );   
    out.println(  "</head>" );   
    out.println(  "<body>" );   
    out.println("<script type=\"text/javascript\">parent.KE.plugin[\"image\"].insert(\"content_1\",\""+FileUrl+"\",\""+FileTitle+"\",\""+FileWidth+"\",\""+FileHeight+"\",\""+FileBorder+"\");</script>");
  	System.out.println("<script type=\"text/javascript\">parent.KE.plugin[\"image\"].insert(\"content_1\",\""+FileUrl+"\",\""+FileTitle+"\",\""+FileWidth+"\",\""+FileHeight+"\",\""+FileBorder+"\");</script>");
    out.println(  "</body>" );   
    out.println(  "</html>" );   
}   
else {   
    out.println(  "<html>" );   
    out.println(  "<head>" );   
    out.println(  "<title>error</title>" );   
    out.println(  "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">" );   
    out.println(  "</head>" );   
    out.println(  "<body>" );   
    out.println(  "<script type=\"text/javascript\">alert(\""  + Msg +  "\");parent.KindDisableMenu();parent.KindReloadIframe();</script>" );   
    out.println(  "</body>" );   
    out.println(  "</html>" );   
}   
%>  

 

   7. 跑一下试试,这个时候你的后台应该会报错,没有找到一些包。这是因为你缺少一些上传文件的外部jar文件,他们是:commons-fileupload-1.2.1.jar与commons-io-1.4.jar ,附件有下载(里面有详细的说明)

   8. 这个时候应该没有什么问题了

   9. 在这个过程中,我遇到了一个路径问题。大家看一看,假设你在WebContent下面建立了一个image文件夹,你点击上传文件的时候,文件并没有保存在这个文件夹里面。你可以打印一下那个上传文件保存路径,我这里是一串这样奇怪的东西:E:\Eclipse项目\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ShoppingNetwork\image\。如果你把项目当做war文件导出去,单独在tomcat中部署,那样是保存在WebContent下面的image文件夹里面。我自作聪明地把那个保存路径改为:E:\Eclipse项目\ShoppingNetwork\WebContent\image,结果是我能够看到上传的图片,但是在那个编辑器里面不显示,这个问题折磨了我好久。现在我终于明白了,Eclipse在把项目部署到tomcat的时候就临时把项目拷贝到那个奇怪的目录下面,你可以去那个奇怪的目录下面去找找,应该能够找到你上次的文件!

     就这样了,希望大家都能够弄明白!

 

6
1
分享到:
评论
4 楼 743475184 2012-06-04  
 
3 楼 Dennybruce 2010-05-26  
为什么页面不不显示?
2 楼 gaoisbest 2010-03-16  
59 行
String ext = name.substring(pos); [/img][/img][/b]出现错误:
org.apache.jasper.JasperException: An exception occurred processing JSP page /kindEditor/kindeditor-3.3.1/php/upload.jsp at line 59

56:          //namename = name.replace(':','_');  
57:          //namename = name.replace('\\','_');  
58:          int  pos = name.lastIndexOf( "." ); 
59:          String ext = name.substring(pos); 
60:          boolean  b= false ;  
61:          for ( int  m= 0 ;m<ExtArr.length; m++){  
62:              if (ExtArr[m].equalsIgnoreCase(ext)){  


Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)


root cause

java.lang.StringIndexOutOfBoundsException: String index out of range: -1
java.lang.String.substring(Unknown Source)
java.lang.String.substring(Unknown Source)
org.apache.jsp.kindEditor.kindeditor_002d3_3_1.php.upload_jsp._jspService(upload_jsp.java:113)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet
1 楼 gaoisbest 2010-03-16  
出现错误java.lang.StringIndexOutOfBoundsException: String index out of range: -1

相关推荐

Global site tag (gtag.js) - Google Analytics