Java EE里的Web项目有个相对独立的最高目录WebRoot,我们估且认为它是根目录/。Web项目成品中的其它目录都是相对与此目录的子目录。在开发时,我们可能会用到一些框架,比如struts,spring等。使用这些框架,我们需要配制相应的xml文件,至少也会配制web.xml文件。使用Struts时,在struts-conf.xml中映射Action是最常见的配制,所有的映射,都以“/”开头,那么这里的“/”指的是那个目录呢?我想此时你也猜到了,那就是对就用不可见相对独立的WebRoot,应用中“/action”就相当于是系统目录中的”WebRoot/action",知道这一点,就不会在为Action映射老是不可用发愁了。在某个文件夹下的Action动作,映射时只要用”/“来代替”WebRoot“即可,比如我们对”WebRoot/admin/manager/login.do"在Struts-config.xml中作映射,可在相应Action的path中设置"path=/admin/manager/login"即完成的映射。在其它.xml文件中,映射都是这样做的。
前面提到对应用不可见的“WebRoot",因为每个项目都有WebRoot,那就不好在用它来表示项目的最高目录,此时的解决方案就是用项目名来代替应用的"WebRoot",这就是我们在实际应用中看到”myNews/admin/manager/login.jsp",而不是“WebRoot/admin/manager/login.jsp"。以上这两段文字主要说了”绝对路径“的问题,相信明白了这点,相对路径也就用不了多说,不过相对路径一般不要用在映射文件中,这样容易出错。不过在jsp页面中,本人认为在能用相当路径的情况下尽量使用相对路径,因为有些时候如果使用绝对路径,如果不能区分是配制文件还是实际应用,往往是很容易出错的,常常会在实际应用中用到配制文件中”/“错误的代替了”项目名”,要命的是这个时候很可能转到一个空白页面,并且不报任何错误。这也是推荐使用相对路径的原因所在。
不过,我发现并不是必须用“绝对路径”的方式来做映射,但也不是“相对路径”,如果映射目录结构层次在两层内(如WebRoot/admin/login.do")可在配制文件中直接用“path=/login”来映射,这样做可能需要在指定“input”属性。不过,按绝对路径的方式来映射,无论层次多深,都是不会出问题的,前提是其它地方都正确无误。