struts2路径问题,中文图片显示失败问题(兼散分,求笼罩)!!! 操作系统的字符集是啥?莫非是GBK?然后你JSP及Java源码的字符集是啥?莫非是UTF-8? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 都是GBK,我改成UTF-8也还是不行,第二个问题我解决了,就第一个还卡在那儿 曾 这个就是“曾”的Unicode编码。不过你还是试试看,直接在浏览器的地址栏输入: http://localhost:8080/load/uploadFiles/曾.png是否能正确显示图片。另外也看看硬盘的uploadFiles目录中,在cmd窗口下,dir 能看到正确的文件名么? 这算是个好消息。那么你只需要设法让: <img src="/load/uploadFiles/曾.png" />中的URL解码成: <img src="/load/uploadFiles/曾.png" />就行了。给你个函数处理下试试看: 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; }调用: System.out.println(HTMLUnicodeToString("http://localhost:8080/load/uploadFiles/曾.png")); <img src="/load/uploadFiles/曾.png" />这段代码的JSP源码,是怎么样的? <body> 上传成功!<br/> 文件标题:<s:property value=" + title"/><br/> 文件为:<img src="<s:property value="'uploadFiles/' + uploadFileName"/>"/><br/> <s:debug/></body>就这段 其实就是使用之前先转换下。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中 我还是有点困惑,我重新质疑了一遍我的问题假如:我直接访问显示页面,succ.jsp显示页面直接打印图片直接打印英文图片<img src="uploadFiles/1.jpg"/>结果:显示一切正常直接打印中文图片<img src="uploadFiles/曾.jpg"/>结果:显示失败,查看图片属性URL地址正常,网页源代码正常,均为中文我直接填写的就是转码后的路径,可还是显示失败,我蛋碎了 难道struts2暗中做了什么手脚我不知道的 不会吧,你直接在HTML中写死: <img src="/load/uploadFiles/曾.jpg"/>无法访问?注意用绝对路径哦。 我是在jsp页面直接写的,就像这样<img src="uploadFiles/1.jpg"/>直接写死英文的图片都能输出来,中文的就邪门了再比如我直接在地址栏输入http://localhost:8080/load/uploadFiles/1.jpg显示正常http://localhost:8080/load/uploadFiles/曾.jpg显示失败 地址栏输入http://localhost:8080/load/uploadFiles/曾.jpg报404HTTP Status 404 - /zyw/uploadFiles/%E6%9B%BE.jpg 天啊,我在7楼问你,直接在浏览器的地址栏输入: http://localhost:8080/load/uploadFiles/曾.png是否能正确显示图片。你说都能现在19楼说不能了,前面那些转码啥的其实就白忙活了。另外,19楼的报错信息为啥换了个路径?跟你地址栏输入的路径不一致? 不好意思,都是我的错,7楼的时候我刚吃完饭,吃傻了对不起哈19楼是我重新新建了一个项目zyw,加入图片,然后访问的,ldh911眼睛好犀利啊 唉,问题关键在于,比如能保证浏览器地址栏直接输入: 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",请把它加上去;然后重启服务,再用全路径直接浏览器试试看。 我也是初学Strtus 2 我的是在struts.xml文件中<constant name="struts.i18n.encoding" value="UTF-8"></constant> 上传对应的action <action name="upload" class="org.xmh.demo.UploadAction"> <interceptor-ref name="fileUpload"> <!-- 配置允许上传的文件类型 --> <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param> <!-- 配置允许上传的文件大小 --> <param name="maximumSize">1024000</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> <!-- 动态设置Action的属性值 --> <param name="savePath">/upload</param> <result name="input">/jsp/6/upload.jsp</result> <result>/jsp/6/succ.jsp</result> </action>UploadAction类的savePath属性的get方法 public String getSavePath() { return ServletActionContext.getServletContext().getRealPath(this.savePath); }对应的试图文件 第一个文件为:<img src="<s:url value="/upload/"/><s:property value="uploadFileName[0]"/>"/><br> 第二个文件为:<img src="<s:url value="/upload/"/><s:property value="uploadFileName[1]"/>"/><br> 第三个文件为:<img src="<s:url value="/upload/"/><s:property value="uploadFileName[2]"/>"/><br>访问地址:http://127.0.0.1:8080/struts2Demo1/jsp/6/upload.action struts2Demo1是项目名称upload文件夹在 struts2Demo1项目的根目录下 真是太感谢了,我也是遇到这个问题了,搞了好久呢!结果就是conf\server.xml这个配置文件里面差那句话!!!! 用jsp页面以流文件形式获取word文档显示全是乱码 怎么解决呀 字符串转换xml文件失败. DispatchAction使用中无法解决的问题 特急!!! 管理员,版主请求删帖 弹出窗口里如何嵌入real播放器? c/s b/s 与 混联结构 各自的好处 万分紧急-----谢谢 请问用java怎样做一个离线工具,就是说指定一个链接,能把上面的图片样式表等的信息都下下来 JAVA关于WebGis问题 applet 与 servlet 通讯(请帮我纠错),急.......... JSP的org.apache.jasper.JasperException错误 关于servlet的问题
http://localhost:8080/load/uploadFiles/曾.png
是否能正确显示图片。另外也看看硬盘的uploadFiles目录中,在cmd窗口下,dir 能看到正确的文件名么?
这算是个好消息。那么你只需要设法让:
<img src="/load/uploadFiles/曾.png" />
中的URL解码成:
<img src="/load/uploadFiles/曾.png" />
就行了。给你个函数处理下试试看: 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;
}
调用:
System.out.println(HTMLUnicodeToString("http://localhost:8080/load/uploadFiles/曾.png"));
<body>
上传成功!<br/>
文件标题:<s:property value=" + title"/><br/>
文件为:<img src="<s:property value="'uploadFiles/'
+ uploadFileName"/>"/><br/>
<s:debug/>
</body>
就这段
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中
假如:我直接访问显示页面,succ.jsp显示页面直接打印图片
直接打印英文图片
<img src="uploadFiles/1.jpg"/>
结果:显示一切正常
直接打印中文图片
<img src="uploadFiles/曾.jpg"/>
结果:显示失败,查看图片属性URL地址正常,网页源代码正常,均为中文
我直接填写的就是转码后的路径,可还是显示失败,我蛋碎了
<img src="/load/uploadFiles/曾.jpg"/>
无法访问?注意用绝对路径哦。
<img src="uploadFiles/1.jpg"/>直接写死
英文的图片都能输出来,中文的就邪门了
再比如我直接在地址栏输入
http://localhost:8080/load/uploadFiles/1.jpg显示正常
http://localhost:8080/load/uploadFiles/曾.jpg显示失败
HTTP Status 404 - /zyw/uploadFiles/%E6%9B%BE.jpg
天啊,我在7楼问你,直接在浏览器的地址栏输入:
http://localhost:8080/load/uploadFiles/曾.png
是否能正确显示图片。你说都能现在19楼说不能了,前面那些转码啥的其实就白忙活了。
另外,19楼的报错信息为啥换了个路径?跟你地址栏输入的路径不一致?
不好意思,都是我的错,7楼的时候我刚吃完饭,吃傻了
对不起哈19楼是我重新新建了一个项目zyw,加入图片,然后访问的,ldh911眼睛好犀利啊
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",请把它加上去;然后重启服务,再用全路径直接浏览器试试看。
<action name="upload" class="org.xmh.demo.UploadAction">
<interceptor-ref name="fileUpload">
<!-- 配置允许上传的文件类型 -->
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<!-- 配置允许上传的文件大小 -->
<param name="maximumSize">1024000</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<!-- 动态设置Action的属性值 -->
<param name="savePath">/upload</param>
<result name="input">/jsp/6/upload.jsp</result>
<result>/jsp/6/succ.jsp</result>
</action>
UploadAction类的savePath属性的get方法
public String getSavePath() {
return ServletActionContext.getServletContext().getRealPath(this.savePath);
}
对应的试图文件
第一个文件为:<img src="<s:url value="/upload/"/><s:property value="uploadFileName[0]"/>"/><br>
第二个文件为:<img src="<s:url value="/upload/"/><s:property value="uploadFileName[1]"/>"/><br>
第三个文件为:<img src="<s:url value="/upload/"/><s:property value="uploadFileName[2]"/>"/><br>
访问地址:http://127.0.0.1:8080/struts2Demo1/jsp/6/upload.action struts2Demo1是项目名称upload文件夹在 struts2Demo1项目的根目录下