问题一:中文乱码
在使用Struts2实现文件上传时,若上传文件名为中文,则会在项目的发布目录中看上传文件名显示为乱码。解决办法很简单:
在struts.xml配置文件中配置:
<constant name="struts.i18n.encoding" value="gbk/gb2312">即可。
问题二:上传过大时抛出org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException异常
解决办法:在struts.xml配置文件中:
<constant name="struts.multipart.maxSize" value="100000000">;若这时还不行,需重写struts.properties文件:将strtuts.multipart.maxSize = 50097152 改为struts.multipart.maxSize=1000000000;
以上两种方法试后,在我的demo中还是抛错,JVM内存溢出。这时就得对JVM内存进行调优。我们知道JVM默认可使用内存上限为64M;也就是说当我们要上传的文件超过64M后,那么错误也就接踵而来。
可以通过设置其最大和最小值来实现.设置的方法主要是几个.
1.可以在windows 更改系统环境变量
加上JAVA_OPTS=-Xms64m -Xmx512m
2,如果用的tomcat,在windows下,可以在
D:\tomcat7.0\bin\catalina.bat 中加上:
set JAVA_OPTS=-Xms64m -Xmx256m
位置在: rem Guess CATALINA_HOME if not defined 这行的下面加合适.
3.如果是linux系统
Linux 在{tomcat_home}/bin/catalina.sh的前面,加
set JAVA_OPTS='-Xms64 -Xmx512'
JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。
例如:java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar
如果Heap Size设置偏小,除了这些异常信息外,还会发现程序的响应速度变慢了。GC占用了更多的时间,而应用分配到的执行时间较少。
Heap Size 最大不要超过可用物理内存的80%,一般的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。
Heap size的 -Xms -Xmn 设置不要超出物理内存的大小。否则会提示“Error occurred during initialization of VM Could not reserve enough space for object heap”。
摘自他人语录:
---使用 struts2的拦截器也可以进行限制文件的类型、大小等,但是当上传文件大小2M后,这个拦截器就不起作用了,只用小于2M(默认大小)的时候才起作用。那是因为:common-fileupload组件默认最大支持上传文件的大小为2M,当我们上传大于2M的文件时,就会出现上面所说的异常。是这个异常的发生导致了fileUpload拦截器没有机会执行,所以看到的是页面没有任何变化,也没有任何提示信息,只是在控制台打印出了上面的那些上传文件过大的异常。
来源:oschina
链接:https://my.oschina.net/u/938966/blog/108196