本人java初学者,这是在学习servlet的转发和重定向时碰到的一个关于路径的小知识点。虽然看起来似乎很简单,但是有时候就是容易在这些小问题上犯糊涂,所以想总结一下,加深印象。
首先我创建了3个servlet,在web.xml中的配置是这样的:
<servlet-mapping> <servlet-name>key1</servlet-name> <url-pattern>/servlet1</url-pattern> <servlet-name>key2</servlet-name> <url-pattern>/servlet/servlet2</url-pattern> <servlet-name>/servlet/kk/key3</servlet-name> <url-pattern>/servlet3</url-pattern> </servlet-mapping>
假如我要在这3个servlet中互相转发,语法就是:
request.getRequestDispatcher("url").forward(request, response);
那么其中的url怎么写呢?例如我要从servlet2转发到servlet1,url为"servlet1"吗?测试发现浏览器给出这样的错误信息:
HTTP Status 404 The requested resource (/test/servlet/servlet1) is not available. (test为项目名)
意思是请求的URL所对应的资源不可用。想想当然不可用,因为servlet1在<servlet-mapping>中对应的<url-pattern>为'servlet1',而不是'servlet/servlet1'.
这里就涉及到路径的知识了,无论是平常所说的文件路径,还是web中的资源路径,都有绝对路径和相对路径之分。绝对路径很好理解,就是文件或资源的完整物理路径。而所谓的相对路径就是相对于某个基准目录的路径。拿例子来解释:如"servlet1"这个url是一个相对路径,那么假设"servlet/servlet2"为基准路径,那么"servlet1"这个相对路径的真实路径为"servlet/servlet1"
注意:在servlet中,"/"代表根目录,在此例中,根目录就是项目的路径即:test/
"./"代表当前目录,如servlet/kk/key3这个url中key3的当前目录就是servlet/kk/
"../"代表上一级目录,如servlet/kk/key3这个url中key3的上一级目录就是servlet/
那么开头那个问题就很好解决了,从servlet2转发到servlet1正确url格式应为:"../servlet1"或者为"/servlet1"(因为servlet2上一级目录就是根目录了)。