在学struts2的过程中,碰到了两个小问题
1(最主要的问题)在页面中显示以中文命名的图片时失败,如下,我上传一张图片(我.png)到服务器后跳转并显示
<body>
上传成功!<br/>
文件标题:<s:property value=" + title"/><br/>
文件为:<img src="<s:property value="'uploadFiles/'
+ uploadFileName"/>"/><br/>
<s:debug/>
</body>
注:debug发现action中uploadFileName属性是中文,服务器里保存的也是中文,就是显示不出来(换成英文可以显示),猜测struts2内部解码过程出问题,但不知如何下手~~
2.(其实这个应该不算问题)在做上传的时候,文件保存在tomcat项目的文件夹uploadFiles里,
即webapp/XXX项目/uploadFiles/下,这个文件夹是我手动创建的,每次只要重启tomcat文件夹就
丢失,就又得创建一次,有没有什么办法在eclipse里项目编写的时候创建uploadFiles文件
夹,然后一起发布到tomcat下,这样省去每次新建一次文件夹
这很正常,因为你上传到服务器之后服务器会把你上传的文件重新命名的。这个你可以在你服务器上传文件的文件夹中找到那个图片,就明白了。
其实就是使用之前先转换下。
JSP开始的地方:
<%!
public static String HTMLUnicodeToString(String str) {
Pattern pattern = Pattern.compile("(?:&#(\\d{4,5});?)");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
str = matcher.replaceAll(String.valueOf((char) Integer.parseInt(matcher.group(1), 10)));
}
return str;
}
%>
后面:
<% uploadFileName = HTMLUnicodeToString(uploadFileName) %>
文件为:<img src="<s:property value="'uploadFiles/' + uploadFileName"/>"/><br/>
其实最好定义成一个工具类,而不是直接定义在JSP中。。。
唉,问题关键在于,比如能保证浏览器地址栏直接输入:
http://localhost:8080/load/uploadFiles/曾.png
是可访问的,现在继续回到这个问题来研究。
你用的是Tomcat,那么请检查下conf\server.xml这个配置文件,有没有这样一句话:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" connectionTimeout="1000"
如果没有URIEncoding="UTF-8",请把它加上去;然后重启服务,再用全路径直接浏览器试试看