首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

struts2路径有关问题,中文图片显示失败有关问题(兼散分,求笼罩)!

2012-12-18 
struts2路径问题,中文图片显示失败问题(兼散分,求笼罩)!!!在学struts2的过程中,碰到了两个小问题1(最主要

struts2路径问题,中文图片显示失败问题(兼散分,求笼罩)!!!
在学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下,这样省去每次新建一次文件夹,如图:


[最优解释]
唉,问题关键在于,比如能保证浏览器地址栏直接输入:
   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",请把它加上去;然后重启服务,再用全路径直接浏览器试试看。
[其他解释]
操作系统的字符集是啥?莫非是GBK?

然后你JSP及Java源码的字符集是啥?莫非是UTF-8?
[其他解释]
引用:
操作系统的字符集是啥?莫非是GBK?

然后你JSP及Java源码的字符集是啥?莫非是UTF-8?

都是GBK,我改成UTF-8也还是不行,第二个问题我解决了,就第一个还卡在那儿
[其他解释]
引用:
操作系统的字符集是啥?莫非是GBK?

然后你JSP及Java源码的字符集是啥?莫非是UTF-8?

另外我发现了一个奇怪的地方就是不知道怎么解决
显示页面如下:
没有乱码之类的情况,但是我打开这个页面的源代码,如下
图片的地址竟然不是中文,还有一个奇怪的地方,我右键那张未显示的图片--属性,如下
地址竟然又成了中文,这。。蛋疼死我了
[其他解释]
引用:
操作系统的字符集是啥?莫非是GBK?

然后你JSP及Java源码的字符集是啥?莫非是UTF-8?

另外我发现了一个奇怪的地方就是不知道怎么解决
显示页面如下:
没有乱码之类的情况,但是我打开这个页面的源代码,如下
图片的地址竟然不是中文,还有一个奇怪的地方,我右键那张未显示的图片--属性,如下
地址竟然又成了中文,这。。蛋疼死我了
[其他解释]
这很正常,因为你上传到服务器之后服务器会把你上传的文件重新命名的。这个你可以在你服务器上传文件的文件夹中找到那个图片,就明白了。
[其他解释]
引用:
这很正常,因为你上传到服务器之后服务器会把你上传的文件重新命名的。这个你可以在你服务器上传文件的文件夹中找到那个图片,就明白了。
我在文件夹中找到了,没有重命名,不是这个问题
[其他解释]
&#26366; 这个就是“曾”的Unicode编码。

不过你还是试试看,直接在浏览器的地址栏输入:
  http://localhost:8080/load/uploadFiles/曾.png
是否能正确显示图片。

另外也看看硬盘的uploadFiles目录中,在cmd窗口下,dir 能看到正确的文件名么?
[其他解释]
引用:
&amp;#26366; 这个就是“曾”的Unicode编码。

不过你还是试试看,直接在浏览器的地址栏输入:
  http://localhost:8080/load/uploadFiles/曾.png
是否能正确显示图片。

另外也看看硬盘的uploadFiles目录中,在cmd窗口下,dir 能看到正确的文件名么?

都能,我太蛋疼了
[其他解释]
引用:
都能,我太蛋疼了


这算是个好消息。

那么你只需要设法让:
  <img src="/load/uploadFiles/&#26366;.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/&#26366;.png"));
[其他解释]
引用:
引用:
都能,我太蛋疼了


这算是个好消息。

那么你只需要设法让:
  <img src="/load/uploadFiles/&amp;#26366;.png" />
中的URL解码成:
  <img src="/load/uploadFiles/曾.png" />
就行了。

给你个函数处理下试试看:
Java code

    publi……

想了半天还是不知道从哪儿下手,求赐教
[其他解释]
<img src="/load/uploadFiles/&#26366;.png" />

这段代码的JSP源码,是怎么样的?
[其他解释]
引用:
<img src="/load/uploadFiles/&amp;#26366;.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中。。。
[其他解释]
引用:
其实就是使用之前先转换下。
JSP开始的地方:
<%! 
public static String HTMLUnicodeToString(String str) {
        Pattern pattern = Pattern.compile("(?:&amp;#(\\d{4,5});?)");


        Matcher matcher = pattern.matcher……


我还是有点困惑,我重新质疑了一遍我的问题
假如:我直接访问显示页面,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显示失败
[其他解释]
不会吧,你直接在HTML中写死:
   <img src="/load/uploadFiles/曾.jpg"/>
无法访问?

注意用绝对路径哦。
[其他解释]
引用:
引用:

不过你还是试试看,直接在浏览器的地址栏输入:
http://localhost:8080/load/uploadFiles/曾.png
是否能正确显示图片。

另外也看看硬盘的uploadFiles目录中,在cmd窗口下,dir 能看到正确的文件名么?

都能,我太蛋疼了


天啊,我在7楼问你,直接在浏览器的地址栏输入:
  http://localhost:8080/load/uploadFiles/曾.png
是否能正确显示图片。

你说都能。。。现在19楼说不能了,前面那些转码啥的其实就白忙活了。


另外,19楼的报错信息为啥换了个路径?跟你地址栏输入的路径不一致?
[其他解释]
地址栏输入http://localhost:8080/load/uploadFiles/曾.jpg报404
HTTP Status 404 - /zyw/uploadFiles/%E6%9B%BE.jpg

[其他解释]
引用:
引用:
引用:

不过你还是试试看,直接在浏览器的地址栏输入:
http://localhost:8080/load/uploadFiles/曾.png
是否能正确显示图片。

另外也看看硬盘的uploadFiles目录中,在cmd窗口下,dir 能看到正确的文件名么?

都能,我太蛋疼了


天啊,我在7楼问你,直接在浏览器的地址栏输……


不好意思,都是我的错,7楼的时候我刚吃完饭,吃傻了
对不起哈

19楼是我重新新建了一个项目zyw,加入图片,然后访问的,ldh911眼睛好犀利啊
[其他解释]
我也是初学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项目的根目录下
[其他解释]

引用:
唉,问题关键在于,比如能保证浏览器地址栏直接输入:
   http://localhost:8080/load/uploadFiles/曾.png
是可访问的,现在继续回到这个问题来研究。


你用的是Tomcat,那么请检查下conf\server.xml这个配置文件,有没有这样一句话:
  <Connector port="8080" protocol="HTTP/1.1" UR……

太感谢你了,怪我粗心大意,麻烦了你这么久

热点排行