struts2 + kindeditor 报服务器发生故障

本文详细介绍了在使用Struts2处理上传文件时遇到的问题及解决方案,包括修改web.xml配置、重写上传文件处理代码等步骤,最终成功解决了解析问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用firefox的firebug调试发现路径没有问题,官网的案例讲的也比较明白。排除这些错误。

2. debug发现parseRequest方法异常,一查发现是struts2的原因,struts2将request封装成org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper 了。

解决方案:

1. 将web.xml 中?struts过滤器改成如下:

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
?</filter-mapping>

2. 重写上传文件部分

<%@?page?language="java"?pageEncoding="GBK"%> 
<%@page 
import="java.util.*,java.io.*, 
org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper, 
java.util.concurrent.locks.*"%> 
<% 
//Struts2 请求?包装过滤器 
MultiPartRequestWrapper?wrapper?=?(MultiPartRequestWrapper)?request; 
//?获得上传的文件名 
String?fileName?=?wrapper.getFileNames("imgFile")[0]; 
//获得未见过滤器 
File?file?=?wrapper.getFiles("imgFile")[0]; 
//-----------?重新构建上传文件名---------------------- 
final?Lock?lock?=?new?ReentrantLock(); 
String?newName?=?null; 
lock.lock(); 
try?{ 
//加锁为防止文件名重复 
newName?=?System.currentTimeMillis() 
+?fileName.substring(fileName.lastIndexOf("."), 
fileName.length()); 
}finally?{ 
lock.unlock(); 

//------------?锁结束?------------- 
//获取文件输出流 
FileOutputStream?fos?=?new?FileOutputStream(request.getSession() 
.getServletContext().getRealPath("/") 
+?"ke_upload\\"?+?newName); 
//设置?KE?中的图片文件地址 
String?newFileName?=?request.getScheme()?+?"://" 
+?request.getServerName()?+?":"?+?request.getServerPort() 
+?request.getContextPath()?+?"/ke_upload/"?+?newName; 
byte[]?buffer?=?new?byte[1024]; 
//获取内存中当前文件输入流 
InputStream?in?=?new?FileInputStream(file); 
try?{ 
int?num?=?0; 
while?((num?=?in.read(buffer))?>?0)?{ 
fos.write(buffer,?0,?num); 

}?catch?(Exception?e)?{ 
e.printStackTrace(System.err); 
}?finally?{ 
in.close(); 
fos.close(); 

//发送给KE 
out.println("<html><head><title>Insert?Image</title><meta?http-equiv='content-type'?content='text/html;?charset=gbk'/></head><body>"); 
out.println("<script?type='text/javascript'>"); 
out.println("parent.parent.KE.plugin['image'].insert('" 
+?wrapper.getParameter("id")?+?"','"?+?newFileName?+?"','" 
+?wrapper.getParameter("imgTitle")?+?"','" 
+?wrapper.getParameter("imgWidth")?+?"','" 
+?wrapper.getParameter("imgHeight")?+?"','" 
+?wrapper.getParameter("imgBorder")?+?"','" 
+?wrapper.getParameter("align")?+?"');</script>"); 
out.println("</body></html>"); 
%> 

?参考:

http://commons.apache.org/fileupload/faq.html#howto-parse-in-action

http://www.iteye.com/topic/599971

http://topic.youkuaiyun.com/u/20090514/10/ba62c761-e591-4c9e-859a-87907634ea13.html

# KindEditor 变更记录# ver 3.4.3 * BUG: 修改了重复编辑超级链接时每次都添加&的问题。 * BUG: 修改了在IE上右键菜单没有复制、剪切项目的问题。 * BUG: 修改了在IE上没有格式化<font color=#000>代码的问题。 * BUG: 修改了PHP上传程序日期格式不正确的问题。 * BUG: 修改了在IE上代码模式下全屏本地URL自动变成绝对URL的问题。 * BUG: 修改了在代码模式下KE.util.setFullHtml函数不显示HTML内容的问题。 * 改善: 弹出框未指定任何按钮(yesButton, noButton, previewButton)时,不显示底部DIV。 ver 3.4.2 (2010-04-04) * 增加: 添加了KE.util.isEmpty函数,用于判断编辑器是否有可见内容。 * 改善: 页面很小时弹出菜单的上下位置不变。 * 改善: 插入超级链接未选中内容时插入URL文本。 * 改善: 插入超级链接的打开类型为当前窗口时删除A标签的target属性。 * BUG: 修改了在IE上HTML属性值里输入JS代码时格式出现错误的问题。 * BUG: 修改了cssPath属性为空时加载首页的问题。 * BUG: 修改了当浏览器出现滚动条并拖动调整大小时控制不住的问题。 * BUG: 修改了embed代码丢失自定义属性的问题。 * BUG: 修改了在IE上切换到代码模式后点击图标触发onbeforeunload事件的问题。 * BUG: 修改了在Firefox上光标在图片旁边时点击鼠标右键,弹出右键菜单的问题。 * BUG: 修改了在Firefox上无法修改/删除图片的超级链接的问题。 * BUG: 修改了在Webkit上有时候无法添加/修改/删除图片的超级链接的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值