集合类框架的常用类比

集合类框架的常用类比
这两天在写代码的时候,由于涉及到资源的位置,因此,需要在Java Bean中定义一些字段,用来表示资源的位置,比如:imgUrl,logoUri等等。但是,每次定义的时候,心里都很纠结,是该用imgUrl还是imgUri呢?

同样的,另外一个问题:String HttpServletRequest.getRequestURI();和StringBuffer HttpServletRequest.getRequestURL();返回的内容有何不同?为什么会如此?

带着这些问题到网上去搜了下,没发现让自己看了明白的解释,于是,想到了Java类库里有两个对应的类java.net.URI和java.net.URL,终于,在这两个类里的javadoc里找到了答案。

URIs, URLs, and URNs
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:[email protected]。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。

在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。

ok,现在回答文章开头提出的问题,到底是imgUrl好呢,还是imgUri好?显然,如果说imgUri是肯定没问题的,因为即使它实际上是url,那它也是uri的一种。那么用imgUrl有没有问题呢?此时则要看它的可能取值,如果是绝对路径,能够定位的,那么用imgUrl是没问题的,而如果是相对路径,那还是不要用ImgUrl的好。总之,用imgUri是肯定没问题的,而用imgUrl则要视实际情况而定。

U2FsdGVkX1+KZ0RBQAxcxHqZQKn20ZrYxf98Mzglaq+R1u4dOldqBUcyhYBo+ak9
diPeCgENvbqs4AVYswBzQG9YWOGOhEDkBnqFUx1mxKUo2ZDz4d/lqDo/YzYw1WWS
AU8gyq+pYVvwIKvKNbB4KoxP+vg07bVLIpt48Dt0tGewoq+6oabaTxvowWGp0tOT
9Yw55/38kWZ/csp2LaprZVjrUT48aJuy3FtRMgQFOQm5alqDy+4JI5+hJH/TE/nF
iXbBv31gEFOG7F/XWt1MT69S/0xarbEi8KVqYfCwaw62lf58jek1gVy46Mf7AgMF
FvwW40SaihBr408vTKk8yy7/aU6PZ8zD0i+r0NpmCdAOGEeSapdN9tyPY+amw3t1
jGWJjXtDEwlIV35jkpzNSB1qKmTL+EPXxf4PW5HDgEDZq7Vt1HBCiunHzcWPdO7U
luvq56BmZ1G/qWXttxHPICUAFhAUAweJ7V9WtNdUbuTxBJ8gYePdTBRCdB9Js7hz
gjEdATYpM+y32DmRTMA+el/kdA04perCT/PpjU+43lxNTzIQAlQMx2Pfd9isPik/
UZqYDpCktU+eAPATyD9/l1I6MxtumchVfhy/Uys30tYMYGb0n0qYh0LrptwkhLUc
/a0Vg7iSAC7qUNIrDsXRSJX/elVK5FLYamc1qf+TnqNVWA8Kpk57hITxvt9/OAns
XmOCaq95NZ4URTA9PE2uO7hqiItZRT3SWCJ81mRqQEtrcSeJPDs6RQh9gZ1FZr1D
cpVsyuD5ER1mUtbqJjJNZepGH738kBJ7h1MFSjYXDd69hO7RGgfuhprNZNH5S6oY
TobqiVSaykCCYB4DNXI7/8nd7nCeaniWGlLRKVaLzpylFiSNk8+PMD6xRlW1SUOQ
TC5CnkL+0zf86eXcR9P63hY8w/IxfSazVmr/UZi8C9slGoKfhjfNubNtNm5WB/Fx
YDSNsMXYG4XHJ6D3U+CIUxb0wCZCg7pF6z48qcpdR9298bvW6lRbbXqMpe6P4qCp
ulN7XNYm6U22TPz+ky7BEL0RhZjVSdlkL05/cqxaVi4JKq8LbN2z/gIoN3UgZzTt
+uIhVqL+Vw5BrC1c+pPnsDg7MeILc66XXpBM8KuBaHTs+Xgvg8CCpbGfJGXTulI6
aXIat3PN91w7BDwB0USmUMl31rehtO9CeQn6w+K4Cgs16i/LILa9BizDL6gS6Q0+
EWe1O2IWhKmr3fM22lfqeh0CeXJ3r6nAGb3o/gANwIPbtIcuzPHEijy8DW208+n1
y03Kwc0QGSShnKpWnqc/H1tqY4Bhx0vvRW5IG86mhEQaPDvq6ykeg42SeiRmvFAX
ikF8Sq7Y41DR2tRpQp8hcFb4pGD/yhTGMyFC/mGEOMlEPN0JtbxQonfQSHQUujIi
cR7XCzwRkdcSo5Xx4BJ8iphtkSl8SBrINpXVvDwIMQ0uuSAgk+NrBqNKBuDk5Tq3
IpeHnl2c+JiK+EOllLok5hlFLAK1vmcfe0ViLFDS3k3axinkCt6MSAfUt9bakP49
0S0gX2PxTigDCcE+bNpxbeo41hT73zlps5KyLyJCkpfuBlP1GDXWLUz8tnzNeO0R
JLPBYMnzkWL0yvN+yzgr6e5Yq5IJtBhAVsLI3Eh+3jjt2v5vjqqzP6OcJykhJNQ/
rx0oUDLJW7Nar4+Lvn0Cgg7vcZThYmutC+0eakaByAHy06pXofpajdF+9GshtQ46
hMKQFkp9Tp3jglB9THI1pebL7VyUIgNbpMh9a/ZH5//Taul/PWXVtlLozueZA2vR
/ektGc+0n5HuoZ9J/PWHqRXc6hKtL6TDtvU8Ajf9PrG9C4DOPH7rMV7bcAtD5rbF
xURIii/X77odwsAEze7L0saUMr7gS3sOCE0soIm2WSEJFKPPmc+VsWXz/5FK+bPO
uU4n1xt+l3rDb/Q8r9GyIj2g3aMEfYKOurfbtVmwApmV7q7E7vOqN0JGtdQ3Rni3
6zYlrSDdr2hYE5CF/lM9ENZucn3ZdECIrMHn13OYlteKAoSCSoC9tClu0kqR9Lly
ggBJOVNrxsARH2wWMXaf+p41DMuZ24Dj1KJKeljeD4etpHZN7RbCVKY61OxEK0X/
rffaHKLpaLkCwhXi0lKuUxYeNLuR3YTCuK/0tOBVzfV4Dkr0EsE4v9JFwqCamT/N
tVR+dly4gBzZ6ePGCXdGLSEErAgtdq+Ok/MJyeOzwnD1BY2fY8a8JDaVU46RavWU
SQeFt5KfI/+NlMCoL9d0s52VC6hP2uJHYM7z6bQ7DXnBHx4uYfjBogokAZMLD/dq
I9RifLILWP1dsGdYKmbFiurvtqLfb3BDWN7AGBM8N5jPsXYHIhvKaWiNah/9wvDi
fAa4/vJx5OCDIYUQPfboa+xo4O3Nf6wELhhhySUK5SSzmQiJprFA/xP7PIDTlxxj
Hs6CyQCNG/2RDKkBDByh4ewkRQpUWYvPSfmE6FnUvA2SF6Ir3DouL7oZWwGkLB//
9IyK5uAq1BVpe9NXmetwrO8f4+LHIOSO5FVZFJimJWN5rPV2uuxCquvUYNAjZxcQ
6WZg2yjFcrYh4I70AjeJF5+6A0x+4Wl/gFpeUp3ry8yNno7RZYGbHQAzRIS9UKHg
/guzCIVSbK6d4gpv2UMfJ5yHFJKeM2Ba1nzF58fXcY9o/NjxtQ3Z1xaM6NwbrOQO
9DUo2xbo6AqVuJMQbNPoHqvZDaB/+Jz8M7pLrrfpdfGJOXVb0NeMXZuiO6tlYMnF
Dn+2tOQlJwlg0CkJeTPjG+7eki3tH2jN2G2CfzAgJaEr6IxahDyHxONsxoK0fGle
ns7xZmKnFBmUBhPyfoTyO+VFvA3aovZ9Tzn1jNOF6+vEsNk8jjiiFiMNxnAyeQNo
1wsWJ3PD3qiiMDQ0XD586mlc6ePRCoJ6sUFi4GYPiPuxb2WURfGNxf5L3IYuBR0b
wKl2O1Lv/j+PDjcDksjj7Fe/Hf337+0iv/EruhdHS+sS7TfjQAeZhCq1XO1N/08S
pzUxS8aFphy3CAK4dE4H0IwiVGQRKCQl9A9uF1SgIGMxahUwxt3kP0P1yZZbUuK9
ZgvS91D539UUQVl6Gwcesr9WDaGEmsnJIG7YYkml2fSfXqFehUk+ZnIIPzNKubRG
w0yFUfTxYHDfVDp8uv7Hu1wRwLvOCDGqpUelW6z2qkoUhu+/DR4F/YspvUU+j6yW
NWMTZwf/cltfWyozKEKhS9PIzF3FcSmwmdGOxLOKshmneC1RrsG2L6l4NXpc0v73
aHLzw92X8mY2y7ek3ZjHvNIv2MSHyNEFasP9HMh2FE5cJITeIg1VHtE06c6Z4Zps
Y3uAhrxVhuVqRlWQK+uY+miEqceY0+RjDzMf+3dAURbxtTK5WzmRjdoqcFa1YEpQ
vpTBVHK06lKzF+nLFfImwIyYBb3+a/MtCM7ojyYmxM2jkuiB8FEjL/cnj/qbguuP
RH1slIPLiNOwBOeQixHS9Ukro2pY1pUQ9PGCTYOkc3dF2/aEFHSqdteKKAZqzIG0
RP+LWiQbjnQ313yeHHqen1xAeMS6H4xc+2y5QVhf7IDaxTQuSD0kOnj5VkaBn00R
X1ni3ZlYgYaHI8Yiofgt/NqLZCzjtnTgFaTrfBExhL8PnmLMzcPHhy9l6/o+cOW9
ayjNbKL2L4//FgG8bk7zjBJ270QxLeqlRZkG+VXENTEDj63ekiDNVF9oXIpGXRYJ
9x/9Tq+nXYI6VIsLo4T5lGcN+/0Pg2SSXToO/SP4wW+seDQRJL6vIhn0fZbXu5SL
61+28i9kvE5Rr2WTwcuwBg==