问题描述
今天看一份报纸的网页:http://ctdsb.cnhubei.com/HTML/ctdsb/20101029/ctdsb1211884.html,想到一个问题。网页源码中图片的路径是相对路径<img src=......ctdsb20101029m_20100f01a29c_7.jpg border=0>,它的绝对路径就是这样的:<img src=http://ctdsb.cnhubei.com/ctdsb/20101029/m_20100f01a29c_7.jpg border=0>用java的HTTPConnection可以获得某个网页的源码,获得的源码里的图片是相对路径的,用Java应该怎么由......ctdsb20101029m_20100f01a29c_7.jpg来获得http://ctdsb.cnhubei.com/ctdsb/20101029/m_20100f01a29c_7.jpg呢小弟只有5分,呵呵不好意思。 问题补充:enet_java 写道
解决方案
引用enet_java 写道看来没有实践的发言可靠性比较差!!! 目录rmrb/存在两个目录 html/2010-10/30/nw.D110000renmrb_20101030_4-01.htm res/1/20101030/1288391715375_1.jpg nw.D110000renmrb_20101030_4-01.htm引入的图片相对路径就是 ../../../res/1/20101030/1288391715375_1.jpg 这样你如果要获取图片的真实路径就像你说的,应该是http://paper.people.com.cn/rmrb/res/1/20101030/1288391715375_1.jpg 所以前面的说法是不正确的,../代表了目录的深度,也就是需要根据这个../来确定图片你的真实路径,../代表需要上一级目录,有几次代表URL中从文件(nw.D110000renmrb_20101030_4-01.htm)需要向上几级目录。 然后在追加后面的部分(/res/1/20101030/1288391715375_1.jpg) 不知道能不能明白。 越来越靠谱了 问题是怎么判断相对路径中有几个../或..? 利用正则表达式就可以做到了。表达式规则:(.{2}/+)通过Matcher可以得到groupcount 然后可以将getPath获取的部分,利用/进行分割rmrb/res/1/20101030 然后就可以根据../的个数groupcount 获取到需要得到目录级别,譬如:如果是3 就是rmrb/如果是2 就是 res/可以一次类推。
解决方案二:
看来没有实践的发言可靠性比较差!!! 目录rmrb/存在两个目录 html/2010-10/30/nw.D110000renmrb_20101030_4-01.htm res/1/20101030/1288391715375_1.jpg nw.D110000renmrb_20101030_4-01.htm引入的图片相对路径就是 ../../../res/1/20101030/1288391715375_1.jpg 这样你如果要获取图片的真实路径就像你说的,应该是http://paper.people.com.cn/rmrb/res/1/20101030/1288391715375_1.jpg 所以前面的说法是不正确的,../代表了目录的深度,也就是需要根据这个../来确定图片你的真实路径,../代表需要上一级目录,有几次代表URL中从文件(nw.D110000renmrb_20101030_4-01.htm)需要向上几级目录。然后在追加后面的部分(/res/1/20101030/1288391715375_1.jpg)不知道能不能明白。
解决方案三:
一开始我理解错了,你获取的是对方的url,我理解成通过程序过获取自己的了
解决方案四:
其实这个../../../ctdsb20101029m_20100f01a29c_7.jpg 都是相对根路径的,都是这个的缩写 http://xxxx.xx.com/ctdsb/20101029/m_20100f01a29c_7.jpg 只要是可以得到http://xxxx.xx.com/ 就可以了!!context对这个的意义不大。
解决方案五:
url.getPath 获取到的就是了。
解决方案六:
引用不管 哪个 .. 有多少个 有一个 上面的url 就去掉一个 /***从最后开始算! 然后直接加在最后面 就OK ! 不太懂你的意思 他的意思就是从跟开始 ......ctdsb20101029m_20100f01a29c_7.jpg 不要考虑......,直接忽略获取到http://server:port/context/以后,之间将ctdsb20101029m_20100f01a29c_7.jpg 追加到后面就可以。
解决方案七:
看了看那,这篇文章上写的太明白了,呵呵!!LZ也参考一下吧。http://www.iteye.com/topic/117978
解决方案八:
其实和 容易就找出 个通用的办法啊引用已知网页地址 http://ctdsb.cnhubei.com/HTML/ctdsb/20101029 而图片相对与网页的地址是 src=......ctdsb20101029m_20100f01a29c_7.jpg 不管 哪个 。。/ 有多少个 有一个 上面的url 就去掉一个 /***从最后开始算! 然后直接加在最后面 就OK !
解决方案:
楼主的意思是不是想从外网链接原图片?已知网页地址http://ctdsb.cnhubei.com/HTML/ctdsb/20101029/ctdsb1211884.html是当前而图片相对与网页的地址是src=......ctdsb20101029m_20100f01a29c_7.jpg如何得到http://ctdsb.cnhubei.com/ctdsb/20101029/m_20100f01a29c_7.jpg
解决方案:
得到下面的信息 String context = request.getContextPath();String server = request.getServerName();int port = request.getServerPort();然后就可以组装据对地址的串了。